初始化阶段是执行类构造器<clinit>()
方法的过程。
<clinit>()
方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{})
中的语句合并产生的,编译器手机的顺序是由语句在原文件中出现的顺序所决定的,静态语句块中只能访问到定义在静态语句块之前的变量,定义在他之后的变量,在前面的静态语句块中可以赋值,但是不能访问,如下代码:
public class Test{ static { i = 0;//可以通过 System.out.print(i);//"非法前向引用" } static int i = 1;}
<clinit>()
方法与类的构造函数(或者说实例构造器<init>()
方法)不同,它不需要显示的调用父类构造器,虚拟机会保证在子类的<clinit>()
方法执行之前,父类的<clinit>()
方法已经执行完毕。因此在虚拟机中第一个被执行的<clinit>()
方法肯定是java.lang.Object。由于父类的
<clinit>()
方法先执行,也就意味着父类中定义的静态语句块要先于子类的变量赋值操作。<clinit>()
方法对于类或接口来说并不是必须的,如果一个类中没有静态语句块,也没有对变量的赋值操作,那么编译器可以不为这个类生成<clinit>()
方法。接口中不能使用静态语句块,但仍然有变量初始化的赋值操作,因此接口与类一样都会生成
<clinit>()
方法。但接口与类不同的是,执行接口的<clinit>()
方法不需要先执行父接口的<clinit>()
方法。只有当父接口中定义的变量使用时,父接口才会初始化。另外,接口的实现类在初始化时也一样不会执行接口的<clinit>()
方法。虚拟机会保证一个类的
<clinit>()
方法在多线程环境中被正确地加锁、同步,如果多个线程同时去初始化一个类,那么只会有一个线程去执行这个类的<clinit>()
方法,其他线程都需要阻塞等待,直到活动线程执行<clinit&g......
原文转载:http://www.shaoqun.com/a/895445.html
跨境电商:https://www.ikjzd.com/
FEN:https://www.ikjzd.com/w/2668
折扣网站:https://www.ikjzd.com/w/74
浩方:https://www.ikjzd.com/w/1046
初始化阶段是执行类构造器<clinit>()方法的过程。<clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{})中的语句合并产生的,编译器手机的顺序是由语句在原文件中出现的顺序所决定的,静态语句块中只能访问到定义在静态语句块之前的变量,定义在他之后的变量,在前面的静态语句块中可以赋值,但是不能访问,如下代码:publicclass
西藏这个神仙般的村庄,简直是东方瑞士小镇,美得不想回家:http://www.30bags.com/a/225482.html
西藏这个小众地方,遗落人间的仙境,人少景美还不要门票:http://www.30bags.com/a/224848.html
西藏这一小众村落,竟还有如此绝美的风光,犹如来到欧洲小镇:http://www.30bags.com/a/224588.html
西藏这座城,"小江南"名号都低估了她:http://www.30bags.com/a/245492.html
同房交换4P好爽 口述做爰全过程和细节:http://lady.shaoqun.com/a/247881.html
老师带到宿舍做了一次 进入班主任的秘密花园:http://lady.shaoqun.com/m/a/247357.html
他扒开我的下面舌头伸进去 吃她两腿中间的小豆豆:http://www.30bags.com/m/a/249748.html
总裁舌尖逗弄她腿间的小核 吸住小核到抽搐:http://www.30bags.com/m/a/249713.html
2021深圳bang儿童艺术节时间、地点、门票:http://www.30bags.com/a/523617.html
亚马逊相对于其它电商平台有哪些优势?:https://www.ikjzd.com/articles/146890
亚马逊要准备接受数字货币?招聘广告泄天机:https://www.ikjzd.com/articles/146899
5 个鼓舞人心的 TikTok广告示例,TikTok广告带你起飞:https://www.ikjzd.com/articles/146887
没有评论:
发表评论