* 1.代码块用来初始化类或者对象
* 2.代码块如果有修饰的话,只能用static
* 3.分类:静态代码块vs非静态代码块
*
* 4.静态代码块
* >内部可以有输出语句
* >随着类的加载而执行,而且只执行一次
* >作用:初始化类的信息
* >如果一个类中定义了多个静态代码块,则按照申明顺序执行
* >静态代码块的执行要优先于非静态代码块
* >静态代码块只能调用静态的属性、静态的方法、不能调用非静态的结构
*
* 5.非静态代码块
* >内部可以有输出语句
* >随着对象的加载而执行
* >而且没创建一个对象就执行一个非静态代码块
* >作用:可以在创建对象时,对对象的属性等进行初始化
* >如果一个类中定义了多个非静态代码块,则按照申明顺序执行
* >非静态代码块能调用静态的属性、静态的方法、非静态的属性、非静态的方法
public class BlockTest {
public static void main(String[] args) {
String desc = Person.desc;
Person p1= new Person();
System.out.println(desc);
}
}
class Person {
// 属性
String name;
int age;
static String desc = "我是一个人";
// 构造器
public Person() {
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
// 代码块
{
System.out.println("hello,block-1");
}
static {
System.out.println("hello,static block");
}
static {
System.out.println("hello,static block-2");
desc="我是一个爱学习的人";
}
{
System.out.println("hello,block");
}
// 方法
public void eat() {
System.out.println("吃饭");
}
public String toString() {
return "Person[name" + name + ",age=" + age + "]";
}
}