• 类的成员之四:代码块(或初始化块)
      1. 代码块的作用:用来初始化类、对象
      2. 如果有修饰的话。只能用static修饰
      *3. 分类:静态代码块 VS 非静态代码块

    • 4.静态代码块

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



    • 5.非静态代码块:

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


    • 对属性可以赋值的位置:
    • 1.默认初始化;
    • 2.显式初始化
    • 3.构造器中初始化
    • 4.有了对象以后可以通过“对象.属性”或“对象.方法”的方式,进行赋值
    • 5.在代码块中赋值

      1. public class BlockTest {
      2. public static void main(String[] args) {
      3. String desc = Person.desc;
      4. System.out.println(desc);
      5. Person p1 = new Person();
      6. Person p2 = new Person();
      7. System.out.println(p1.age);
      8. Person.info();
      9. }
      10. }
      11. class Person{
      12. //属性
      13. String name;
      14. int age;
      15. static String desc = "我是一个人";
      16. //构造器
      17. Person(){
      18. }
      19. Person(String name,int age){
      20. this.name = name;
      21. this.age = age;
      22. }
      23. //方法
      24. public void eat(){
      25. System.out.println("吃饭");
      26. }
      27. public static void info(){
      28. System.out.println("我是一个快乐的人!");
      29. }
      30. //static代码块
      31. static {
      32. System.out.println("我是static代码块");
      33. desc = "我是一个爱学习的人";
      34. }
      35. //非static代码块
      36. {
      37. this.age = 1;
      38. System.out.println("我是非static代码块");
      39. }
      40. @Override
      41. public String toString() {
      42. return "Person{" +
      43. "name='" + name + '\'' +
      44. ", age=" + age +
      45. '}';
      46. }
      47. }