JVM装载一个类的时候,首先检查他有没有父类,如果有父类则装载父类,然后再装载该类,装载!=实例化,但要开辟内存,这些类都放在JVM的方法区内,类实例化后的对象放在JVM的堆内。
实例化一个子类时,父类一定被装载,但并不是实例化。?????
Bill Venners的书中对Load/link/init的讲解,非常棒:
《Inside the Java Virtual Machine》Chapter 7 - The Lifetime of a Type:
http://www.artima.com/insidejvm/ed2/lifetype.html
《Objects and Java》Chapter 4 - Initialization and Cleanup(前段讲对象初始化,后段讲的才是类初始化):
http://www.artima.com/objectsandjava/webuscript/InitCleanup1.html
一些名词概念:
Class Initialization Method : <clinit>
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.9
Class Variable Initializers:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.3.2
给个例子就明白了:
class CoffeeCup {
private static int innerCoffee = 355; // "= 355" is an Class Variable Initializers
// ...
}
Static Initializers:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.7
即静态初始化块(Static Initialization Blocks)。
静态初始化块在类初始化的时候被执行。
存在多个静态初始化块时,按照他们在代码中出现的顺序依次执行。
静态初始化块中不能有return语句。
静态初始化块中不能使用this和super,不能访问类的实例变量。
非静态初始化块(Non-static Initialization Blocks)参见:
http://wuaner.iteye.com/blog/1669937
Sources:
Java Virtual Machine Specification - Chapter 5. Loading, Linking, and Initializing:
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html
JLS 12.4 Initialization of Classes and Interfaces:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.4
请不要将类的初始化(Initialization of Classes)等同于类的实例化(对象初始化)。类的实例化(对象初始化)参见:
http://wuaner.iteye.com/admin/blogs/1669937
Static Initializers & Class Variable Initializers示例:
public class StaticVariableTest {
private static StaticVariableTest svt = new StaticVariableTest();//语句(1)
private static int count1;//语句(2)
private static int count2 = 0;//语句(3)
private StaticVariableTest(){//语句(4)
count1++;
count2++;
}
public static StaticVariableTest getInstance(){//语句(5)
return svt;
}
public static int getCount1() {
return count1;
}
public static void setCount1(int count1) {
StaticVariableTest.count1 = count1;
}
public static int getCount2() {
return count2;
}
public static void setCount2(int count2) {
StaticVariableTest.count2 = count2;
}
public static void main(String[] args) {
StaticVariableTest svt = StaticVariableTest.getInstance();//语句(6)
System.out.println("count1:" + svt.getCount1());//语句(7) 输出 1
System.out.println("count2:" + svt.getCount2());//语句(8) 输出 0
}
}
分享到:
相关推荐
Oracle Solaris 11 man pages section7:Device and Network Interfaces-1012
Oracle Solaris 10 man pages section7:Device and Network Interfaces-996
在7CP/IP Socket首次发布时,Java作为一个新的未被关注的编程语 言刚出现。然而,自2001年以来,Java的网络编程能力已经得到了很大程度的扩展,而且 持续的应用优势已经使其成为了一个占主导地位的平台。考虑到Java...
Chapter 3 Exceptions and Interrupts Architecture Part II Programming Chapter 4 Basics of Assembly Programming Chapter 5 Data Processing Instructions Chapter 6 Memory Access Instructions Chapter 7 ...
Componente-USB HID Human Interfac.7z
interface 应用程序界面 窗口 interface 应用程序界面 窗口
chrome-remote-interface, node.js的Chrome 调试协议接口 chrome-remote-interface 调试协议接口通过使用简单的JavaScript API提供命令和通知的简单抽象,帮助对 Chrome ( 或者其他任何适合实现的工具。) 提供了一个...
JESD223-1B:2016 Universal Flash Storage Host Controller Interfac
CMEL奇美光电2.8寸OLED屏的SPI初始化程序 配置为RGB工作模式
Oracle Solaris 11 Oracle Solaris Administration:Network Interfaces and Network Virtualization-428
Win32 Multilingual IME Application Programming Interface 很难找的IME 输入法编程文档 ,废了牛劲找到了,想写输入法的必备~!
Overview Package Class Tree Deprecated Index Help PREV NEXT FRAMES NO FRAMES A B C D E F G H I J L P R S U V -------------------------------------------------------------------------------- A ...
城市就是森林,每一个男人都是猎手,每一个女人都是陷阱。——《三体》 在哪使用Lambda表达式? 在上一篇文章(传送门)中介绍了Lambda...Comparator就是一个函数式接口,那么什么是函数式接口? 函数式接口 函数式
STM_FLASH M25P64 SPI Bus Interfac
NServiceBus.Hyperion 通过二进制序列化器添加对消息序列化... 如果发送了显式接口,则将引发异常,并显示以下消息: Interface based message are not supported.Create a class that implements the desired interfac
摘 要:HID 设备研发和使用中所面临的重要问题之一是设备与主机应用程序的通讯.文中以视频编辑专用HID 设备Wave Panel 为基础,首先简要介绍了HID 设备的性能特点和Windows 环境下的HID 通讯机制,在此基础上设计出...
It includes the following sections: · Features, learning, and classifiers · Biometrics · Data stream classification and big data analytics · Image processing and computer vision · Medical ...
ARM Microprocessor Systems 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
最新完整版标准 ISO 22402-2-2022 Medium-transfer units for tool interfaces.pdf
word源码java ReviewTheKey Key points of final review . 索引 其他项目 项目名 介绍 :globe_showing_Asia-Australia: Develop an intelligent AI half terminal half graphical operating system Antz. 一个集成化...