`
Scliu123
  • 浏览: 39969 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

JDK_实例(类的加载顺序)

阅读更多

父类

package book.oo.initorder;

public class Parent {
	private int ix = 50;

	private static int iz = getNext(30);
	{
		System.out.println("Parent的初始化块");
		int x = 100;
		int y = getNext(100);
	}
	static {
		System.out.println("Parent的静态初始化块");
		int sx = 100;
		int sy = getNext(100);
	}
	public Parent() {
		System.out.println("Parent的构造方法被调用");
	}
	public void display() {
		System.out.println("Parent的display方法被调用");
		System.out.print("ix=" + this.ix);
		System.out.println("; iz=" + iz);
		dispA();
	}
	public static void dispA() {
		System.out.println("Parent的dispA()被调用");
	}
	public static int getNext(int base) {
		System.out.println("Parent的getNext(int base)被调用");
		return ++base;
	}
	/**
	 * 当Java在进行垃圾回收时,会调用对象的finalize方法
	 */
	protected void finalize() {
		System.out.println("Parent的销毁方法被调用");
	}
}

 

 

子类

package book.oo.initorder;

public class Child extends Parent {
	{
		System.out.println("Child的初始化块");
		int bx = 100;
	}
	static {
		System.out.println("Child的静态初始化块");
	}
	public Child() {
		super();
		System.out.println("Child的构造方法被调用");
	}
	public static void dispB(){
		System.out.println("Child的dispB()被调用");
	}
	/**
	 * 当Java在进行垃圾回收时,会调用对象的finalize方法
	 */
	protected void finalize() {
		System.out.println("Child的销毁方法被调用");
		super.finalize();
	}
}

 

 

测试类

package book.oo.initorder;

public class ClassInitOrderTest {

	public static void main(String[] args) {
		System.out.println("不new对象,访问静态方法时的输出:");
		Child.dispB();
		System.out.println();
		System.out.println("new对象,访问非静态方法时的输出:");
		new Child().display();
		//通知虚拟机进行垃圾回收
		System.gc();
	}

//保留main方法的前2行程序,将后面的注释,得到的输出结果是如下:
//	不new对象,访问静态方法时的输出:
//	Parent的静态初始化块
//	Parent的getNext(int base)被调用
//	Parent的getNext(int base)被调用
//	Child的静态初始化块
//	Child的dispB()被调用
	
//将main方法的前3行程序注释,保留后面的程序,得到的输出结果如下:
//	new对象,访问非静态方法时的输出:
//	Parent的静态初始化块
//	Parent的getNext(int base)被调用
//	Parent的getNext(int base)被调用
//	Child的静态初始化块
//	Parent的初始化块
//	Parent的getNext(int base)被调用
//	Parent的构造方法被调用
//	Child的初始化块
//	Child的构造方法被调用
//	Parent的display方法被调用
//	ix=50; iz=31
//	Parent的dispA()被调用
//	Child的销毁方法被调用
//	Parent的销毁方法被调用
	
//	总结:
//	1、虚拟机在首次加载Java类时,会对静态初始化块、静态成员变量、静态方法进行一次初始化
//	2、只有在调用new方法时才会创建类的实例
//	3、类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始化块部分,然后是父类的构造方法;再执行
//	   本类继承的子类的初始化块,最后是子类的构造方法
//	4、类实例销毁时候,首先销毁子类部分,再销毁父类部分

}

 

分享到:
评论

相关推荐

    Java JDK实例宝典

    5 类的加载顺序 2. 6 方法和变量在继承时的覆盖与隐藏 2. 7 排序类 2. 8 Singleton单例模式 2. 9 Factory工厂模式 2. 10 Adapter适配器模式 第3章 数字 3. 1 数字与数字封装类 3. ...

    java范例开发大全

    实例167 继承关系的加载顺序 266 实例168 如何访问同名的方法或变量 268 实例169 super()方法的使用 271 实例170 this方法的使用 274 实例171 一张考试成绩单 275 实例172 银行自动存取一体机 278 9.4 多态 284 实例...

    Java范例开发大全 (源程序)

     实例167 继承关系的加载顺序 266  实例168 如何访问同名的方法或变量 268  实例169 super()方法的使用 271  实例170 this方法的使用 274  实例171 一张考试成绩单 275  实例172 银行自动存取一体机 278 ...

    java范例开发大全(pdf&源码)

    实例167 继承关系的加载顺序 266 实例168 如何访问同名的方法或变量 268 实例169 super()方法的使用 271 实例170 this方法的使用 274 实例171 一张考试成绩单 275 实例172 银行自动存取一体机 278 9.4 多态 284 实例...

    java范例开发大全源代码

     实例167 继承关系的加载顺序 266  实例168 如何访问同名的方法或变量 268  实例169 super()方法的使用 271  实例170 this方法的使用 274  实例171 一张考试成绩单 275  实例172 银行自动存取一体机...

    Java范例开发大全(全书源程序)

    实例167 继承关系的加载顺序 266 实例168 如何访问同名的方法或变量 268 实例169 super()方法的使用 271 实例170 this方法的使用 274 实例171 一张考试成绩单 275 实例172 银行自动存取一体机 278 9.4 多态 ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例055 反转数组中元素的顺序 68 3.4 常用集合的使用 69 实例056 用动态数组保存学生姓名 69 实例057 用List集合传递学生信息 70 实例058 用TreeSet生成不重复自动排序 随机数组 71 实例059 Map映射集合实现省市级...

    java编程经验

    这样会清晰的打印出被加载的类文件,大部分是jdk自身运行需要的,最后几行会明显的看到自己用到的那几个类文件被加载进来的顺序。即使你声明了一个类对象,不实例化也不会加载,说明只有真正用到那个类的实例即对象...

    Java 基础核心总结 +经典算法大全.rar

    类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 ...

    javaSE代码实例

    10.6 Java程序的加载过程 190 10.7 小结 192 第三篇 高级基础篇 第11章 异常处理——Java世界的医生 195 11.1 异常处理的基本知识 195 11.1.1 try和catch捕获异常 195 11.1.2 异常的传播过程 198 ...

    Java编程经验

    这样会清晰的打印出被加载的类文件,大部分是jdk自身运行需要的,最后几行会明显的看到自己用到的那几个类文件被加载进来的顺序。即使你声明了一个类对象,不实例化也不会加载,说明只有真正用到那个类的实例即对象...

    疯狂JAVA讲义

    学生提问:为什么静态内部类实例方法也不能访问外部类的实例属性呢? 207 学生提问:接口里是否能定义内部接口? 208 6.7.3 使用内部类 208 学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在...

    Java语言程序设计的课程设计项目——利用Java实现地球系动画完整实现实例(第2部分).pdf

    杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究, 1/13 页 1 1.1 利用 Java 实现地球系动画完整实现实例(第 2 部分) 1.1.1 利用 MyEclipse 等工具开发 Java 程序 ——...

    Java开发技术大全 电子版

    9.2用Class类来加载对象289 9.3使用getClass()方法获取类信息290 9.4使用类标记292 9.5使用关键字instanceof判断所属类292 9.6利用反射获取运行时类信息293 9.6.1使用isInstance()方法判断所属类294 9.6.2获取...

    新版Android开发教程.rar

    o JDK 5 or JDK 6 (JRE alone is not sufficient) o Android Development Tools plugin (optional) o Not Not Not Not compatible with Gnu Compiler for Java (gcj) Other development environments or IDEs o JDK ...

    Spring.3.x企业应用开发实战(完整版).part2

    7.6.3 增强织入的顺序 7.6.4 访问连接点信息 7.6.5 绑定连接点方法入参 7.6.6 绑定代理对象 7.6.7 绑定类注解对象 7.6.8 绑定返回值 7.6.9 绑定抛出的异常 7.7 基于Schema配置切面 7.7.1 一个简单切面的配置 7.7.2 ...

    Spring3.x企业应用开发实战(完整版) part1

    7.6.3 增强织入的顺序 7.6.4 访问连接点信息 7.6.5 绑定连接点方法入参 7.6.6 绑定代理对象 7.6.7 绑定类注解对象 7.6.8 绑定返回值 7.6.9 绑定抛出的异常 7.7 基于Schema配置切面 7.7.1 一个简单切面的配置 7.7.2 ...

Global site tag (gtag.js) - Google Analytics