所谓代码块是指使用“{ }” 括起来的代码块,根据位置不同,代码块可以分为 4 种:普通代码块、构造代码块、静态代码块、同步代码块。同步代码块在多线程中常用。详情看我另一篇博客:Java 基础学习之多线程五 (同步与死锁)
1 普通代码块
实例 1 代码:
package self.learn.codeblock;
public class CodeDemo {
public static void main(String[] args) {
{ // 定义一个普通代码块
int x = 30; // 定义局部变量
System.out.println("普通代码块 ---> x="+x);
}
int x = 100; // 与局部变量名称相同
System.out.println("代码块之外 ---> x="+x);
}
}
运行结果截图:
本程序利用了普通代码块对一个方法中的结构进行了分割,这样即使定义有重名变量 x, 但是由于其处于不同的范围,也不会互相影响。所以普通代码块的主要作用是进行分割使用。
2 构造代码块
构造代码块是直接写在类中的代码块
实例 2 代码:
package self.learn.codeblock;
public class CodeDemo {
{
System.out.println("1、构造块");
}
public CodeDemo() {
System.out.println("2、构造方法");
}
public static void main(String[] args) {
new CodeDemo(); // 实例化对象
new CodeDemo(); // 实例化对象
new CodeDemo(); // 实例化对象
}
}
运行结果截图:
从输出结果中可以发现,构造块优于构造方法执行,而且每次实例化对象都会执行构造块中的代码。
3 静态代码块
静态代码块,是使用 static 关键字声明的代码块。
实例 3 代码:
package self.learn.codeblock;
public class CodeDemo {
{ // 定义构造块
System.out.println("1、构造块");
}
static { // 定义静态代码块
System.out.println("0、静态代码块");
}
public CodeDemo() { // 定义构造方法
System.out.println("2、构造方法");
}
}
运行结果截图:
从程序的运行结果可以发现,静态代码块优先于主方法执行,而在类中定义的静态代码块会优先于构造块执行,而且不管有多少个对象产生,静态代码块只执行一次
实例 4 代码:子类和父类的各种代码块执行顺序
package self.learn.test1;
public class A {
public A() {
System.out.println("class A");
}
{
System.out.println("I'm A class"); }
static {
System.out.println("class A static"); }
}
package self.learn.test1;
public class B extends A {
public B() {
System.out.println("class B");
}
{
System.out.println("I'm B class"); }
static {
System.out.println("class B static"); }
public static
void main(String[] args) {
new B();
}
}