代码块(或初始化块)的作用,代码块不能使用其他修饰符修饰除了static。根据是否有static修饰,代码块又分为静态代码块(使用static修饰)和非静态代码块(不使用static修饰)。
静态代码块:
1.内部可以有输出语句
2.随着类的加载而执行,而且只执行一次
3.作用:初始化类的信息
4.如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
5.静态代码块的执行要优先于非静态代码块的执行
6.静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构
非静态代码块:
1.内部可以有输出语句
2.随着对象的创建而执行
3.每创建一个对象,就执行一次非静态代码块
4.作用:可以在创建对象时,对对象的属性等进行初始化
5.如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
6.非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法
package com.qwy;
public class Users {
private String name;
private static String address="北京";
//定义静态代码块
static{
address="南京";
}
//定义非静态代码块
{
name="张三";
}
public void getInfo(){
System.out.println("name: "+name+", address:"+address);
}
}
class Test{
public static void main(String[] args) {
Users users= new Users();
users.getInfo();
}
}
这里只是简单的做了下例子,没有演示所有情况,大家可以自行验证。
注意:
对属性可以赋值的位置:
1.默认初始化
2.显式初始化/在代码块中赋值
3.构造器中初始化
4.有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值