`
lcj325
  • 浏览: 25928 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java编程思想笔记-类的加载、继承与初始化

阅读更多

1. 类的加载

众所周知,每个类的的编译代码存在于每个独立的文件中,通常类的加载是发生在创建类的第一个对象的时候,但当访问static域或static方法时,也会发生类的加载。

 

2. 类的继承与初始化

package com.andy;

/**
 * @author Andy Leung<br>
 * @version 1.1 $ 2010-11-21
 */
class Parent {
	private int i = 9;
	protected int j;
	private static int x1 = printInit("static Parent.x1 initialized");

	Parent() {
		print("i = " + i + ", j = " + j);
		j = 39;
	}

	protected static int printInit(String s) {
		print(s);
		return 47;
	}

	/**
	 * @param string
	 */
	protected static void print(String string) {
		System.out.println(string);
	}
}

public class Child extends Parent {

	private int k = printInit("Child.k initialized");
	private static int x2 = printInit("static Child.x2 initialized");

	public Child() {
		print("k = " + k);
		print("j = " + j);
	}

	public static void main(String[] args) {
		print("Child constructor");
		Child b = new Child();
	}
}

 

运行结果:

 

static Parent.x1 initialized
static Child.x2 initialized
Child constructor
i = 9, j = 0
Child.k initialized
k = 47
j = 39
 

 

 

 总结一下: 

 

  • 程序怎么进行的 ?在Child 上运行java 时,所发生的第一件事就是试图访问Child .main()(一个static方法),于是加载器开始启动并找出Child 类的编译代码, 编译器注意到它有个基类(注意这是由extends引起的),于是加载基类,直到无基类。
  • 接下,从根基类开始初始化static,直到最下面的导出类。
  • why 从根基类到导出类,因为导出类的static初始化可能会以来与基类成员能否正确的初始化。 
    到这,必要的类加载完,可以开始创建对象了。
  • 开始初始化对象,首先对象中的所有基本类型都会被设为默认值,对象的引用设为null(通过将对象内存设为二进制零值而一举生成)。
  • 然后基类的构造器的调用

 

7
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics