Java中的代码块

简介: Java中的代码块

认识代码块

1.1什么是代码块

使用 {} 定义的一段代码.


根据代码块定义的位置以及关键字,又可分为以下四种:


普通代码块(了解即可,一般不会用)

构造块(实例代码块)

静态代码块

同步代码块(后续讲解多线程部分再谈)

1.2普通代码块

普通代码块:定义在方法中的代码块.

public class Main{
    public static void main(String[] args) {
        {
            //直接使用{}定义,普通方法块
            int x = 10 ;
            System.out.println("x1 = " +x);
        }
        int x = 100 ;
        System.out.println("x2 = " +x);
    }
}
// 执行结果
x1 = 10
x2 = 100

这种用法较少见。


1.3构造代码块

构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。

class Person {
    private String name;//实例成员变量private int age;
    private String sex;
    public Person() {
        System.out.println("I am Person init()!");
    }
    //实例代码块
    {
        this.name = "bit";
        this.age = 12;
        this.sex = "man";
        System.out.println("I am instance init()!");
    }
    public void show() {
        System.out.println("name: " + name + " age: " + age + " sex: " + sex);
    }
}
public class Main {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.show();
    }
}
// 运行结果
I am instance init()! 
I am Person init()!
name: bit age: 12 sex: man


注意事项: 实例代码块优先于构造函数执行。


1.4静态代码块

使用static定义的代码块。一般用于初始化静态成员属性。


代码示例:此处思考最终的输出结果是多少呢?

class Person2 {
    private String name;//实例成员变量
    private int age;
    private String sex;
    private static int count = 0;//静态成员变量
    public Person2() {
        System.out.println("I am Person init()!");
    }
    //实例代码块
    {
        this.name = "bit";
        this.age = 12;
        this.sex = "man";
        System.out.println("I am instance init()!");
    }
    //静态代码块
    static {
        count = 10;//只能访问静态数据成员
        System.out.println("I am static init()!");
    }
    public void show() {
        System.out.println("name: " + name + " age: " + age + " sex: " + sex);
    }
}
public class LeiHeDuiXiang6 {
    public static void main(String[] args) {
        Person2 p1 = new Person2();
        Person2 p2 = new Person2();
    }
}

注意事项:

1.静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。
2.静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行。(重点)
所以我们可以推断出上述代码最终的输出结果为:
I am static init()!
I am instance init()!
I am Person init()!
I am instance init()!
I am Person init()!


此时我们来修改下代码再看两个问题:

class Person2 {
    private String name;//实例成员变量
    private int age;
    private String sex;
    public static int count = 0;//静态成员变量
    public Person2() {
        System.out.println("I am Person init()!");
    }
    //实例代码块
    {
        this.name = "bit";
        this.age = 12;
        this.sex = "man";
        System.out.println("I am instance init()!");
    }
    //静态代码块
    static {
        count = 10;//只能访问静态数据成员
        System.out.println("I am static init()!");
    }
    public void show() {
        System.out.println("name: " + name + " age: " + age + " sex: " + sex);
    }
}
public class LeiHeDuiXiang6 {
    public static void main(String[] args) {
        System.out.println(Person2.count);
    }
}
//执行结果
I am static init()!
10

此时若只单独执行System.out.println(Person2.count);这一行语句的时候,首先会先执行静态代码块,然后执行输出语句System.out.println(Person2.count)。


count最终的输出值为10,原因是此时首先在类中定义count为0后,在静态代码块中又对count重新赋值了一个10,


假如此时我们调换类中代码的书写顺序,即静态代码块在前,public static int count = 0这条赋值语句在后的话,则最终输出结果为0.


此时我们会发现若单独执行这一条语句,实例代码块和构造函数是不会被执行的,只会执行一次静态代码块,这是为什么?

答:原因是我们是count是静态的变量,是不依赖对象的,是可以通过类直接访问的,这期间并没有发生对象的实例化,所以对象实例代码块以及构造函数是都不会执行的


相关文章
|
Arthas Java 中间件
如何优雅的在java中统计代码块耗时
如何优雅的在java中统计代码块耗时
217 1
|
8月前
|
缓存 运维 Java
Java静态代码块深度剖析:机制、特性与最佳实践
在Java中,静态代码块(或称静态初始化块)是指类中定义的一个或多个`static { ... }`结构。其主要功能在于初始化类级别的数据,例如静态变量的初始化或执行仅需运行一次的初始化逻辑。
287 4
|
8月前
|
Java
java构造方法,构造代码块,静态代码块的执行顺序
本文介绍了Java中构造方法、构造代码块和静态代码块的执行顺序。静态代码块用`static`声明,在JVM加载类时执行一次;构造代码块在每次创建对象时执行,先于构造方法;构造方法用于对象初始化,创建对象时调用。示例代码展示了这三者的输出顺序,并解释了它们的区别和应用场景。
265 1
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
276 3
|
Java 程序员 API
从代码中寻找平衡:’java代码块和具体的代码应用
Java 8 引入的 Lambda 表达式是一项革命性特性,使编写简洁、灵活且易维护的代码成为可能。Lambda 表达式作为一种匿名函数,支持任意数量参数和返回值,其基本语法为 `(parameters) -> expression` 或 `(parameters) -> { statements; }`。
111 1
【Java】代码块
【Java】代码块
124 0
【JAVA学习之路 | 基础篇】类的成员--代码块
【JAVA学习之路 | 基础篇】类的成员--代码块
|
Java
Java中代码块区别及代码示例
Java中代码块区别及代码示例
148 0
|
Java C++
Java 基础内容(代码块)
Java 基础内容(代码块)
71 0
|
Java 编译器
Java中4种代码块:普通代码块,静态代码块,同步代码块,构造代码块
Java中4种代码块:普通代码块,静态代码块,同步代码块,构造代码块
538 0
下一篇
oss云网关配置