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?的详细内容,更多请关注其它相关文章!