动手动脑:
1. Foo obj1=new Foo();这段代码为何报错?
原因是程序中在Foo类中已经定义了一个有参的构造方法,当类中若已有有参的构造方法时,系统将不会再生成无参的构造方法,所以new Foo()就没有构造方法可以执行,所以报错。
2. 程序执行构造方法的顺序。
A:当程序中既有有参的构造方法又有无参的构造方法时,若声明对象时有参,那么执行有参的构造方法,如图:
B:当声明的对象无参时,执行无参的构造方法,如图:
C:若无参的构造方法无内容时,先执行变量定义时默认的值,如图:
D:当没有默认值时,执行初始化块的内容:
3. 静态初始化的执行顺序:
A:调用父类的静态初始化模块B:调用子类的静态初始化模块C:调用父类的初始化模块D:调用父类的无参构造函数E:调用子类的初始化模块F:调用子类的无参构造函数F:调用子类的有参构造函数
4. 如何用静态方法访问类的实例成员:、
让静态方法引用该类的一个实例对象,如图:
Interger类的问题:
通过查询jdk找到Interger类中的valueOf方法,执行的代码如下:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}