类初始化与实例化过程

定义接口Person

package com.test;

public interface person {
	int test();
}
定义父类Father
package com.test;

public class Father implements person{
	private int i = test();
	private static int j = cool();
	
	static{
		System.out.println("Father静态代码块1");
	}
	
	Father(){
		System.out.println("Father无参构造方法...");
	}
	Father(String aa){
		System.out.println("Father带参构造方法...");
	}
	static{
		System.out.println("Father静态代码块2");
	}
	{
		System.out.println("Father普通代码块1");
	}
	private static int cool() {
		System.out.println("Father静态赋值方法cool()");
		return 0;
	}
	@Override
	public int test() {
		System.out.println("Father普通赋值方法test()");
		return 0;
	}
}
定义子类Son
package com.test;

public class Son extends Father {
	{
		System.out.println("Son普通代码块1");
	}
	private int i = test();
        static{
		System.out.println("Son静态代码块1");
	}
	private static int j = cool();
	{
		System.out.println("Son普通代码块2");
	}
	
	public Son(String aa) {
		System.out.println("Son带参构造方法");
	}
	public Son() {
		System.out.println("Son无参构造方法");
	}
	static {
		System.out.println("Son静态代码块2");
	}
	@Override
	public int test(){
		System.out.println("Son普通赋值 方法test()重写");
		return 1;
	}
	public static int cool() {
		System.out.println("Son静态赋值 方法cool()");
		return 1;
	}
	
	public static void main(String[] args) {
		Son s1 = new Son();
		System.out.println("===========================================");
		Son s2 = new Son("aa");
		System.out.println("===========================================");
		Father s3 = new Son("bb");
	}
}
执行子类main方法,结果
Father静态赋值方法cool()
Father静态代码块1
Father静态代码块2
Son静态代码块1
Son静态赋值 方法cool()
Son静态代码块2
Son普通赋值 方法test()重写
Father普通代码块1
Father无参构造方法...
Son普通代码块1
Son普通赋值 方法test()重写
Son普通代码块2
Son无参构造方法
===========================================
Son普通赋值 方法test()重写
Father普通代码块1
Father无参构造方法...
Son普通代码块1
Son普通赋值 方法test()重写
Son普通代码块2
Son带参构造方法
===========================================
Son普通赋值 方法test()重写
Father普通代码块1
Father无参构造方法...
Son普通代码块1
Son普通赋值 方法test()重写
Son普通代码块2
Son带参构造方法

类初始化过程

  • 类实例化的时候,首先要加载并初始化目标类,初始化过程在程序运行期间只在第一次构建对象时执行一次。

初始化过程加载的是该类所有的static 修饰的 变量、方法、代码块,其执行顺序按照在代码中出现及调用的先后顺序执行。

类实例化过程

  • 类实例化过程在每次构建对象时候都会执行。

实例化过程加载的是该类的所有非static修饰的 变量、代码块,以及它们在加载时候涉及到调用的其它方法,它们按照实例化时在代码中调用的先后顺序执行。

原文地址:https://www.cnblogs.com/jiujianxian/p/11158638.html