11
【Q】:Java中包装类型和基本类型的区别?
【A】:
- 基本类型位于栈上(局部变量在栈上,成员变量在堆上),性能较高,不支持null。
- 包装类型是类,存储到堆中,可以用于面向对象编程,并且支持null。因为是对象所以涉及垃圾回收和内存分配,性能低。
==比较的是对象的内存地址,而equals()比较的是对象的值。默认为null。直接new创建出来。
12
【Q】:接口和抽象类有什么区别?
【A】:
- 接口和抽象类在设计的动机不一样。
- 接口的设计是自上而下的,我们知道了某一行为,于是基于这些行为约束定义了接口,一些类需要这些行为,因此实现了对应的接口。
- 抽象类的设计是自下而上的。我们写了很多类,发现它们之间有共性,有很多代码之间可以复用,因此将公共逻辑封装成一个抽象类,减少代码冗余。
13
【Q】: JDK和JRE有什么区别?
【A】:
- JRE是Java的运行环境,包含了JVM,核心;类库和其他支持运行java的程序文件。
- JVM执行java字节码,提高java程序的运行环境。核心类库如java.lang,java。util等。其他文件如配置文件,库文件等支持JVM的运行。
- JDK可以视为JRE的超集,是用于Java程序的完整开发环境,包含JRE,以及开,调试和监控Java应用程序的工具。开发工具如编译器(javac),调试器(jdb),打包工具(jar)等。
14
【Q】:Java中的hashCode和equals方法是什么?它们与==操作有什么区别?
【A】:
hashCode,equals和==都是Java中用于比较对象的三种方式。hashCode用于散列存储数据中确定对象的存储位置。可用于快速比较两个对象是否不同,因为如果它们的哈希码不同,那么它们肯定不相等。equals用于比较两个对象的内容是否相等,通常需要自定义比较逻辑。==用于比较两个引用是否指向同一个对象(即内存地址)。对应基本数据类型比较它们的值。
15
【Q】: hashCode和equals方法之间有什么区别?
【A】:
equals方法主要判断两个对象是否相等。默认使用==比较对象的内存地址,但可以在类中重写equals来定义是否相等。hashCode返回对象的哈希值,主要是基于哈希的集合(HashMap,HashSet)。同一个对象每次调用hashCode必须返回相同的值,且相等的对象必须有相同的哈希码。- 如果两个对象equals相等,它们的hashCode值必须相同。反过来不要求成立。
16
【Q】:什么是Java的动态代理?
【A】:
- Java的动态代理是在运行时创建代理对象的机制。它通过代理模式为对象提供一种机制,使得可以在不修改目标对象的情况下对其行为进行增强或调整。
- 代理可以看作调用目标的一个包装,通常用来调用真实的目标之前进行一些逻辑处理,消除一些重复的代码。
17
【Q】: JDK动态代理和CGLIB动态代理有什么区别?
【A】:
- JDK动态代理是基于接口的,所有要求代理类一定是有定义接口的。
- CGLIB基于ASM字节码生成工具,它通过继承的方式生成目标类的子类来实现代理对象,所有要注意
final方法。
18
【Q】: Java注解的原理是什么?
【A】:
- 注解也就是一个标记,是一种提供元数据的机制,用于给代码添加说明信息。可以标记在类上,方法上,属性上等。
- 其本身不影响程序逻辑的运行,但可以通过工具或框架来利用这些信息。
19
【Q】: Java中的反射机制?
【A】:
- Java中的反射机制是指在运行时获取类的结构信息(如方法,字段,构造函数)并操作对象的一种机制。放射机制提供了在运行时动态创建对象,调用方法,访问字段等功能,而无需再编译时知道这些类的具体信息。
20
【Q】:什么是Java的不可变类?
【A】:
- 不可变类是指在创建后其状态(对象的字段)无法被修改的类。对象一旦被创建,它的所有属性都不能被更改。这种类的实例在整个生命周期内保持不变。
- 关键体征:
-
- 声明类为final,防止被子类继承。
- 类的所有字段都是
private和final,保证初始化后不能被修改。 - 通过构造函数初始化所有的字段。
- 不提供任何修改对象的方法(如
setter方法)。 - 如果类包含可变对象的引用,确保这些引用在对象外部无法被修改改,如
getter方法中放回对象的副本(new 一个新的对象)。
- Java中经典的不可变类有:
String,Integer,BigDecimal,LocalDate等。

被折叠的 条评论
为什么被折叠?



