Java虚拟机在首次主动使用类型时初始化它们。下面几种情况下会主动使用:
1.创建类的新实例
2.调用类中声明的静态方法
3.操作类或接口中声明的非常量静态字段
4.调用Java API中特定反射方法
5.初始化一个类的子类
6.指定一个类作为Java虚拟机启动时的初始化类
而被动使用(对于子类、子接口和实现了接口的类引用父亲的非常量静态字段)不会触发初始化。
来看下面的一段代码
=====父类
public class NewParent {
static int hoursOfSleep=(int)(Math.random()*3.0);
static{
System.out.println("New parent was initialized...");
}
public NewParent() {
System.out.println("NewParent.NewParent()");
// TODO Auto-generated constructor stub
}
}
========子类
public class NewBornBody extends NewParent{
static int houseOfCrying=6+(int)(Math.random()*2.0);
static{
System.out.println("NewBronBody was initiazed.");
}
}
========JVM启动类
public class Example2 {
public static void main(String[] args){
int hours=NewBornBody.hoursOfSleep;
System.out.println(hours);
}
static{
System.out.println("Example2 was initialized!");
}
}
这段代码的执行结果为:
Example2 was initialized!
New parent was initialized...
0
===================================
如果一个既是static又是final的,使用时就不是对这个类的主动使用。示例代码如下:
public interface Angry {
String greeting="Grrr1";
}
public class Dog {
static final String greeting="wolf,wolf,world!";
static{
System.out.println("Dog was initialized");
}
static int getAngerLevel(){
System.out.println("Angel was initialized!");
return 1;
}
}
public class Example3 {
public static void main(String[] args){
System.out.println(Angry.greeting);
System.out.println(Dog.greeting);
}
static{
System.out.println("Example3 was initialized!");
}
}
========代码的执行结果为:
Example3 was initialized!
Grrr1
wolf,wolf,world!
//可见Dog并没有被初始化
分享到:
相关推荐
Java初始化块Java初始化块
源代码以及word文件 博文链接:https://zsl131.iteye.com/blog/624175
Java初始化顺序1
深入Java初始化.pdf
作为一名程序员必须知道Java初始化顺序......
C++和Java初始化顺序的比较代码, 详细的解说请参考博客地址, http://blog.csdn.net/ostrichmyself/archive/2010/11/25/6035538.aspx
基于常量池和反编译分析的Java初始化研究.pdf
Java 的初始化问题和其他高级语言类似。一个明显不一样的地方是体现在它的类加 载过程。传统的编程语言包括C++等,程序是作为启动过程的一部分立刻被加载,而Java 的 类加载只在需要使用程序代码时才会被加载(每个...
Spring+Mybatis+Atomikos实现JAVA初始化并控制多个数据源+分布式事务的一个DEMO,内涵源代码,以及一篇关于该内容的博客
主要介绍了6种方法初始化JAVA中的list集合,文中讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
java 数组初始化 详解 doc
一个java代码初始化具体过程的的demo
主要介绍了Java初始化块及执行过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
《Java程序设计基础教程》按内容分成五篇:Java 语言入门篇、面向对象篇、数据流应用篇、Java GUI编程篇和高级应用篇,共有二十四讲组成。
java语法\Java数组声明、创建、初始化
java软件技术文档
如果有static,即静态成员定义,首先初始化static的变量,如,在类Cups中c3在c2前面,可是在输出的结果中,你可以发现,c2是在c3前执行的,这就是因为,所有的static都在第一时间被初始化。
是某高手实际录制的一段视频,讲的很细致!