咸鱼带你学Java—类的成员之四:代码块

目录

一、代码块的作用

二、代码块的分类

三、静态代码块

四、非静态代码块

五、静态代码块与非静态代码块举例

六、实例化子类对象时,涉及到父类、子类中静态代码块、非静态代码块、构造器的加载顺序


一、代码块的作用

代码块用来初始化类、对象的信息

二、代码块的分类

代码块只能使用static关键字修饰。因此代码块分为静态代码块非静态代码块

三、静态代码块

语法格式:

static {

//代码

}

说明:

  • 内部可以输出语句
  • 随着类的加载而执行,而且只执行一次
  • 作用:初始化类的信息
  • 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
  • 静态代码块的执行要优先于非静态代码块的执行
  • 静态代码块内只能调用静态的属性、静态的方法不能调用非静态的结构

四、非静态代码块

语法格式:

{

//代码

}

说明:

  • 内部可以输出语句
  • 随着对象的创建而执行
  • 创建一个对象,就执行一次非静态代码块
  • 作用:可以在创建对象时,对对象的属性等进行初始化
  • 如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
  • 非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法

五、静态代码块与非静态代码块举例

public class CodeBlockTest {
	
	public static void main(String[] args) {
		Person p1=new Person();
		System.out.println("total="+p1.total);
		System.out.println("name="+p1.name);
		System.out.println("gender="+p1.gender);
		System.out.println("*****************");
		Person p2=new Person();
		System.out.println("total="+p2.total);
		System.out.println("name="+p2.name);
		System.out.println("gender="+p2.gender);
	}

}
class Person { 
	public static int total;
	public String name;
	public String gender;
	public Person() {
		
		
	}
	
	static { 
		total = 100;//为total赋初值 
		System.out.println("静态代码块初始化类属性total");
		
	} 
	{
		total=200;
		name="Tom";
		gender="男";
		System.out.println("非静态代码块初始化类属性total、属性name、属性gender");
	}
	

}

六、实例化子类对象时,涉及到父类、子类中静态代码块、非静态代码块、构造器的加载顺序

由父及子,静态先行。

public class CodeBlockTest {
	
	public static void main(String[] args) {
		
		Student s=new Student("张三","男",1001);
		System.out.println("total="+Student.total);
		System.out.println("name="+s.name);
		System.out.println("gender="+s.gender);
		System.out.println("id="+s.id);

	}

}
class Person { 
	public static int total;
	public String name;
	public String gender;
	public Person(String name,String gender) {
		System.out.println("Person类构造器初始化类属性total、属性name、属性gender");
		total=300;
		this.name=name;
		this.gender=gender;

		
	}
	
	static { 
		System.out.println("Person类静态代码块初始化类属性total");
		total = 100;//为total赋初值 
		
		
	} 
	{
		System.out.println("Person类非静态代码块初始化类属性total、属性name、属性gender");
		total=200;
		name="Tom";
		gender="男";
		
	}
	

}
class Student extends Person{
	
    public int id;
	public Student(String name, String gender) {
		
		super(name, gender);
		// TODO Auto-generated constructor stub
		
	}
	
	
	public Student(String name, String gender, int id) {
		super(name, gender);
		this.id = id;
		System.out.println("Student类构造器初始化类属性total、属性name、属性gender、属性id");
	}


	{
		System.out.println("Student类非静态代码块初始化类属性total、属性name、属性gender");
		total=500;
		name="June";
		gender="女";
		
	}
	static { 
		System.out.println("Student类静态代码块初始化类属性total");
		total = 400;//为total赋初值 
		
		
	} 
	
}

上一篇:咸鱼带你学Java—理解main方法的语法

下一篇:咸鱼带你学Java—final关键字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值