代码块
代码块的作用
初始化块:用来初始化类,对象. 代码块如果有修饰的话,只能使用static 分类:静态代码块 vs 非静态代码块
代码块的分类
静态代码块
内部可以有输出语句 随着类的加载而执行 只执行一次 作用:初始化类的信息 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行. 静态代码块的执行优先于非静态代码块的执行 静态代码块内只能调用静态的属性,静态的方法,不能调用非静态的结果 非静态代码块
内部可以有输出语句 随着对象的创建而执行 每创建一个对象,就执行一次非静态代码块. 作用:可以在创建对象时,对对象的属性等进行初始化 如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行. 非静态代码块内可以调用静态的属性,静态的方法,或非静态的属性,非静态的方法.
代码
package OOP. 代码块;
public class BlockTest {
public static void main ( String[ ] args) {
String desc = Person. desc;
System. out. println ( desc) ;
Person person1 = new Person ( ) ;
Person person2 = new Person ( ) ;
System. out. println ( person1. age) ;
Person. info ( ) ;
}
}
class Person {
String name;
int age;
static String desc = "我是一个人" ;
public Person ( ) {
}
public Person ( String name, int age) {
this . name = name;
this . age = age;
}
{
age = 1 ;
System. out. println ( "hello,非static代码块1" ) ;
info ( ) ;
desc= "我是一只猴子" ;
eat ( ) ;
}
{
System. out. println ( "hello,非static代码块2" ) ;
}
static {
desc = "我是一个爱学习的猴子" ;
System. out. println ( "hello,static块1" ) ;
info ( ) ;
}
static {
System. out. println ( "hello,static块2" ) ;
}
public void eat ( ) {
}
@Override
public String toString ( ) {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}' ;
}
public static void info ( ) {
System. out. println ( "我是一个happy的人!" ) ;
}
}
对属性可以赋值的位置
默认初始化 显示初始化 构造器中初始化 有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值 在代码块中赋值
属性赋值的先后顺序
默认初始化 显示初始化 / 在代码块中赋值 一般先显示初始化,再写代码块,先写哪个哪个先加载 构造器中初始化 有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值