java-类的成员之四:代码块(或初始化块)

1. 代码块的作用:用来初始化类,对象

2. 如果有修饰的话,只能用static.

3. 分类:静态代码块 VS 非静态代码块

4. 静态代码块

  • 内部可以有输出语句(那里面的输出语句怎么执行?之前都是类.或者对象.来调用)

  • 随着类的加载而执行,而且只执行一次

  • 作用:初始化类的信息

  • 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行

  • 静态代码块的执行要优先于非静态代码块的执行

  • 静态代码块内只能调用静态的属性,静态的方法.不能调用非静态的结构

5.非静态代码块

  • 内部可以有输出语句

  • 随着对象的创建而执行

  • 每创建一个对象,就执行一次非静态代码块

  • 作用:可以在创建对象时,对对象的属性等进行初始化

  • 如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行

  • 非静态代码块内可以调用静态的属性,静态的方法或非静态的属性,非静态的方法

堆属性可以赋值的位置:
①默认初始化
②现实初始化
③构造器中初始化
④有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值
⑤在代码块中赋值

class Person{
     
	//属性
	String name;
	int age;
	static String desc = "我是一个人";
	
	//构造器
	public Person(){
     
		
	}
	
	public Person(String name,int age){
     
		this.name = name;
		this.age = age;
	}
	
	//staitic的代码块--只能调用静态结构
	static{
     
		System.out.println("Hello,static block-1");
		desc = "我是desc的人";
	}
	static{
     
		System.out.println("Hello,static block-2");
	}
	//非staitic的代码块--静态结构和非静态结构都可以调用
	{
     
		System.out.println("hello, block - 1");
		age = 1;
	}
	{
     
		System.out.println("hello, block - 2");
	}
	//方法
	public void eat(){
     
		System.out.println("吃饭");
	}

	@Override
	public String toString() {
     
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
	public static void info(){
     
		System.out.println("我是一个info人!");
	}
}

5.代码块的先后执行顺序

  • 先执行父类,再执行子类,静态的先执行(只执行一次)

class Father {
     
	static {
     
		System.out.println("11111111111");
	}
	{
     
		System.out.println("22222222222");
	}

	public Father() {
     
		System.out.println("33333333333");

	}

}

public class Son extends Father {
     
	static {
     
		System.out.println("44444444444");
	}
	{
     
		System.out.println("55555555555");
	}
	public Son() {
     
		System.out.println("66666666666");
	}


	public static void main(String[] args) {
      // 由父及子 静态先行
		System.out.println("77777777777");
		System.out.println("************************");
		new Son();
		System.out.println("************************");

		new Son();
		System.out.println("************************");
		new Father();
	}

}

你可能感兴趣的:(java,类)