Java中的三种代码块

Java中代码块的概述和分类

代码块的概述:用{}括起来的都是代码块;
代码块的分类:根据其位置与声明不同,可以分为 局部代码块(只要是跟局部有关的都是跟方法有关),构造代码块,静态代码块,同步代码块;

局部代码块
Java中的三种代码块_第1张图片
运行结果为:10
如果把第五行移出来,如下:
Java中的三种代码块_第2张图片
程序就会出错,因为找不到x,因此局部变量的主要作用就是可以尽早的释放内存,限定变量的生命周期,节省空间,提高内存的利用率。

构造代码块

构造代码块每创建一次对象就会执行一次,而且是优先于构造函数,而且必须要有对象建立才会运行构造代码块,而且构造代码块与构造方法一样不能被类所调用。

class Demo_Code {
	public static void main(String[] args) {
		Student s1 = new Student();
		System.out.println("----------------");
		Student s2 = new Student();
		System.out.println("----------------");
		Student s3 = new Student();
				System.out.println("----------------");
		Student s4 = new Student();	
		
	}
}

class Student {
	private String name;
	private int age;
	public Student() {
		System.out.println("无参构造方法");
	}
	public Student(String name,int age) {
		System.out.println("有参构造方法");
	}
	{
		System.out.println("构造代码块
		");
	}
}

Java中的三种代码块_第3张图片
可以看到优先输出了构造代码块中的内容。

静态代码块

将之前的Student类中加入静态代码块,如下:

class Student {
	private String name;
	private int age;
	public Student() {
		System.out.println("无参构造方法");
	}
	public Student(String name,int age) {
		System.out.println("有参构造方法");
	}
	{
		System.out.println("构造代码块");
	}
	static {
		System.out.println("静态代码块");
		}
}

输出结果为
Java中的三种代码块_第4张图片
从上面的输出结果中我们可以看出静态代码块只执行了一次,那是因跟静态变量一个道理,都是随着类的加载而加载,而构造方法是随着对象的加载而加载,也就是说创建对象后就会直接运行构造方法。
作用是让类初始化,一般是用来加载驱动。
通过下列代码来了解静态代码块

class Demo_Code {
	public static void main(String[] args) {
		Student s1 = new Student();
		System.out.println("----------------");
		Student s2 = new Student();
		System.out.println("----------------");
		Student s3 = new Student();
				System.out.println("----------------");
		Student s4 = new Student();	
		
	}
	static {
		System.out.println("主方法中的静态代码块");
		}
}

class Student {
	private String name;
	private int age;
	public Student() {
		System.out.println("无参构造方法");
	}
	public Student(String name,int age) {
		System.out.println("有参构造方法");
	}
	{
		System.out.println("构造代码块");
	}
	static {
		System.out.println("静态代码块");
		}
}

运行结果为:

Java中的三种代码块_第5张图片
由此我们可以看出,静态代码块是优先于主方法运行的,由此我们可以得出三种代码块之间的优先级为:静态代码块>构造代码块>局部代码块。

你可能感兴趣的:(Java中的三种代码块)