- 浏览: 220511 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
zzhyq:
有没有后台是ASHX 的呀
Ext.tree.TreePanel -
693593336:
谢谢作者分享,正好用上
Ext.tree.TreePanel -
greatwqs:
提供一个下载的demo不是更好
基于servlet的 Freemarker Demo
专栏合集(一):Java深度历险 pdf已上传115 ebook
1. blog learning .... 深入探讨 Java 类加载器
blog.... 写道
类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。
jdk 1.6 写道
Class
类的实例表示正在运行的 Java 应用程序中的类和接口。Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
以下示例使用 Class 对象来显示对象的类名:
void printClassName(Object obj) {
System.out.println("The class of " + obj +
" is " + obj.getClass().getName());
}
还可以使用一个类字面值(JLS Section 15.8.2)来获取指定类型(或 void)的 Class 对象。例如:
System.out.println("The name of class Foo is: "+Foo.class.getName());
以下示例使用 Class 对象来显示对象的类名:
void printClassName(Object obj) {
System.out.println("The class of " + obj +
" is " + obj.getClass().getName());
}
还可以使用一个类字面值(JLS Section 15.8.2)来获取指定类型(或 void)的 Class 对象。例如:
System.out.println("The name of class Foo is: "+Foo.class.getName());
2011-10-1 update
以下命令可以查看,JVM是如何将二进制文件(*.class)载入内存的。
java -verbose ABClient
测试代码:
public class A{ public void printInfo(){ System.out.println(" class A printInfo..."); } } public class B{ public void printInfo(){ System.out.println(" class B printInfo..."); } } public class ABClient{ public void printInfo(){ System.out.println(" class ABClient printInfo..."); } public static void main(String args[]){ new A().printInfo(); //只有new 出是实例的时候 ,才会被load 进 内存中。声明则不会。 B b; } }
结果:
[Loaded java.security.cert.Certificate from shared objects file] [Loaded ABClient from file:/E:/coding/20111001_java/classLoader/] ---------static block code loader finished------------ [Loaded A from file:/E:/coding/20111001_java/classLoader/] class A printInfo... [Loaded java.util.AbstractList$Itr from shared objects file]
###初始化对象的3种方法:
为ABClient类添加静态代码块:
static{ System.out.println("========run static code========"); }
public class InstanceObject{ public void printTest(String info){ System.out.println("----------run----------:" + info); } public static void main(String args[]){ // 隐式 实例化方法 InstanceObject io = new InstanceObject(); io.printTest("隐式实例化"); //显式 实例化方法 //1 Class.forName try{ Class clazz = Class.forName("InstanceObject"); InstanceObject io2 = (InstanceObject)clazz.newInstance(); io2.printTest("显式实例化 forName"); }catch(java.lang.InstantiationException ie){ ie.printStackTrace(); }catch(java.lang.ClassNotFoundException cnfe){ cnfe.printStackTrace(); }catch(java.lang.IllegalAccessException iae){ iae.printStackTrace(); } //2 ClassLoader try{ ClassLoader clazzLoader = InstanceObject.class.getClassLoader(); System.out.println("begin to load the ABClient class"); Class clazz2 = clazzLoader.loadClass("ABClient"); //静态区域块 是在第一次实例化时才被载入的。 System.out.println("begin to instance the ABClient object"); ABClient abObject = (ABClient)clazz2.newInstance(); }catch(java.lang.InstantiationException ie){ ie.printStackTrace(); }catch(java.lang.ClassNotFoundException cnfe){ cnfe.printStackTrace(); }catch(java.lang.IllegalAccessException iae){ iae.printStackTrace(); } //API中 获取 Class 实体的方法有2种, 推荐使用 类名.class ;另外一种是instance.getClass() } }
测试Class.forName 第二个参数为 true or false时的 载入静态代码块的区别。
测试结果为 无论是true还是false,对象实例化之后静态代码块还是没有被执行,在实例调用某个方法后才执行。这点有待验证。
至于 classLoader 载入.class文件后,静态代码块不会被执行;初始化(newInstance)后,静态代码块被执行,且仅执行一次。
发表评论
-
Singletons and lazy loading
2011-09-26 19:47 923The Java Memory Model # ... -
JVM blogs
2011-09-14 21:40 476话说是 【JVM详解的专题】,很多文章的差不多的,有的详 ... -
effective Java _Generic
2011-09-12 12:03 0#23 -
Study Linkinginginginginginginging
2011-08-27 10:42 746#1 java 工程和类等路径汇总 #2 让Apac ... -
How to send Email
2011-08-26 15:32 6101.java mail 使用介绍 2.Java ... -
Java_Try_Finally
2011-07-18 11:51 653public class TestTryCatch { ... -
Java Class ClassLoader
2011-07-15 17:05 1038下午在看《Java 深度历险》,对Class & ... -
关键字 final & transient
2011-06-08 16:49 973final 详见: http://java.chinaitl ... -
课程设计3
2010-01-04 14:09 783题目3:动态分区式存储管理的存储分配和回收 一、设计目的 ... -
课程设计1
2010-01-04 14:24 754采用的是C++语言编写的,但PCB的数据结构是符合要求的。 ... -
os课程设计后感
2010-01-04 14:48 547今天终于把操作系统的实验给终结了。基本要求算是符合了,可能表 ... -
java作业01
2010-03-06 16:02 669package homework01; public cla ... -
Java作业02
2010-03-11 14:22 796package homework02; import jav ... -
File函数返回当前路径
2010-03-12 19:37 675package netWorkMoreThreadCopy; ... -
多线程文件复制(界面)1
2010-03-12 23:45 946package netWorkMoreThreadCopy; ... -
Java IO 转摘
2010-03-15 00:26 518java中的io中的(input/output)str ... -
java作业03
2010-03-17 00:59 705package homework03; import jav ... -
Java作业
2010-03-17 01:19 646package homework03;import java. ... -
java作業3
2010-03-18 18:36 597package homework03;/** 首先编写一个抽象 ... -
java作业04(第六章 字符串和正则表达式)
2010-03-20 00:01 1090有点无聊就先把第六章的两道贼简单的题目给做了。 packa ...
相关推荐
System.out.println("parent class loader: " + cl.getParent()); cl = cl.getParent(); } ``` 这段代码会打印出当前的类加载器以及它们的父加载器。通常,你会看到AppClassLoader(系统类加载器)、...
最后,我们可以参考博客文章《Ejb class loader》(链接:https://sbiigu.iteye.com/blog/323180)来获取更具体的实现细节和技术讨论。该博客可能包含了作者在实际工作中遇到的问题、解决方案以及对EJB类加载器的...
创建自定义类加载器通常需要继承`java.lang.ClassLoader`,重写`findClass()`或`loadClass()`方法,从而控制类的查找和加载过程。这使得开发者能够在运行时根据需要加载特定的类,比如从网络、数据库或其他非传统...
### 动态类加载在Java虚拟机中的应用 #### 概述 动态类加载是Java虚拟机(JVM)的一项核心特性,它为Java平台带来了强大的功能:即能够在运行时安装软件组件。这一机制不仅提高了系统的灵活性,还优化了资源管理。...
遇到类冲突、类找不到等问题时,可通过设置JVM参数`-verbose:class`来查看类加载的详细信息,或者使用JDK的`jmap -histo`命令分析内存中的类加载情况。 8. **线程安全** 类加载过程中的某些步骤,如加载和初始化...
应用服务器类加载器 共享库 类加载器问题诊断 资源及参考资料
- **System Class Loader**:也称为应用程序类加载器,加载classpath环境变量指定的类或jar包,通常用于加载用户的应用程序类。 类加载器遵循以下原则: - **代理原则**:类加载器在尝试加载类时,首先会委托其父...
【JCL(Jar Class Loader)】是一个开源项目,它的核心功能是允许程序在运行时动态地从Jar文件或其他数据源加载Java类。JCL的设计理念是可配置、动态且可扩展,这使得开发者可以根据需求定制类加载的行为,适应不同...
WAS 中类加载器是一个具有父子关系的分层结构,包括 JVM Class loader、WebSphere Extensions Class loader、WebSphere lib/app Class loader、WebSphere "server" Class loader 和 Application Module Class Loader...
概述 JCL是可配置,动态和可扩展的自定义类加载器,可直接从Jar文件和其他来源加载Java类。 这样做的动机是创建隔离的类加载器,该类加载器可以轻松地与IoC框架(如Spring)和Web应用程序集成。...
Class Loader 是一个可视化的基本 .net 2.0 软件。 使用类加载器,您可以在没有命令提示符的情况下执行 .class 文件。 只需打开类文件!
通常,`Class Loader`有两种类型:`Boot Class Loader`和`Path Class Loader`。`Boot Class Loader`用于加载系统框架类,而`Path Class Loader`则用于加载应用程序自身的类文件。 **1.2 FART的工作机制** - **获取...
在C++编程中,动态类加载(Dynamic Class Loading)是一种高级技术,允许程序在运行时加载未知或在编译时不可用的类。这通常用于实现插件系统、模块化设计或者灵活的软件架构。开源的C++动态类加载机制为开发者提供...
如果类还未加载,它会通过当前线程的上下文类加载器(Context Class Loader)来加载。 2. **类初始化**:除了加载类,`forName`还会执行类的初始化。这意味着静态块会被执行,静态变量会被初始化。 然而,`...
例如,我们可以使用 WebSphere Extensions Class loader 来加载 WebSphere 的一些 runtime 类,而使用 Application Module Class Loader 来加载 J2EE 应用程序。 * 使用 OSGi 框架:OSGi 框架提供了一种方式来解决 ...
// from the non-null parent class loader } if (c == null) { // If still not found, then invoke findClass in order // to find the class. long t1 = System.nanoTime(); c = findClass(name); ... }...
### Java自定义类加载器(Class Loader)详解 #### 一、引言 在Java语言中,类加载机制是其动态特性的核心之一。通过类加载器(Class Loader),Java程序能够在运行时根据需要加载所需的类,从而实现高度的灵活性...