- 浏览: 7340073 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
package com.easyway.commons.ispace.dev.lang.classloader; /** * 关于类的初始化的时机的研究: * * java虚拟机只有在程序首次主动使用一个类或者接口时,才会初始化。 * 只有6种活动看作是程序对类或者接口的主动使用。 * (1) 创建类的实例,创建实例类的途径包括:用new 语句创建实例或者通过反射,克隆以及序列化 * 手段来创建实例。 * (2) 调用类的静态方法 * (3) 访问某一个类或者接口的常量或者对类的静态变量赋值。 * (4) 调用java API 中某些反射方法。如:调用Class.forName()时,类没有被初始化, * 那么调用方法就会初始化这个类,然后返回类的实例。备注:forName()方法是java.lang.Class的静态方法。 * (5) 初始化一个类的子类。例如对Sub的初始化,相等于对它父类Base类的主动使用,因此会先初始化Base类。 * (6) java虚拟机启动时被标明为启动类的类。例如对于 java ClassCircleLine 命令,ClassCircleLine * 类就是启动类, java虚拟机会先初始化它。 * 除了上述6中情况之外,其他使用java类的方式都被看作是被动使用。都不会导致类的初始化。 * @author longgangbai * @date 2010-5-7 * @version 1.0 * @since JDK6.0 */ class shape{ static int a=1; static{ System.out.println("init shape static "); } /** * (4)只有当程序访问的静态变量或者静态方法的确在当前类或者接口中定义是,才可看作是对类或者接口的主动调用。 * 例如Range.a 和Range.method(),由于静态变量a 和静态方法method()在shape父类中定义, * 因此java虚拟机仅仅初始化父类shape,而没有初始化Range。 */ static void method(){ System.out.println("static void method"); } } /** * (3) 当java 虚拟机初始化一个类时,要求他的所有父类都被初始化。但是这个规则并不适用接口 * A. 在初始化一个类时,并不会先初始化它所实现的接口。 * B. 在初始化一个接口时,并不会先初始化它的父类接口。 * 因此一个父类接口并不会因为它的子即可或者实现类的初始化而初始化。 * 只有当程序首次使用特定的静态变量时,才会导致该接口的初始化。 */ class Range extends shape{ static int b=1; static{ System.out.println("init Range static"); System.out.println("now init Range"); } } class ClassLoad{ static{ System.out.println("init ClassCircleLine"); } /** * 输入结果如下: * init ClassLoad 首先启动连接ClassLoad *init shape static 调用 Range.a 开始执行父类的初始化语句 * a =1 //在初始化之后才执行代码 * static void method * * * @param args * @throws ClassNotFoundException */ public static void main(String[] args) { System.out.println(" a ="+Range.a); Range.method(); } } public class ClassCircleLine { /** * (1)对于final 类型的静态变量,如果在编译时 不能计算出变量的值。那么这种变量使用看作是对类的主动调用,会导致初始化。 * 由于编译器不会计算变量m的值,因此变量m不是编译时常量。当被调用时,java虚拟机会初始化该类,是的变量a在方法区拥有特定的内存和初始值。 */ private static final double m=Math.random()*5; //变量m不是编译时的常量 /** * (2)当java虚拟机加载并连接类是,不会再方法区内为它的编译时常量分配内存。 * 对于final 类型的静态变量,如果在编译时就能计算出变量的取值。那么这种变量看作编译时的常量。 * java程序中队类中的编译时常量的使用,被看作是对类的被动使用,不会导致类的初始化。 */ private static final int a=2*3; //变量a是 编译时的常量 static{ System.out.println("init ClassCircleLine"); } /** * 输入结果如下: * after loader ClassLoad * before init ClassLoad * init ClassCircleLine * (5) 调用ClassLoader类的loadClass()方法加载一个雷,并不是对类的主动使用,不会导致类的初始化, * 在main方法中,系统类加载器加载ClassLoad,尽管ClassLoad被加载,但是没有被初始化,当程序调用 * Class的静态方法forName(“ClassLoad”)显示的初始化ClassLoad时,才是对ClassLoad的主动使用, * 将导致ClassLoad被初始化,他的静态代码块被执行。 * @param args * @throws ClassNotFoundException */ public static void main(String[] args) throws ClassNotFoundException { ClassLoader loader=ClassLoader.getSystemClassLoader(); Class objClass=loader.loadClass("com.easyway.commons.ispace.dev.lang.classloader.ClassLoad"); System.out.println("after loader ClassLoad "); System.out.println("before init ClassLoad "); objClass=Class.forName("com.easyway.commons.ispace.dev.lang.classloader.ClassLoad"); } }
package com; /** * 对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是 * (静态变量、静态初始化块)>(变量、初始化块)>构造器。 * 运行以上代码,我们会得到如下的输出结果: * 1、静态变量 * 2、静态初始化块 * 3、变量 * 4、初始化块 * 5、构造器 * * @author longgangbai * * */ public class InitialOrderTest { // 静态变量 public static String staticField = "静态变量"; // 变量 public String field = "变量"; // 静态初始化块 static { System.out.println(staticField); System.out.println("静态初始化块"); } // 初始化块 { System.out.println(field); System.out.println("初始化块"); } // 构造器 public InitialOrderTest() { System.out.println("构造器"); } public static void main(String[] args) { new InitialOrderTest(); } }
package com; /** * 运行一下上面的代码,结果马上呈现在我们的眼前: * * 1、父类--静态变量 * 2、父类--静态初始化块 * * 3、子类--静态变量 * 4、子类--静态初始化块 * * 5、父类--变量 * 6、父类--初始化块 * 7、父类--构造器 * * 8、子类--变量 * 9、子类--初始化块 * 10、子类--构造器 * * 现在,结果已经不言自明了。大家可能会注意到一点,那就是,并不是父类完全初始化完毕后才进行子类的初始化, * 实际上子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成了。 * * @author longgangbai * */ class Parent { // 静态变量 public static String p_StaticField = "父类--静态变量"; // 变量 public String p_Field = "父类--变量"; // 静态初始化块 static { System.out.println(p_StaticField); System.out.println("父类--静态初始化块"); } // 初始化块 { System.out.println(p_Field); System.out.println("父类--初始化块"); } // 构造器 public Parent() { System.out.println("父类--构造器"); } } public class SubClass extends Parent { // 静态变量 public static String s_StaticField = "子类--静态变量"; // 变量 public String s_Field = "子类--变量"; // 静态初始化块 static { System.out.println(s_StaticField); System.out.println("子类--静态初始化块"); } // 初始化块 { System.out.println(s_Field); System.out.println("子类--初始化块"); } // 构造器 public SubClass() { System.out.println("子类--构造器"); } // 程序入口 public static void main(String[] args) { new SubClass(); } }
发表评论
-
java中 避免过多的使用同步
2012-11-22 15:41 2249避免过多的使用同步 ... -
Java Thread的一点知识(III)
2011-10-28 15:32 3355同步和异步有何异同,阻塞与非阻塞,在什么情况下分别使用他们?举 ... -
Java Thread的一点知识(II)
2011-10-28 15:30 5417stop() 和 suspend() 方法为何不推荐使用? ... -
Java Thread的一点知识
2011-10-28 15:24 3706线程与进程的区别 线程和进程是不同的,每个进程 ... -
【转】Java内部类
2011-10-28 13:18 1560简单的说,内部(inner)类指那些类定义代码被置于其它类定义 ... -
【转】华为的JAVA面试题
2011-10-28 09:20 2366对我个人来说,看看 ... -
Java String 在JVM中的思考
2011-10-26 16:49 2269package com; /** * @author ... -
java Final的复习
2011-10-24 16:54 1588package com; /** *如果fina ... -
【转】 不用中间变量,实现两个变量的交换
2010-11-27 17:30 2878常见的面试题,很简单,但值得细想的问题还是很多,总结解法如下: ... -
对象池技术基本原理和分析应用(二)
2010-07-02 21:27 1963通用对象池的实现 对象池的构造和管理可以按照多种方式 ... -
对象池技术基本原理和分析应用(一)
2010-07-02 21:25 2047本文在分析对象池技 ... -
java回调机制的使用
2010-06-03 17:09 1959学习过Hibernate和Spring等童鞋,经常见到的 ... -
java 数组知道少?
2010-05-19 17:45 2368package com.easyway.common ... -
面向对象程序设计(OOP)的六大原则
2010-05-15 20:54 3057面向对象程序设计(OOP) ... -
Java 实例内部类的学习
2010-05-15 20:47 1758package com.easyway.commons.isp ... -
Java 匿名类的学习应用
2010-05-15 20:39 2071java 接口的匿名内部类 package com.ea ... -
java 异常的特殊的典型使用你知道吗?
2010-05-15 20:36 1595package com.easyway.commons.isp ... -
java 字符串类型知道少
2010-05-15 20:33 1779package com.easyway.commons.isp ... -
关于java 类的生命周期 深入了解
2010-05-15 20:15 2368package com.easyway.commons.isp ... -
枚举类的使用特点总结
2010-05-11 09:20 2363package com.easyway.commons.isp ...
相关推荐
其次,关于实例变量的初始化部分可能会讲解,实例变量可以声明时直接初始化,也可以在构造函数中初始化,甚至可以在声明后的任何时间点通过实例方法进行初始化。实例变量拥有默认值,但良好的编程习惯是不要依赖于...
1. 初始化双缓冲:创建一个与屏幕大小相同的位图作为后台缓冲区。 2. 绘制:在后台缓冲区上执行所有的绘图操作,包括背景、对象等。 3. 更新屏幕:在合适的时机,比如窗口重绘或滚动事件发生时,将后台缓冲区的内容...
类的初始化时机则分为主动使用和被动使用。主动使用包括: 1. 创建类的实例。 2. 访问类的静态变量或对其进行赋值。 3. 调用类的静态方法。 4. 使用反射`Class.forName`。 5. 初始化子类。 6. JVM启动时作为启动类的...
接着,它将涵盖类的构造函数和成员初始化列表,讨论如何在创建对象时正确地初始化数据成员。此外,书中的内容还会涉及静态与动态内存分配的初始化,包括栈上的变量和堆上的对象。 深入到C++11及其后续标准,书里会...
该文件是JVM中关于类加载机制的知识整理的思维导图,包括类加载机制概述、类加载的生命周期、加载时机、加载过程、类加载、类的初始化和实例化等几个大方面进行了讲解,其中类加载中还对JVM三种预定义类加载器进行了...
}`是Point类的一个方法,用于初始化点的坐标。方法名可以与成员变量同名,但作用域不同,方法内的局部变量只在其定义的代码块内有效,而成员变量在整个类中有效。 类还可以包含构造方法(constructor),这是具有...
这里的关键在于`m_instance`成员变量的初始化是在类加载时完成的,因此无论何时调用`getInstance`方法都会返回同一个实例。 #### 五、登记式单例详解 登记式单例是一种更高级的单例模式,它可以管理多个单例类。...
此外,还涉及了bean的生命周期状态,如单例bean的实例化时机以及原型bean的每次请求都会创建新实例等。 2. **Spring_0700_IOC_Collections**: 在这个主题中,我们探讨了如何在Spring配置中处理集合类型属性,如...
如果 你希望改变一个已经初始化的对象的行为,你怎么办?或者,你希望继承许多类的行为,改怎么办?前一个,只能在于运行时完成,后者显然时可能的,但是可能会导致产生大量的不同的类—可怕的事情。 问题
首先,任何静态成员和对象会在首次创建类的实例或首次访问类的静态成员时初始化,这个过程只发生一次。随后,非静态成员和对象按照它们在类中的声明顺序初始化,最后执行构建器,完成整个对象的初始化过程。 例如,...
- 初始化Camera实例和预览显示的SurfaceView。 - 设置预览回调,处理每一帧数据,可能包括编码和发送到服务器等操作。 - 创建MediaPlayer对象,设置视频源,准备并开始播放。 四、额外注意事项 1. 权限请求:确保...
这一部分讲解了对象在创建时如何使用初始化列表来初始化成员变量,以确保它们在构造函数执行之前具有正确的初始值。初始化列表可以避免不必要的默认构造和赋值操作,提高代码效率。 2. **18 类和对象-封装-访问...
3. USART初始化:通过调用USART_Init()函数,设定波特率、数据帧格式、校验位和停止位。例如,设置为9600bps,8N1(无校验,1个停止位)。 4. 串口使能:最后,调用USART_Cmd(USART1, ENABLE)使能串口。 发送数据:...
构造代码块通常用于初始化对象的成员变量,它的执行时机早于任何方法和构造函数。这样的设计允许我们在不创建额外构造函数的情况下,为所有实例提供统一的初始化步骤。构造代码块的语法如下: ```java { // 初始化...
本文将深入探讨在WinCE下如何创建、使用及调试DLL,并结合VSC++2005开发环境进行实例讲解。 1. **DLL的基础概念** - DLL是包含可由多个程序同时使用的函数和数据的库。 - 它们在运行时被加载到进程的地址空间,而...
通过C++学习课件,你可以系统地学习以上这些知识点,并通过实例练习加深理解。这些课件通常会包含详细的讲解、示例代码、习题和解答,帮助你在实践中掌握C++编程技能。无论你是初学者还是希望提升编程能力的开发者,...
这为开发者提供了一个良好的时机去初始化特定的玩家相关资源或设置。 #### 二、SlateUI基本知识 ##### 2.1 创建项目 Slate 是虚幻引擎中用于构建用户界面的框架。创建一个带有Slate UI的新项目时,首先需要确保你...
通过一个静态内部类持有单例实例,内部类的加载时机延迟到第一次调用`getInstance()`时,实现了懒加载,同时也保证了线程安全,因为类加载是线程安全的。这种方式避免了同步开销,但增加了类加载的复杂性。 5. **...
静态内部类保证了类加载的时机,从而确保单例的唯一性,线程安全且延迟初始化。 ```java public class Singleton { private Singleton() {} private static class SingletonHolder { private static final ...