
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 mainejecutando método main de main
与静态方法一样,静态块无法访问类的实例变量,因为这些实例变量是在创建类的任何实例之前执行的。但是,它们可以访问类的静态属性和方法,您只需考虑到,如果块中需要静态属性,则必须在块之前声明它们,以便可以使用它们(声明的顺序很重要)。
// uso incorrecto// cannot read value of field 'edad_maxima' before the field's definitionpublic class persona { static { system.out.println("la edad máxima es: " + edad_maxima); } private static int edad_maxima = 100;}
// uso correctopublic class persona { private static int edad_maxima = 100; static { system.out.println("la edad máxima es: " + edad_maxima); }}
让我们看另一个例子,我们有具有以下结构的 person 类:
图片上传插件zyupload java版实例
图片上传插件zyupload java版实例
49 查看详情
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: 0Se ha creado una persona con nombre Juan y edad 25Se ha creado una persona con nombre María y edad 30Número de personas al final: 2
正如我们所见,静态块在创建任何实例之前执行,并执行其中包含的代码,随后创建该类的两个实例,最后获取实例的数量。在此示例中,我们可以清楚地看到静态块仅执行一次,无论生成的实例数量如何。
一般来说,这是静态块的用途,在将类加载到内存中时只执行一次代码,例如初始化静态变量、加载库等。
以上就是¿Qué es un bloque static en Java?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/387405.html
微信扫一扫
支付宝扫一扫