类初始化和实例初始化

时间:2021-03-09 13:44:24   收藏:0   阅读:0
public class Father{
	private int i = test();
	private static int j = method();
	static{
		System.out.print("(1)");
	}
	Father(){
		System.out.print("(2)");
	}
	{
		System.out.print("(3)");
	}
	public int test(){
		System.out.print("(4)");
		return 1;
	}
	public static int method(){
		System.out.print("(5)");
		return 1;
	}
}


public class Son extends Father{
  //非静态实例变量显式赋值代码
	private int i = test();
  //类变量显式赋值代码
	private static int j = method();
  //静态代码块
	static{
		System.out.print("(6)");
	}
	Son(){
//	super();//写或不写都在,在子类构造器中一定会调用父类的构造器
		System.out.print("(7)");
	}
  //非静态代码块代码
	{
		System.out.print("(8)");
	}
	public int test(){
		System.out.print("(9)");
		return 1;
	}
	public static int method(){
		System.out.print("(10)");
		return 1;
	}

  
	public static void main(String[] args) {
    //创建对象s1
		Son s1 = new Son();
		System.out.println();
    //创建对象s2
		Son s2 = new Son();
	}
}
(5)(1)(10)(6)(9)(3)(2)(9)(8)(7)
(9)(3)(2)(9)(8)(7)

创建过程解读:

方法的重写:final方法、静态方法、private等子类中不可见方法不可以被重写。
对象的多态性:子类如果重写了父类的方法,通过子类对象调用的一定是子类重写过的代码;非静态方法默认的调用对象是this,this对象在构造器或者说方法中就是正在创建的对象。

复习创建对象的步骤

详情见:创建对象发生的那些事儿

  1. 判断对象对应的类是否加载、链接、初始化(执行clinit方法)
  2. 为对象分配内存(指针碰撞、空闲列表)
  3. 处理并发问题
  4. 初始化分配到的内存
  5. 设置对象的对象头
  6. 执行init方法进行初始化

视频来源

原创不易,欢迎转载,转载时请注明出处,谢谢!
作者:潇~萧下
原文链接:https://www.cnblogs.com/manongxiao/p/14503143.html

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!