面试时,经常会遇到看代码写运算结果的题目,里面涉及静态变量,静态代码块,静态方法,实例变量,实例代码块,构造方法等的代码,如下:
请说程序执行运算结果。
public class Programer {
public static int salary = getSalary(); //静态变量
private int workAge = getWorkAge();//实例变量
static {//静态代码块
System.out.println(1);
}
private static int getSalary() { //静态方法
System.out.println(2);
return 20000;
}
public Programer() { //构造方法
System.out.println(3);
}
{//实例代码块
System.out.println(4);
}
private int getWorkAge() { //非静态方法
System.out.println(5);
return 10;
}
public static void main(String[] args) {//主方法
new Programer();
new Programer();
System.out.println(6);
}
}
参考答案:
2
1
5
4
3
5
4
3
6
相信大部分同学根据自身的经验,是能轻松解题的。但在实际的面试中题目可能变幻莫测,如果对类的实例化顺序不太熟悉,解决起来估计还是有一定难度的。
因此今天就对类实例化做一个专题讲解,我们从写的java源代码到字节码,再从字节码执行流程反推到java源代码来讲解相关代码的执行流程。
二 类加载及初始化详解 2.1 源码到字节码 2.1.1 类结构简介javac Student.java--->Student.class
使用工具javac编译的过程中,其实会经历非常复杂的过程,我们不用去深入研究。我们只要关心编译之后的class字节码文件。
这个class字节码文件中含有哪些数据呢,如何查看呢?我们可以从官方的文档中找到答案。
首先,class文件是二进制文件,直接使用文本工具读取是看不到信息的。我们可以使用专门的软件来查看class文件中的字节信息。例如:winhex, sublime
查看Student.class字节码信息如下:
原创文章 12获赞 2访问量 264
关注
私信
展开阅读全文
作者:Ybb_studyRecord