1、请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。
答:1、静态初始化块的优先级最高,也就是最先执行,并且仅在类第一次被加载时执行;
2、非静态初始化块和构造函数后执行.
3、非静态初始化块的代码会在类构造函数之前执行。
2、静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
答: public class Test{
int j =1;
static int value;
public static void M()
{
System.out.println(value);
}
public int N()
{
int x = 100;
return x;
}
public static void main(String args[]) {
Test1 a = new Test1();
value = a.N();
a.M();
}
}
3、两对整数明明完全一样,为何一个输出true,一个输出false?
答:在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。
上面的代码中i1和j2的数值为100,因此会直接从cache中取已经存在的对象,所以i1和j1指向的是同一个对象,而i2和j2则是分别指向不同的对象。(查资料)