代码块

/**
* 类的成员之四:代码块(或初始化块)
* 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 }

 

 
posted @ 2021-09-11 22:52  橘猫的夏天  阅读(63)  评论(0编辑  收藏  举报