`
yangwn
  • 浏览: 77305 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论
  • icewubin: kimmking 写道icewubin 写道Dollyn 写道 ...
    Java
  • kimmking: icewubin 写道Dollyn 写道我十分怀疑最后一条,很 ...
    Java
  • beneo: 完全忽略了一個好的JVM的優化能力 難道java是C編譯器么 ...
    Java
  • icewubin: Dollyn 写道我十分怀疑最后一条,很多编译器都会自动做类似 ...
    Java
  • Dollyn: 我十分怀疑最后一条,很多编译器都会自动做类似优化吧(不知道JD ...
    Java

Java那么点事

    博客分类:
  • JAVA
阅读更多
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面试题

    Java程序员+上班那点事儿.doc

    Java程序员+上班那点事儿.doc Java程序员+上班那点事儿.doc Java程序员+上班那点事儿.doc Java程序员+上班那点事儿.doc

    java点对点语音实时聊天

    本项目是用Java语言实现的点对点语音实时聊天系统,它允许用户之间进行即时的音频交流。下面将详细探讨该系统可能涉及的关键技术点、设计模式以及实现原理。 1. **Java语音处理库**:实现语音聊天的核心是处理音频...

    Java程序员上班那点事

    Java程序员上班那点事 Java程序员上班那点事 Java程序员上班那点事 Java程序员上班那点事

    2018 java 面试知识点

    最近的java 面试知识点, 比较全的java基础知识面试知识,linux

    Java程序员上班那点事儿txt版本

    Java程序员上班那点事儿不全希望你喜欢谢谢了

    基于java的开发源码-smpp协议的点对点短信发送源码包.zip

    基于java的开发源码-smpp协议的点对点短信发送源码包.zip 基于java的开发源码-smpp协议的点对点短信发送源码包.zip 基于java的开发源码-smpp协议的点对点短信发送源码包.zip 基于java的开发源码-smpp协议的点对点...

    JAVA程序员上班那点事(钟声著)

    《JAVA程序员上班那点事》是由钟声撰写的一本面向Java程序员的专业书籍,它深入浅出地探讨了Java程序员在日常工作中可能遇到的各种问题、挑战以及解决方案。这本书以实际工作场景为背景,提供了丰富的经验和技巧,...

    JAVA核心知识点整理.zip

    java核心知识点整理,面试很有用 Java核心知识点2.JVM JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它...

    java知识点积累

    java知识点积累

    计算两点之间距离java

    java利用两点经纬度计算两点之间的距离java利用两点经纬度计算两点之间的距离java利用两点经纬度计算两点之间的距离java利用两点经纬度计算两点之间的距离java利用两点经纬度计算两点之间的距离

    Java程序员,上班那点事儿.pdf

    Java程序员,上班那点事儿.pdf 全本 24.5M

    Objects Java点串构面

    Objects Java:示范如何由点串构造面对象并添加到数据集中,在地图中显示 关键类型/成员: Datasources.create方法 Datasets.create方法 DatasetVector.getRecordset方法 Point2Ds.add方法 GeoRegion.addPart...

    Java程序员 上班那点事儿

    Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班那点事儿Java程序员 上班...

    24点游戏,java.zip

    24点游戏,java24点游戏,java24点游戏,java24点游戏,java 24点游戏,java24点游戏,java24点游戏,java24点游戏,java 24点游戏,java24点游戏,java24点游戏,java24点游戏,java 24点游戏,java24点游戏,java...

    Java程序员+上班那点事儿.pdf

    Java程序员+上班那点事儿.pdf 很好的文章 菜鸟 大虾都有帮助!

    java 编程实现鼠标单击获取屏幕上的任一点位置的颜色

    java 编程实现鼠标单击获取屏幕上的任一点位置的颜色 java 编程实现鼠标单击获取屏幕上的任一点位置的颜色 java 编程实现鼠标单击获取屏幕上的任一点位置的颜色 java 编程实现鼠标单击获取屏幕上的任一点位置的颜色 ...

    Java基础知识点和答案

    Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案Java基础知识点和答案...

Global site tag (gtag.js) - Google Analytics