Java中用{ }括起来的代码段就是代码块,他分为如下几种类型

 

位置

作用

局部代码块

在main方法里面

给变量限定生命周期,局部代码块的变量在执行结束后会被Java回收

构造代码块

在类的成员位置

在每次执行构造方法前先执行构造代码块,

可以将多个构造方法中的相同的代码放到构造代码块中,对对象进行初始化.

静态代码块

在类的成员位置

一般用于给类初始化,被静态修饰的代码块仅执行一次.

注意构造代码块,构造方法,静态代码块的优先级为:

    静态代码块>构造代码块>构造方法;

对象调用方法的时候先检查类中是否有静态代码块,先执行静态代码块,再检查是否有构造代码块,最后执行构造方法

举例:

class Block{
	{
		System.out.println("我是构造代码块"); //每次被新对象调用时都执行,优先级在静态代码块之后
	}
	static {
		System.out.println("我是静态代码块");  //只在第一次调用的时候执行,优先级最高
	}
	public void method() {
		System.out.println("我是成员方法"); 	
	}
	public Block() {
		super();
		System.out.println("我是无参构造方法");
	
	}
	
}
public class ARRTEXT {
	public static void main(String[] args) {
		{
			String a="我是局部代码块";
			System.out.println(a);
		}
		//System.out.println(a);  报错局部代码块内的变量在代码块外不能访问,代码块执行完后就会被回收
		System.out.println();
		Block b=new Block();
		b.method();
		System.out.println();
		Block c=new Block();
		c.method();	
		  
	}
}
/*
输出为:
我是局部代码块

我是静态代码块
我是构造代码块
我是无参构造方法
我是成员方法

我是构造代码块
我是无参构造方法
我是成员方法
 * */

需要注意:

静态代码块和构造代码块时=是在创建对象new的时候就开始执行了,匿名对象也可以调用.

    静态代码块一般用于某些需要在类执行之前就要执行的代码,和静态方法类似,优先级都高于类,两者的不同是静态方法需要手动通过类名.方法名来调用,而静态代码块是自动执行的,在加载类前会先执行类中的静态代码块.

继承:

在继承中,对象初始化的时候会先执行父类的静态代码块,然后是子类的静态代码块,然后再执行父类的构造代码块和无参构造方法,最后执行子类的构造代码块和无参构造方法.

总之就是静态最优先,构造代码块在构造方法之前.

如下:

class Block{

	{
		System.out.println("我是父类构造代码块"); 
	}
	static {
		System.out.println("我是父类静态代码块");  
	}
	public void method() {
		System.out.println("我是成员方法"); 	
	}
	public Block() {
		super();
		System.out.println("我是父类无参构造方法");
	
	}
	
}
class app extends Block{
	static {
		System.out.println("我是子类的静态代码块");
	}
	{
		System.out.println("我是子类的构造代码块");
	}
	public app() {

		System.out.println("我是子类无参构造方法");
	}
	
}
public class ARRTEXT {
	public static void main(String[] args) {
	
		app a=new app();
	

	}
}
/*输出为:
我是父类静态代码块
我是子类的静态代码块
我是父类构造代码块
我是父类无参构造方法
我是子类的构造代码块
我是子类无参构造方法

 * */