黑马程序员-Java构造函数和代码块的优先级

本文详细介绍了Java与Android开发中三种类型的代码块:普通代码块、构造代码块与静态代码块的功能、执行方式、执行时间和执行次数,并通过演示代码验证了它们之间的优先级关系。
------- android培训java培训、期待与您交流! ----------

普通代码块
定义:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”。
执行方式:被调用时执行
执行时间:只有在被调用时才会执行。
执行次数:调用几次就执行几次

构造代码块
定义:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。
作用:给该类所有对象进行初始化。
执行方式:自动执行
执行时间:创建对象时执行,而且优先于构造函数执行。
执行次数:同一个对象只执行一次。

构造函数

作用:给对象进行初始化,调用对应的构造函数。
执行方式:自动执行
执行时间:创建对象时执行。
执行次数:同一个对象只执行一次。

静态代码块
定义:在类中使用static关键字声明的代码块。
作用:对类进行初始化。
执行方式:自动执行
执行时间:在类被加载的时候执行。
执行次数:最多执行二次(一次:创建对象的时候;另一次:第一次访问类中的静态成员和运行该类中主函数的时候)
注意:
1.由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
2.在类被使用时就会被加载到内存,而不是第一次创建类的实例(对象)时被加载。
3.类什么时候被加载/类加载时机:
(1)创建对象的时候,会加载该类及该类的所有父类;
(2) 第一次访问类中的静态成员和运行主函数的时候;
(3)class.forName("类名");
4.静态代码块不能存在于任何方法体内。
5.静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。

构造函数和代码块的优先级
静态代码块 > main函数代码块 > 构造代码块 > 构造函数 


演示代码:
/**
需求:
1.验证构造函数和代码块的优先级及执行次数。
2.验证优先级:静态代码块 > main函数代码块。
3.验证类被使用时就会被加载到内存,而不一定是第一次创建类的实例(对象)时被加载。
*/
//Person类
class Person{
	public String name;
	public int age;
	
	//构造代码块的执行次数
	private static int num1 = 0;
	//构造函数的执行次数 
	private static int num2 = 0; 
	//静态代码块的执行次数
	private static int num3 = 0; 
	
	//构造代码块
	{
		System.out.println("Person类的构造代码块,第" + (++num1) +"次执行");
	}
	
	//构造函数
	Person(String name, int age){
		System.out.println("Person类的构造函数,第" + (++num2) +"次执行");
	}
	
	//静态代码块
	static{
		System.out.println("Person类的静态代码块,第" + (++num3) +"次执行");
	}
	
	//普通代码块
	public static void speak(){
		System.out.println("Person类的普通代码块");
	}
}

//测试类
class Demo{
	//静态代码块的执行次数
	private static int num = 0; 
	//静态代码块
	static{
		System.out.println("测试类Demo的静态代码块,第" + (++num) +"次执行");
	}
	
	public static void main(String[] args){
		System.out.println("进入main");
		
		//验证类被使用时就会被加载到内存,而不一定是第一次创建类的实例(对象)时被加载。
		System.out.println("调用Person类的静态方法");
		Person.speak();
		
		System.out.println("创建第一个对象");
		Person p = new Person("张三", 20);
		System.out.println("创建第二个对象");
		Person p1 = new Person("李四", 21);
	}
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值