Java学习之静态代码块,构造代码块,构造方法

  • 什么是构造方法?
    * 给对象的数据(属性)进行初始化

  • 构造方法格式特点?
    * 方法名与类名相同(大小也要与类名一致)
    * 没有返回值类型,连void都没有

  • 什么是构造代码块? (初始化块)
    * 在类中方法外出现;
    * 作用是:多个构造方法中相同的代码存放到一起;
    * 每次调用构造都执行,并且在构造方法前执行

  • 什么是静态代码块?
    * 在类中方法外出现,并加上static修饰;
    * 用于给类进行初始化(加载驱动);
    * 静态代码块优先于主方法执行,类一加载就执行,并且只执行一次

案例:下面的代码输出结果是?

public class Demo {
	
	public static void main(String[] args) {
		Zi z = new Zi();  
	}
	
}

class Fu {
	static {
		System.out.println("静态代码块Fu");
	}

	{
		System.out.println("构造代码块Fu");
	}

	public Fu() {
		System.out.println("构造方法Fu");
	}
}

class Zi extends Fu {
	static {
		System.out.println("静态代码块Zi");
	}

	{
		System.out.println("构造代码块Zi");
	}

	public Zi() {
		System.out.println("构造方法Zi");
	}
}

输出结果:
在这里插入图片描述
原因:

/*
 * 1. jvm调用了Main方法,main进栈
 * 2. 遇到Zi z = new Zi();会先将Fu.class和Zi.class分别加载进内存,再创建对象(首先加载的是父类(没有父哪来的子))
 * 3. 当Fu.class加载进内存的时候,父类的静态代码块会随着Fu.class一起加载
 * 4. 当Zi.class加载进内存的时候,子类的静态代码块会随着Zi.class一起加载
 * 5. 然后走子类的构造方法,因为子类的构造方法中默认super(),所以先走的是父类的构造方法,但是在执行父类构造时,发现父类有构造代码块,构造代码块是优先于构造方法执行的
 * 6. 执行完父类,执行子类,顺序如第五步。
 */

猜你喜欢

转载自blog.csdn.net/it_is_me_a/article/details/87527548
今日推荐