虚拟机加载类的途径:
1、Dog dog = new Dog();
这个动作会导致常量池的解析,Dog类被隐式装载。
如果当前ClassLoader无法找到Dog,则抛出NoClassDefFoundError。
2、Class clazz = Class.forName(“Dog”);
Object dog =clazz.newInstance();
通过反射加载类型,并创建对象实例
如果无法找到Dog,则抛出ClassNotFoundException。
3、Class clazz = classLoader.loadClass(“Dog”);
Object dog =clazz.newInstance();
通过反射加载类型,并创建对象实例
如果无法找到Dog,则抛出ClassNotFoundException。
那么,1和2和3究竟有什么区别呢?分别用于什么情况呢?
1和2使用的类加载器是相同的,都是当前类加载器。(即:this.getClass.getClassLoader)。
3由用户指定类加载器。
如果需要在当前类路径以外寻找类,则只能采用第3种方式。第3种方式加载的类与当前类分属不同的命名空间。
当前类加载器命名空间对其不可见。当然,如果被加载类的超类对于当前类命名空间可见的话,则可以进行强制转型。
第1和第2种情况区别不大。如果,Dog类在编译时无法得到,则使用第2种方式。
另外,第1种和第2种都会导致类被初始化,即:执行类的静态初始化语句,而第3种情况不会。
另外注意,第1种抛出Error,第2、3种抛出Exception,它们分属于不同的异常/错误分支。
-----------------------------
对象实例化方式:
1、new Dog();
2、clazz.newInstance();或者clazz.getConstructor(...).newInstance(...);
3、Object.clone();//通过本地方法进行复制
4、反序列化
转载http://liliugen.iteye.com/blog/259106
分享到:
相关推荐
在Unity中,AssetBundle(简称AB包)是一种资源管理机制,它允许开发者将游戏资源如模型、纹理、音频等单独打包,按需加载,从而实现动态内容分发和优化性能。本资源将深入探讨Unity3D AB包的打包与不同加载方式。 ...
NT式驱动三种加载方式详解 本文主要对 NT 式驱动的三类加载方式进行了详细的介绍:工具加载、手动加载、代码加载。下面是对每种加载方式的详细解释: 工具加载方式 工具加载方式是使用 Driver Monitor 工具来加载...
Java中的类加载器系统主要包括以下几种类型的类加载器: 1. **Bootstrap ClassLoader**(启动类加载器):它是整个类加载器系统的根,负责加载存放在`<JDK_HOME>\lib`目录中的核心类库。该类加载器没有父类加载器,...
除了这三种预定义的类加载器,Java还提供了一种特殊的**线程上下文类加载器(Thread Context ClassLoader)**,它允许在特定线程中加载类时使用非默认的类加载器。这在插件框架和OSGi等动态部署环境中尤其有用。 ...
根据Java规范,以下几种情况必须对类进行初始化: 1. **遇到特定字节码指令**: - 当遇到 `new` 指令时,即使用 `new` 关键字实例化对象。 - 使用 `getstatic` 或 `putstatic` 指令读取或设置一个类的静态字段。 ...
总的来说,ModRunJava 类加载器提供了一种新的、灵活的方式来管理和运行Java应用程序,特别适合于敏捷开发和持续集成的场景,它简化了依赖管理,提升了开发效率,同时也为构建更复杂、可扩展的应用提供了可能。
其中,`Class.forName()`方法有两种重载形式,第一个只接受类名作为参数,第二个允许控制是否初始化类以及指定类加载器。如果只使用一个参数的`Class.forName()`方法,那么它会默认使用调用者的类加载器并初始化类。...
【加载地图数据的几种方法】 在地理信息系统(GIS)中,加载地图数据是核心操作之一,确保用户能够查看和分析所需的地理信息。本文将详细探讨如何在ArcEngine(AE)环境中加载个人数据库,特别是保存在Microsoft ...
### comboBox加载数据的几种方式 在用户界面设计中,`comboBox`是一种常见的控件类型,用于展示下拉列表供用户选择。它广泛应用于各种应用程序之中,包括但不限于桌面应用、网页应用等。`comboBox`能够根据不同的...
该文件是JVM中关于类加载机制的知识整理的思维导图,包括类加载机制概述、类加载的生命周期、加载时机、加载过程、类加载、类的初始化和实例化等几个大方面进行了讲解,其中类加载中还对JVM三种预定义类加载器进行了...
2. **类加载器及类加载器的委托机制**:JVM中有三种内置的类加载器,分别是启动类加载器、扩展类加载器和应用类加载器。此外,还可以自定义类加载器。类加载器之间遵循委托机制,即下级类加载器先请求上级类加载器...
类的重新加载可以通过以下几种方式实现: 1. **JRebel**:这是一个流行的第三方工具,可以实时地更新和重加载类,极大地提高了开发效率。它通过插入自己的类加载器来实现类的热部署。 2. **Java Instrumentation ...
ArcEngine 可加载的数据的几种方法 ArcEngine 是一个功能强大且广泛应用的 GIS 软件开发平台,它可以加载多种类型的数据,包括 Shapefile 数据、栅格数据、点数据、经纬度等数据格式。下面我们将详细介绍 ArcEngine...
类加载通常发生在以下几种情况: 1. 当Java程序首次引用某个类时,JVM会触发该类的加载。 2. 当使用反射API(如Class.forName())来加载类时。 3. 当动态代理生成代理类时。 4. 当JVM启动并执行主类时。 二、类加载...
根据Java虚拟机规范的规定,在以下几种情况下必须对类进行初始化: 1. **当遇到`new`、`getstatic`、`putstatic`或`invokestatic`这四条字节码指令时**,例如使用`new`关键字实例化对象、读取或设置一个类的静态...
除了这三种系统类加载器,还可以自定义类加载器,满足特定的加载需求,例如加载网络上的类或加密后的类文件。 类加载器的代理模式体现在父子加载器的关系上。当一个类加载器尝试加载类时,它会先委托给父类加载器,...
本文将深入探讨几种主流的Android加载网络图片的方法,并通过实践演示其使用。 1. **AsyncTask** AsyncTask是Android提供的一种轻量级的异步处理类,可以在后台执行耗时操作,然后在UI线程更新结果。对于简单的...
主要包含以下几种类型的类加载器: 1. **启动类加载器(Bootstrap ClassLoader)**:这是最基础的类加载器,负责加载JDK中的核心类库,如`java.lang`包下的类。这个类加载器没有父类加载器,因为它本身是由C++编写...
在Java中,类加载器的设计采用了一种称为“双亲委派模式”(Parent Delegation Model)的机制,这种模式确保了Java类的加载能够遵循既定的规则,从而保证了类加载的安全性和一致性。 当我们谈论Java类加载器时,...
初始化通常会在以下几种情况下发生: - 使用`new`关键字实例化对象。 - 访问或修改一个类的静态字段(除非该字段已被编译器优化为常量并存储在常量池中)。 - 调用一个类的静态方法。 - 使用反射机制来强制加载某个...