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

    科技2025-06-24  10

    代码块的作用:用来初始化类、对象代码块如果有修饰的话只能使用static分类:静态代码块vs非静态代码块静态代码块

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

    非静态代码块

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

    对属性可以复制的位置

    ①默认初始化 ②显示初始化、⑤代码块中赋值 ③在构造器中赋值 ④有了对象以后,可以通过"对象.属性"或者"对象.方法"进行赋值 顺序 ①-②/⑤-③-④

    public class BlockTest{ public static void main(String[] args){ String desc =Person.desc; System.out.println(desc); Person p1=new Person(); System.out.println(p1.age); Person.info; } } class Person{ String name; int age; static String desc="我是一个人"; public Person(){ } public Person(String name,int age){ this.name=name; this.age=age; } //static的代码块 static{ System.out.println("hello,static block-1"); desc="我是一个爱学习的人"; // 调用静态方法 info(); // 调用非静态方法,错误 // eat(); } static{ System.out.println("hello,static block-2"); desc="我是一个爱学习的人"; } //非static的代码块 { System.out.println("hello, block-1"); age=1; // 调用静态方法 info(); // 调用非静态方法 eat(); } { System.out.println("hello, block-2"); } //方法 public void eat(){ System.out.println("吃饭"); } public String toString(){ return "Person[name="+name+",age="+age+"]"; } public static void info(){ System.out.println("我是一个快乐的人"); } }
    Processed: 0.012, SQL: 8