类的成员之四:代码块
1.代码块的作用:初始化当前类,或者对象;
2.代码块如果有修饰的话,只能用static;
3.分类:静态代码块 vs 非静态代码块;
4.静态代码块
可以有输出语句;
随着类的加载而执行;且执行一次;
可以初始化类的信息
如果定义了多个静态代码块,则按照声明的先后顺序执行,静态代码块的执行优先非静态代码块的执行;
只能调用静态结构 不能调用 非静态结构
5.非静态代码块
可以有输出语句;
随着对象的创建而执行;
每创建一个对象,就执行一次非静态代码块;
作用:可以在创建对象时,对对象的属性等进行初始化;
如果定义了多个非静态代码块,则按照声明的先后顺序执行
可以调用静态结构 和 非静态结构
对象属性可以赋值的位置:
a.默认初始化
b.显示初始化;
c.构造器初始化;
d.对象.属性
e.代码块赋值
执行顺序:a b e c d e
由父及子,静态先执行;在下面例子中,有一个静态代码块和非静态代码块;这里默认就是先执行静态代码块;并且静态代码块只执行一次;
若Person6有父类,并且他的父类有代码块,那么,先执行父类的代码块,再执行Person6的代码块;确切的说是:先执行父类的静态代码块,再执行子类的静态代码块,先执行父类的非静态代码块
再执行子类的非静态代码块;
查看代码:
1 public class Day14CodeBlock20 { 2 public static void main(String[] args) { 3 String desc = Person6.desc; 4 Person6 person1 = new Person6(); 5 Person6 person2 = new Person6(); 6 } 7 } 8 class Person6{ 9 private String name; 10 private int age; 11 static String desc ="我是一个人"; 12 public String getName() { 13 return name; 14 } 15 public void setName(String name) { 16 this.name = name; 17 } 18 public int getAge() { 19 return age; 20 } 21 public void setAge(int age) { 22 this.age = age; 23 } 24 25 //static代码块 26 static{ 27 System.out.println("静态代码块"); 28 } 29 //代码块 30 { 31 System.out.println("非静态代码块"); 32 } 33 34 35 36 public void eat() { 37 System.out.println("人吃饭。。。。"); 38 study(); 39 } 40 41 public void study() { 42 System.out.println("学习。。。"); 43 } 44 public Person6(String name, int age) { 45 //super(); 46 this(age); 47 this.name = name; 48 //this.age = age; //等同于 this("Tome"); 49 } 50 public Person6() { 51 super(); 52 } 53 public Person6(String name) { 54 this();//调用当前的空参构造器 55 //super(); 56 this.name = name; 57 58 } 59 public Person6(int age) { 60 //super(); 61 this.age = age; 62 } 63 public static void info() { 64 System.out.println("我是一个快乐的人!"); 65 } 66 67 }