1、代码块的作用:用来初始化类、对象。
2、代码块如果有修饰的话,只能使用static。
3、分类:静态代码块 和 非静态代码块。
4.、静态代码块:
内部可以有输出语句。
随着类的加载而执行,而且只执行一次。
作用:初始化类的信息。
如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行。
静态代码块的执行要优先于非静态代码块的执行。
静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构。
5. 非静态代码块:
内部可以有输出语句。
随着对象的创建而执行。
每创建一个对象,就执行一次非静态代码块。
作用:可以在创建对象时,对对象的属性等进行初始化。
如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行。
非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法。
例子:
package com.hao.zhi.lv.blockTest;
public class BlockTest {
public static void main(String args[]){
String desc=Person.desc;
System.out.println(desc);
Person p1=new Person();
Person p2=new Person();
System.out.println(p1.age);
Person.happy();
}
}
class Person {
String name;
Integer age;
static String desc="我是一个人";
public Person(){
System.out.println("Person类的构造器");
}
public Person(String name, Integer age){
this();
this.name=name;
this.age=age;
}
static {
System.out.println("Person类的静态代码块1");
}
static {
System.out.println("Person类的静态代码块2");
//调用静态属性
desc="我是一个快乐的人";
//调用静态方法
happy();
}
{
System.out.println("Person类的非静态代码块1");
}
{
System.out.println("Person类的非静态代码块2");
//调用静态属性
desc="我是一个努力的人";
//调用静态方法
happy();
//调用非静态属性
name="架构师";
age=21;
//调用非静态方法
eat();
}
public void eat(){
System.out.println("人要吃饭");
}
public static void happy(){
System.out.println("我是一个快乐的人");
}
}
输出:
参考来自尚硅谷