问题
1.Java 8 你知道有什么新特性?
2.八种基本的数据类型,对应字节数
3.八种基本的数据类型对应字节数
4.自动装箱和拆箱是什么?
5.面向对象的三大特征
6.多态体现在哪几个方面?
7.抽象类和普通类的区别
8.抽象类可以用final修饰吗
9.为什么静态变量不能访问非静态变量
10.java中final关键字的作用
11.Object类有哪些方法?
12.== 与 equals 有什么区别?
13.JVM、JDK、JRE三者关系?
14.long和int可以互转吗 ?
15.为什么用bigDecimal 不用double ?
16.重载与重写有什么区别?
17.深拷贝和浅拷贝的区别?
18.什么是反射?
回答
1.
Java 8 核心是引入函数式编程
语言层:
Lambda 表达式((a,b) -> a+b 代替匿名内部类)
函数式接口(只有一个抽象方法的接口)
方法引用(Lambda 的简写)
接口默认方法与静态方法(接口可定义默认实现和静态方法)
重复注解、类型注解。
类库层:
Stream API(链式处理集合)
Optional(防 空指针异常(NPE))
新的日期时间 API java.time(不可变、线程安全)
CompletableFuture(增强异步编程能力)
并行数组排序 Arrays.parallelSort
2.
- 数值型:整数类型(byte、short、int、long)和浮点类型(float、double)
- 字符型:char
- 布尔型:boolean
3.
byte1 / short2 / char2 / int4 / long8 / float4 / double8 / boolean
4.
装箱(Boxing)和拆箱(Unboxing)是将基本数据类型和对应的包装类之间进行转换的过程。
自动装箱主要发生在赋值和方法调用时
5.
封装,继承,多态
6.
方法重载,方法重写,接口与实现,向上转型和向下转型
7.
实例化:普通类可以直接实例化对象,而抽象类不能被实例化,只能被继承。
方法实现:普通类中的方法可以有具体的实现,而抽象类中的方法可以有实现也可以没有实现。
实现限制:普通类可以被其他类继承和使用,而抽象类一般用于作为基类,被其他类继承和扩展使用。
8.
不能,Java中的抽象类是用来被继承的,而final修饰符用于禁止类被继承或方法被重写,因此,抽象类和final修饰符是互斥的,不能同时使用。
9.
根本原因是生命周期不同:静态成员随「类加载」而生,实例成员随「new」而生,类存在的时候可能一个对象都还没有,自然访问不到"还没出生"的东西。
10.
修饰类:当final修饰一个类时,表示这个类不能被继承
修饰方法:用final修饰的方法不能在子类中被重写。
修饰变量:当final修饰基本数据类型的变量时,该变量一旦被赋值就不能再改变。
11.
Object 是所有类的父类,提供 11 个方法,分成四组记:
- 对象信息组:
toString():默认返回 类名@十六进制hashCode
getClass():返回运行时真实类型
hashCode():返回哈希值
- 比较组:
equals()
- 拷贝与回收组:
clone():默认浅拷贝
finlize():自Java 9起 废弃
- 线程协作组:
wait() × 3 个重载 + notify() + notifyAll(),必须在 synchronized 块里调用
quals 比不比内容,取决于这个类有没有重写它。
12.
== 是运算符,equals 是方法 ------这是最根本的区别。
== :比基本类型 时比的是值 ;比引用类型 时比的是内存地址 (是不是同一个对象)。
equals :是 Object 的方法,默认实现就是 == (也是比地址),只有重写过的类(String、Integer)才比内容------所以"equals 比内容"这个说法有前提。
13.
JVM是Java虚拟机,是Java程序运行的环境。
JDK(Java Development Kit)是Java开发工具包,是开发Java程序所需的工具集合。
JRE是Java运行时环境,是Java程序运行所需的最小环境。
14.
Java中的long和int可以相互转换。由于long类型的范围比int类型大,因此将int转换为long是安全的,而将long转换为int可能会导致数据丢失或溢出。
15.
double 是二进制浮点数,0.1 在二进制里是无限循环小数
**BigDecimal**全程整数运算,所以完全精确,一般牵扯到金钱的计算 , 都使用 BigDecimal
16.
重载(Overloading)指的是在同一个类中,可以有多个同名方法,它们具有不同的参数列表(参数类型、参数个数或参数顺序不同),编译器根据调用时的参数类型来决定调用哪个方法。
重写(Overriding)指的是子类可以重新定义父类中的方法,方法名、参数列表和返回类型必须与父类中的方法一致,通过@override注解来明确表示这是对父类方法的重写。
17.
浅拷贝是指只复制对象本身和其内部的值类型字段,但不会复制对象内部的引用类型字段。
深拷贝是指在复制对象的同时,将对象内部的所有引用类型字段的内容也复制一份,而不是共享引用。
18.
Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性;