目录
2.为什么重写".equals"方法一定要重写hashcode方法?
7.为什么Main方法是公开public且静态static的?
9.静态代码块和代码块的区别是什么? 加载类时的顺序是什么?
1. "==" 和 ".equals"之间的区别。
"=="可以用于基础类型和引用类型的比较,".equals"只能用于引用类型。
"=="用于基本类型:判断两个基本类型的值是否相等。(“==”两边只要出现了基本数据类型比较的就是值是否相等。例如基本类型和包装类的比较)
"=="用于引用类型:判断两个引用类型的引用对象的地址是否相同。
".equals"在object类中就是调用了"=="的判断。(源码如下)
public boolean equals(Object obj) {
return (this == obj);
}
但在其他Object子类中".equals"方法通常被重写成为判断两者所指向的内存空间的值是不是相同。
2.为什么重写".equals"方法一定要重写hashcode方法?
在我们创建一个类时,也可以通过重写".equals"方法来实现自己想要的判断方式,同时也要重写hashcode方法(hashCode方法是本地方法,用于计算出对象的一个散列值,用于判断在集合中对象是否重复的关键。),否则会出现".equals"方法为True,hashcode却不等的情况,导致集合无法正确判断对象是否重复。
3.什么时候"finalize"方法会被调用?
当该对象被jvm垃圾回收机制回收时调用。
4.什么是动态绑定机制?
当调用对象的时候,该方法会和该对象的内存地址/运行类型绑定。
当调用对象的属性时,没有动态绑定机制,哪里声明就使用哪里。
5.类变量(静态变量)储存在哪里? 类变量的特点是什么?
特点:在类加载的时候就被加载,无需创建实例即可调用
存储位置:在jdk7以下的版本储存在静态域中,
从jdk7开始储存在堆中java.lang.Class 对象的末尾。
6.为什么我们需要类方法(静态方法)?
类方法无需创建实例即可调用,可用作开发工具。例如Math.pow()方法。
7.为什么Main方法是公开public且静态static的?
因为Main方法要能被JVM虚拟机调用,必须得是公开的,且静态的JVM调用这个方法就不需要创建任何包含Main方法的实例。
8.什么时候我们会选择使用代码块 ? 为什么 ?
使用代码块有利于提高代码的复用性和扩展性:当类的不同构造器中的重复代码过多时,我们就可以选择把重复的部分写入代码块。
9.静态代码块和代码块的区别是什么? 加载类时的顺序是什么?
静态代码块只能调用静态方法和静态变量,且在虚拟机加载类的时候就会加载执行,只执行一次;非静态代码块,在创建对象的时候执行,每次创建对象都会执行一次。
顺序:(1)父类静态代码块,父类静态成员变量初始化(这两个谁先声明谁在前面)->
(2)子类静态代码块,子类静态成员变量初始化(这两个谁先声明谁在前面)->
(3)父类代码块,父类成员变量初始化(这两个谁先声明谁在前面)->
(4)父类构造函数->
(5)子类代码块,子类成员变量初始化(这两个谁先声明谁在前面)->
(6)子类构造函数.