/** * 类的成员之四:代码块(或初始化块) * 1.代码块的作用:用来初始化类、对象 * 2.代码块如果有修饰的话,只能用static。 * 3.分类:静态代码块 vs 非静态代码块 * * 4.静态代码块 * >内部可以有输出语句 * >随着类的加载而执行,而且只执行一次 * >作用:初始化类的信息 * >如果声明了多个静态代码块,则按声明的先后顺序执行。 * >静态代码块比非静态代码块先执行。 * >静态代码块内只能调用静态属性或方法。 * * 5.非静态代码块 * >内部可以有输出语句 * >随着对象的创建而执行,而且每创建一个对象就执行一次非静态代码块。 * >作用:可以在创建对象时,对对象的属性等进行初始化 * >如果声明了多个静态代码块,则按声明的先后顺序执行。 * >非静态代码块内可以调用静态属性或方法或非静态属性、非静态方法。 * * */
1 package com.fu.block; 2 3 4 public class BlockTest { 5 public static void main(String[] args) { 6 String desc = Person.desc; 7 Person p1 = new Person(); 8 Person p2 = new Person(); 9 } 10 } 11 12 class Person{ 13 //属性 14 String name; 15 int age; 16 static String desc = "我是一个人"; 17 18 //构造器 19 public Person(){ 20 21 } 22 public Person(String name,int age){ 23 this.name = name; 24 this.age = age; 25 } 26 27 //static代码块 28 static{ 29 System.out.println("hello"); 30 } 31 //非static代码块 32 { 33 System.out.println("hi"); 34 } 35 36 //方法 37 public void eat(){ 38 System.out.println("吃饭"); 39 } 40 41 @Override 42 public String toString() { 43 return "Person{" + 44 "name='" + name + '\'' + 45 ", age=" + age + 46 '}'; 47 } 48 public static void info(){ 49 System.out.println("我是一个快乐的人"); 50 } 51 }
对属性可以赋值的位置:
1 package com.fu.block; 2 3 /** 4 * 对属性可以赋值的位置: 5 * ① 默认初始化 6 * ② 显示初始化 7 * ③ 构造器中初始化 8 * ④ 有了对象以后,可以通过 “对象.属性” 或 “对象.方法” 的方式,进行赋值 9 * ⑤ 在代码块中赋值 10 * 11 * 执行的先后顺序:① - ② / ⑤ - ③ - ④ 12 * ② 和 ⑤ 谁在前面就先执行谁 13 */ 14 public class OrderTest { 15 public static void main(String[] args) { 16 Order order = new Order(); 17 System.out.println(order.orderId); 18 } 19 } 20 21 class Order{ 22 int orderId = 3; 23 { 24 orderId = 4; 25 } 26 }