普通代码块
定义在方法中的代码块
public class Test{
public static void main (String[] args){
{//直接使用{}定义,普通代码快
int x = 10;
System.out.println("这是主方法中用{}定义的一段普通代码块 x= "+x);
}
int x = 100;
System.out.println("这是主方法中的一段普通代码块 x= "+x);
}
}
在一个方法中如果代码片段过长,用的变量较多,为了避免变量重名,可以使用普通代码块.
构造块
定义在类中不加任何修饰符的一段代码块
public class Car{
{//不加任何修饰的一段代码块
System.out.println("这是Car类的构造块");
}
//构造方法(创建对象)
public Car(){
System.out.println("这是Car类的构造方法");
}
}
public class Test{
public static void main(String[] args){
new Car();
new Car();
}
}
运行结果如下:
在这里我们可以看出:
①构造块优先于构造方法的执行
②在每一次实例化对象时,都会调用一次构造块
静态代码块
使用static修饰的一段代码块
静态块根据在不同的类中可以分为两种
①在主类中的静态块
②在非主类中的静态块
在主类中
public class Test{
static {//定义在主类中的静态块
System.out.println("这是定义在主类中的静态块");
}
{
System.out.println("这是Test类的构造块");
}
public Test(){
System.out.println("这是Test的构造函数");
}
public static void main(String[] args){
new Test();
new Test();
}
}
通过上面的输出我们发现:
在主类中定义的静态块,优先于主方法(main)执行
在非主类中
public class Car{
static {//定义在非主类中的静态块
System.out.println("这是定义在非主类中的静态块");
}
{//不加任何修饰的构造块
System.out.println("这是Car类的构造块");
}
//构造方法(创建对象)
public Car(){
System.out.println("这是Car类的构造方法");
}
}
public class Test{
public static void main(String[] args){
new Car();
new Car();
}
}
通过上面的输出,我们发现:
静态块优先于构造块和构造方法
静态块在实例化对象时,无论多少次实例化对象,静态块只执行一次
在非主类中静态块的主要作用是为static属性进行初始化