最近准备面一家新的公司。总结了一下之前的java面试题,具体内容如下,大家共同学习。
class A{
static int id0; //静态成员变量id0;
int id1 ; //非静态成员变量id1
//静态代码块
static{
}
//构造代码块
{
}
//静态方法
static void xxx(){
}
//非静态方法
void xxxxx(){
}
//构造函数
public A(){
....
}
}
对于一个java类,类加载的时候,首先是将字节码文件加载进入JVM虚拟机中去。静态代码块是在类加载的时候就进行初始化调用了,静态成员变量在加载的时候也是对所有的字段进行赋默认值。
public class SingleTon{
private static SingleTon singleTon = new SingleTon();
private static int count1 ;
private static int count2= 0 ;
private SingleTon(){
count1++;
count2++;
}
public static SingleTon getInstance(){
return singleTon;
}
}
1.加载到虚拟机的时候,第一阶段是对静态成员变量赋默认值
-----------------------------------------
singleTon = null;
count1=0;
count2=0;
2.静态代码块和静态成员变量的赋值操作,整个执行过程从上到下执行
--------------------------------------------------------------------------------------------
private static SingleTon singleTon = new SingleTon();
上面这句话分为两个动作:1.static { singleTon = new SingleTon();
}
[singleTon=new SingleTon();]
count1=1;//调用了构造函数,所以count1=1;
count2=1;//同样的调用了构造函数,所以count2=1
[count2=0]
count2=0;
最后返回值为1,0