海印网
海印网

¿Qué es un bloque static en Java?

admin数码00

¿Qué es un bloque static en Java?-第1张图片-海印网

java 中的静态块是仅在类被 classloader 加载类时(即类加载到内存中时)执行一次的代码块。一旦类已经加载,静态块将不会再次执行。它的主要目的是在类第一次加载时、创建任何实例之前执行某些代码,例如初始化类的静态变量。事实上,一个类可以有多个静态块,并且这些静态块将按照声明的顺序执行。静态块的语法如下:

static {
    // código a ejecutar
}

登录后复制

假设我们有以下课程:

public class main {
    static {
        system.out.println("ejecutando bloque estático de main");
    }

    public static void main(string[] args) {
        system.out.println("ejecutando método main de main");
    }
}

登录后复制

知道java应用程序的入口点是main方法,当执行main类时,它会被加载到内存中,并且首先执行的将是静态块,然后是main方法。考虑到静态块将始终在类的任何静态或非静态方法之前执行,甚至在类构造函数本身之前执行。

ejecutando bloque estático de main
ejecutando método main de main

登录后复制

与静态方法一样,静态块无法访问类的实例变量,因为这些实例变量是在创建类的任何实例之前执行的。但是,它们可以访问类的静态属性和方法,您只需考虑到,如果块中需要静态属性,则必须在块之前声明它们,以便可以使用它们(声明的顺序很重要)。

// uso incorrecto
// cannot read value of field 'edad_maxima' before the field's definition

public class persona {
    static {
        system.out.println("la edad máxima es: " + edad_maxima);
    }

    private static int edad_maxima = 100;
}

登录后复制

// uso correcto
public class persona {
    private static int edad_maxima = 100;

    static {
        system.out.println("la edad máxima es: " + edad_maxima);
    }
}

登录后复制

让我们看另一个例子,我们有具有以下结构的 person 类:

public class persona {
    private string name;
    private int age;
    private static int numeropersonas;
    public static final int edad_maxima;

    static {
        numeropersonas = 0;
        edad_maxima = 100;
        system.out.println("número de personas al inicio: " + numeropersonas);
    }

    public persona(string name, int age) {
        this.name = name;
        this.age = age;
        numeropersonas++;
        system.out.println("se ha creado una persona con nombre " + name + " y edad " + age);
    }

    public static int getnumeropersonas() {
        return numeropersonas;
    }

    // getters y setters
}

登录后复制

static块用于分别初始化静态属性numberpersonas和max_age的值(静态属性可以从声明中初始化),随后调用getnumberpersonas()方法并通过打印开头的numberpersonas的值控制台(应该是 0)。

如果我们创建此类的两个实例并调用 getnumberpersonas() 方法,我们应该得到以下输出:

public class main {
    public static void main(string[] args) {
        persona persona1 = new persona("juan", 25);
        persona persona2 = new persona("maría", 30);
        system.out.println("número de personas al final: " + persona.getnumeropersonas());
    }
}

登录后复制

Número de personas al inicio: 0
Se ha creado una persona con nombre Juan y edad 25
Se ha creado una persona con nombre María y edad 30
Número de personas al final: 2

登录后复制

正如我们所见,静态块在创建任何实例之前执行,并执行其中包含的代码,随后创建该类的两个实例,最后获取实例的数量。在此示例中,我们可以清楚地看到静态块仅执行一次,无论生成的实例数量如何。

一般来说,这是静态块的用途,在将类加载到内存中时只执行一次代码,例如初始化静态变量、加载库等。

以上就是¿Qué es un bloque static en Java?的详细内容,更多请关注其它相关文章!

Tags: 静态实例

Sorry, comments are temporarily closed!