一:静态代码块和非静态代码块
package com.xx.study1102;
public class BlockTest {
public static void main(String[] args) {
String desc = Person1.desc;
System.out.println(desc);
Person1 p1 = new Person1();
Person1 p2 = new Person1();
System.out.println(p1.age);
}
}
class Person1 {
// 属性
String name;
int age;
static String desc = "我是一个人";
// 构造器
public Person1() {
}
public Person1(String name, int age) {
this.name = name;
this.age = age;
}
// 静态代码块 随着类的加载而执行
static {
System.out.println("hello static block");
desc = "对属性重新赋值了";
}
// 可以有多个静态代码块,按照声明的先后顺序执行
// 静态代码块先于非静态代码块执行
static {
System.out.println("hello static block-2");
desc = "对属性重新赋值了";
// 只能调用静态结构
info();
}
// 非静态代码块 随着对象的创建执行
{
System.out.println("hello block");
age = 1;
// 调用静态结构
info();
// 调用非静态结构
eat();
}
// 方法
public void eat() {
System.out.println("吃饭");
}
@Override
public String toString() {
// 只输入非静态属性
return "Person1 [name=" + name + ", age=" + age + "]";
}
// 静态方法随着类的加载而加载,但是不会执行
public static void info() {
System.out.println("我是一个静态方法");
}
}
二:开发中使用代码块的使用场景
由父及子,静态先行
三:属性赋值的先后顺序
package com.xx.study1102;
public class OrderTest{
public static void main(String[] args) {
Order1 order=new Order1();
System.out.println(order.orderId);
}
}
class Order1{
static {
orderId=4;
}
static int orderId=3;
}