javaSE之代码块

文章目录

    • 普通代码块
    • 构造块
    • 静态代码块
      • 非主类静态块
      • 主类静态块
    • 同步代码块

本篇我们将介绍一下代码块的概念,这在c语言里面是没有的,它的形式是用{}包围起来的。
一般分为以下四种,我们一一详看:

普通代码块

什么是普通代码块?

就是定义在方法中的代码块

你或许之前并未留意过,我举个例子吧:

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);
	}
}

我们看到上面这个main方法里面放了普通代码块,用大括号括起来,看到这里,你觉得运行结果会是什么呢?我们看看
在这里插入图片描述

一般如果方法中代码过长,为避免变量重名,使用普通代码块。(使用较少,了解概念即可)。

构造块

那么什么是构造块呢?

构造块:定义在类中的代码块(不加修饰符)

class Person{
{ //定义在类中,不加任何修饰符,构造块
System.out.println("1.Person类的构造块");
}
	public Person(){
		System.out.println("2.Person类的构造方法");
	}
}

想上面这种,定义在类中的代码块就是构造块,它的位置不一定必须在构造方法之前

public class Test{
	public static void main(String[] args) {
		new Person();
		new Person();
	}
}

那么我们实例化的时候回出现什么结果:
javaSE之代码块_第1张图片
通过以上代码我们发现:构造块优先于构造方法执行,每产生一个新的对象就调用一次构造块,构造块可以进行简单的逻辑操作(在调用构造方法前)。

静态代码块

什么是静态块?

就是用static修饰的代码块

这里可以根据静态块所在的类的不同又可分为以下两种类型:

1.非主类静态块
2.主类静态块

非主类静态块

非主类其实就是这个类中没有main方法,那么它的静态块如下:

class Person{
{ //定义在类中,不加任何修饰符,构造块
System.out.println("1.Person类的构造块");
}
	public Person(){
		System.out.println("2.Person类的构造方法");
	}
static { //定义在非主类中的静态块
System.out.println("3.Person类的静态块");
}
}

像上面这样用static修饰的代码块

public class Test{
	public static void main(String[] args) {
		System.out.println("--start--");
		new Person();
		new Person();
		System.out.println("--end--");
	}
}

我们看看它的运行结果是什么?
javaSE之代码块_第2张图片
在Test方法中我们new了两个对象,输出的结果如上图,第一个对象输出了三句话,第二个对象输出了两句话

  • 通过上面的运行结果我们发现:

1.静态块优先于构造块执行
2.无论产生多少实例化对象,静态块都只执行一次
静态块的主要作用是为static属性进行初始化

主类静态块

定义在主类中的代码块

如下:


public class Test{
{
System.out.println("1.Test的构造块");
}
	public Test(){
		System.out.println("2.Test的构造方法");
	}
static{
System.out.println("3.Test的静态块");
}
	public static void main(String[] args) {
		System.out.println("--start--");
		new Test();
		new Test();
		System.out.println("--end--");
	}
}

javaSE之代码块_第3张图片

我们可以明显的看到,这个静态块优先于主方法执行了

针对以上对代码块的讲解,如果一些属性需要在使用前做处理,可以考虑使用代码块。

同步代码块

这个现在先不多作介绍,后续多线程部分再说

你可能感兴趣的