1.可能会遇到这样的面试题目:写出下列代码的执行顺序
/***
* @author 逸川同学
* 问:程序的执行顺序
* 可以使用debug的方法来确定
*/
public class Sequence1 {
String name = "逸川同学";//4
int age = 10;//5
public Sequence1(){//3( 在这之前先执行super() )
age = 100;//6
}
public static void main(String[] args) {//1
Sequence1 sequence = new Sequence1();//2
System.out.println(sequence.name+","+sequence.age);//7
}
}
程序先执行main(),然后是main里面的第一行代码
new 一个类对象,先执行她的构造方法,执行这个构造方法之前,值得注意的是需要先执行super()
然后是他的类成员变量,然后才会执行构造方法内部的语句。
最后才执行输出语句。
2.下面是另一个例子:
有四个类,一个是sequence,另外三个分别是T1,T2,T3。他们是继承的关系。
/**
* 程序执行顺序: 先静态(先父类再子类),,再非静态(先父类再子类)
* 整个程序执行期间,静态块只执行一次,,而且类模板对象只有一个
* @author 逸川同学
* 输出:
static T3
static T2
static T1
T3成员
T3构造
T2成员
T2构造
T1成员
T1构造
*/
public class Sequence2 {
public static void main(String[] args) {
new T1();
}
}
class T1 extends T2{
{
System.out.println("T1成员");
}
static{
System.out.println("static T1");
}
public T1(){
System.out.println("T1构造");
}
}
class T2 extends T3{
{
System.out.println("T2成员");
}
static{
System.out.println("static T2");
}
public T2(){
System.out.println("T2构造");
}
}
class T3{
{
System.out.println("T3成员");
}
static{
System.out.println("static T3");
}
public T3(){
System.out.println("T3构造");
}
}