public class Customer extends Person {
static Name name = new Name("Tom");
static {
Screen.print("2", "Customer static init block!");
}
{
Screen.print("3", "Customer instance init block!");
}
Customer() {
Screen.print("4", "Customer instance constructor!");
}
public static void main(String[] args) {
Screen.print("1", "Customer Initial Test!");
Person p = new Customer();
}
}
class Person {
private Name name = new Name();
static {
Screen.print("5", "Person static init block!");
}
Person() {
Screen.print("6", "Person instance constructor!");
}
{
Screen.print("7", "Person instance init block!");
}
}
class Name {
Name() {
Screen.print("8", "Name instance constructor!");
}
Name(String value) {
Screen.print("9", "Name instance constructor with: " + value);
}
static {
Screen.print("10", "Name static init block");
}
}
class Screen {
static void print(String sn, String msg) {
System.out.println("P[" + sn + "] - " + msg);
}
}
执行结果是什么?
类加载优先级顺序为:
static区(static初始化块和类static实例变量) > 类的非static初始化区(非static初始化块和类实例变量) > 类构造函数
static区在第一次遇到该类时就被加载,非static区和构造函数在创建对象(既new)时加载。同一个类的多个static区之间按代码出现的先后顺序加载,非static区亦然。static只加载一次,为类所有,不是为类对象所有。
该程序中:
1.进入Customer类,检查发现有extends,存在父类Person。
2.进入Person类,检查Person无父类存在,但有static区,执行输出"5"。因Person没被创建,所以非static区和Person构造函数不被加载。
3.进入Customer类程序体,发现有多个static区。
第一个为static Name name = new Name("Tom")。创建Name,进入Name类,加载Name静态初始化快,输出"10"。无非static区,则加载相应构造函数,输出"9"。
第二个出现的static是"2",输出
4.进入main线程,运行第一行输出"1"
5.创建一个无参Customer()对象。因为Person类是其父类,创建子类时,系统必自动创建一个父类对象。
再次进入Person类,按顺序先创建Name对象。进入Name类,其static区已被加载,不需要再加载。没有非static区。调用相应构造函数,输出"8",退出name类。加载Person类第二个非static区,输出"7",然后加载其构造函数输出"6",退出Person。
进入Customer类,加载初始化块输出"3",然后是构造函数输出"4"
6.退出main线程
分享到:
相关推荐
Java面试题
Java程序员+上班那点事儿.doc Java程序员+上班那点事儿.doc Java程序员+上班那点事儿.doc Java程序员+上班那点事儿.doc
本项目是用Java语言实现的点对点语音实时聊天系统,它允许用户之间进行即时的音频交流。下面将详细探讨该系统可能涉及的关键技术点、设计模式以及实现原理。 1. **Java语音处理库**:实现语音聊天的核心是处理音频...
Java程序员上班那点事 Java程序员上班那点事 Java程序员上班那点事 Java程序员上班那点事
最近的java 面试知识点, 比较全的java基础知识面试知识,linux
Java程序员上班那点事儿不全希望你喜欢谢谢了
基于java的开发源码-smpp协议的点对点短信发送源码包.zip 基于java的开发源码-smpp协议的点对点短信发送源码包.zip 基于java的开发源码-smpp协议的点对点短信发送源码包.zip 基于java的开发源码-smpp协议的点对点...
《JAVA程序员上班那点事》是由钟声撰写的一本面向Java程序员的专业书籍,它深入浅出地探讨了Java程序员在日常工作中可能遇到的各种问题、挑战以及解决方案。这本书以实际工作场景为背景,提供了丰富的经验和技巧,...
java核心知识点整理,面试很有用 Java核心知识点2.JVM JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它...
java知识点积累
java利用两点经纬度计算两点之间的距离java利用两点经纬度计算两点之间的距离java利用两点经纬度计算两点之间的距离java利用两点经纬度计算两点之间的距离java利用两点经纬度计算两点之间的距离
Java程序员,上班那点事儿.pdf 全本 24.5M
Objects Java:示范如何由点串构造面对象并添加到数据集中,在地图中显示 关键类型/成员: Datasources.create方法 Datasets.create方法 DatasetVector.getRecordset方法 Point2Ds.add方法 GeoRegion.addPart...
Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班...
24点游戏,java24点游戏,java24点游戏,java24点游戏,java 24点游戏,java24点游戏,java24点游戏,java24点游戏,java 24点游戏,java24点游戏,java24点游戏,java24点游戏,java 24点游戏,java24点游戏,java...
Java程序员+上班那点事儿.pdf 很好的文章 菜鸟 大虾都有帮助!
java 编程实现鼠标单击获取屏幕上的任一点位置的颜色 java 编程实现鼠标单击获取屏幕上的任一点位置的颜色 java 编程实现鼠标单击获取屏幕上的任一点位置的颜色 java 编程实现鼠标单击获取屏幕上的任一点位置的颜色 ...
Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案...