/**
* 类成员之 代码块(初始化块)
* 1.代码块的作用:用来初始化类或者对象
* 2.代码块如果有修饰的话只能使用static
* 3.分类:静态代码块和非静态代码块
* 4.静态代码块
* >内部可以有输出语句
* >随着类的加载而执行,(不管创建多少对象)只会执行一次
* >静态代码块内只能调用静态属性、方法。不能调用非静态的结构
* >作用:可以在创建对象时,对类的属性进行初始化
* >如果一个类中定义了多个静态代码块。则按照声明的先后顺序执行
* >静态代码块与非静态代码块的执行顺序是:优先执行静态代码块
* 5.非静态代码块
* >随着对象的创建而执行
* >内部可以有输出语句
* >随着对象的创建而执行
* >每创建一个对象,就执行一次非静态代码块
* >作用:可以在创建对象时,对对象的属性进行初始化
* >如果一个类中定义了多个非静态代码块。则按照声明的先后顺序执行
* >非静态代码块内可以调用静态属性、静态方法、非静态属性、非静态方法
*
* 6.在开发中使用? 有时候会用来对属性进行初始化
*
* 7.对属性可以赋值的位置
* 1).默认初始化
* 2).显示初始化
* 3).构造器中初始化
* 4).有了对象以后,通过“对象.属性”或者“对象.方法”的方式。进行赋值
* 5).在代码块中赋值
*/
public class BlockTest {
public static void main(String[] args) {
String desc = Person.desc;
System.out.println(desc);
Person person =new Person();
Person person2 =new Person();
System.out.println(person.age);
}
}
class Person{
//属性
String name;
int age;
static String desc="我是一个人";
//构造器
public Person(){
}
public Person(String name,int age){
this.name = name;
this.age =age;
}
//static代码块 随着类的加载而执行 只会执行一次 静态代码块中可以调用静态结构
static {
System.out.println("hello ,static block");
//可以调用静态方法、静态属性
inFo();
desc ="我是一个good man";
//无法调用非静态的结构,会报错,因为静态代码块是随着类的加载而执行的,此时内存没有该方法
//eat();
}
//非static代码块 随着对象的创建而执行 创建多个对象就执行多次
{
System.out.println("hello , block");
//可以调用非静态结构
age=1;
eat();
//可以调用静态结构
inFo();
}
//方法
public void eat(){
System.out.println("吃饭");
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
//静态方法随着类的加载而加载在内存中,执行需要(类.方法)调用
public static void inFo(){
System.out.println("我是一个快乐的人");
}
}