**普通代码块:**定义在方法中的代码块;
**构造块:**定义在类中的代码块;
**构造方法:**使用关键字new实例化新对象时来进行调用的操作方法,构造方法名称必须与类名称相同;
**静态代码块:**用static定义的代码块;其又分为:在主类中的静态代码块,在非主类中的静态代码块;
例如:
class Person{
static{//静态块
System.out.println("Person类的静态块");
}
{ //定义在类中,不加任何修饰符,构造块
System.out.println("1.Person类的构造块");
}
public Person(){//构造方法块
System.out.println("2.Person类的构造方法");
}
}
优先级顺序:静态代码块>构造块(非静态代码块)>构造方法
构造块优先于构造方法执行,但每产生一个新的对象就调用一次构造块、构造方法(同时调用的);
无论创建多少个实例化对象,静态块都只执行一次;
但是在主类中的静态代码块优先于main方法执行,其他的都是在main方法之后才开始执行的;
public class Test6 {//主类
private int codeline;
//静态块(在主类中的静态块优先于main方法执行)
static{
System.out.println("主类的静态块,类");
}
//构造块
{
System.out.println("主类的构造块,非静态块");
}
//构造方法
public Test6() {
System.out.println("这是主类的构造方法");
}
public static void main(String[] args) {
System.out.println("main");
Test6 p1=new Test6();
System.out.println();
Test6 p2=new Test6();
System.out.println("------------------");
Cat cat1=new Cat();
System.out.println();
Cat cat2=new Cat();
}
}
class Cat{//非主类
private String name;
//静态块
static {
System.out.println("这是非主类的静态块");
}
//构造块
{
System.out.println("非主类的构造块,非静态块");
}
//构造方法
public Cat() {
System.out.println("这是非主类的的构造方法");
}
}