类的成员之四:代码块的使用

代码块,又称初始化块,用一对大括号表示{ 方法体 }。

 1、代码块的作用:用来初始化类或对象

 2、代码块如果有修饰的话,只能使用static。

 3、分类:分为静态代码块和非静态代码块。

 4、静态代码块

  --内部可以有输出语句

  --随着类的加载而自动执行,只会执行一次。

  --作用:初始化类的信息

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

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

  --静态代码块内只能调用静态方法或属性,不能调用非静态结构 

 5、非静态代码块

  --内部可以有输出语句

  --随着对象的创建而自动执行,每创建一个对象就会执行一次。

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

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

  --非静态代码块内部可以调用静态结构和非静态结构

 

  补充:

 对属性可以赋值的位置

  1、默认初始化

  2、显式初始化

  3、构造器中初始化

  4、有了对象之后,可以通过对象.属性或者对象.方法的方式,进行赋值

  5、在代码块中赋值

先后顺序为:1-2/5-3-4

 

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

由父及子,静态先行。

 

//代码块的示例代码

public class BlockTest {
    public static void main(String[] args) {
        String desc = Humen.desc;
        Humen p1 = new Humen();
        Humen p2 = new Humen();
        System.out.println(p1.age+" "+p2.age);
        Humen.info();
        System.out.println(desc);
        
    }
}

class Humen{
    //属性
    String name;
    int age;
    static String desc="我是一个人";
    
//    构造器
    public Humen() {
        super();
    }

    public Humen(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    //静态代码块
    static{
        System.out.println("hello,static block-1");
        //调用静态属性
        desc = "static block change me";
    }
    static{
        System.out.println("hello,static block-2");
        //调用静态方法
        info();
//        age=1;不可以调用非静态结构
    }
    //非静态代码块
    {
        System.out.println("hello,block");
        //调非静态结构
        age=1;
        //调静态结构
        info();
    }
    //方法
    public void eat() {
        System.out.println("eating");
    }

    @Override
    public String toString() {
        return "Humen [name=" + name + ", age=" + age + "]";
    }
    public static void info() {
        System.out.println("i am happy human");
    }
}

 

posted @ 2022-01-11 18:20  泥鱼生长  阅读(84)  评论(0编辑  收藏  举报