`

几种类加载方式的区别

阅读更多
虚拟机加载类的途径:

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、反序列化 
分享到:
评论

相关推荐

    Unity3D AB包的几种不同加载方式

    在Unity中,AssetBundle(简称AB包)是一种资源管理机制,它允许开发者将游戏资源如模型、纹理、音频等单独打包,按需加载,从而实现动态内容分发和优化性能。本资源将深入探讨Unity3D AB包的打包与不同加载方式。 ...

    NT式驱动三种加载方式详解(工具+手动+代码)

    NT式驱动三种加载方式详解 本文主要对 NT 式驱动的三类加载方式进行了详细的介绍:工具加载、手动加载、代码加载。下面是对每种加载方式的详细解释: 工具加载方式 工具加载方式是使用 Driver Monitor 工具来加载...

    深入研究Java类加载机制 深入研究Java类加载机制

    Java中的类加载器系统主要包括以下几种类型的类加载器: 1. **Bootstrap ClassLoader**(启动类加载器):它是整个类加载器系统的根,负责加载存放在`<JDK_HOME>\lib`目录中的核心类库。该类加载器没有父类加载器,...

    Java类加载原理解析

    除了这三种预定义的类加载器,Java还提供了一种特殊的**线程上下文类加载器(Thread Context ClassLoader)**,它允许在特定线程中加载类时使用非默认的类加载器。这在插件框架和OSGi等动态部署环境中尤其有用。 ...

    java类加载机制

    根据Java规范,以下几种情况必须对类进行初始化: 1. **遇到特定字节码指令**: - 当遇到 `new` 指令时,即使用 `new` 关键字实例化对象。 - 使用 `getstatic` 或 `putstatic` 指令读取或设置一个类的静态字段。 ...

    ModRunJava类加载器可以直接从Maven存储库加载并运行类

    总的来说,ModRunJava 类加载器提供了一种新的、灵活的方式来管理和运行Java应用程序,特别适合于敏捷开发和持续集成的场景,它简化了依赖管理,提升了开发效率,同时也为构建更复杂、可扩展的应用提供了可能。

    Java类加载器.pdf

    其中,`Class.forName()`方法有两种重载形式,第一个只接受类名作为参数,第二个允许控制是否初始化类以及指定类加载器。如果只使用一个参数的`Class.forName()`方法,那么它会默认使用调用者的类加载器并初始化类。...

    加载地图数据的几种方法

    【加载地图数据的几种方法】 在地理信息系统(GIS)中,加载地图数据是核心操作之一,确保用户能够查看和分析所需的地理信息。本文将详细探讨如何在ArcEngine(AE)环境中加载个人数据库,特别是保存在Microsoft ...

    comboBox 加载数据的几种方式

    ### comboBox加载数据的几种方式 在用户界面设计中,`comboBox`是一种常见的控件类型,用于展示下拉列表供用户选择。它广泛应用于各种应用程序之中,包括但不限于桌面应用、网页应用等。`comboBox`能够根据不同的...

    java类加载机制.xmind

    该文件是JVM中关于类加载机制的知识整理的思维导图,包括类加载机制概述、类加载的生命周期、加载时机、加载过程、类加载、类的初始化和实例化等几个大方面进行了讲解,其中类加载中还对JVM三种预定义类加载器进行了...

    JVM实战-JVM类加载机制案例分析

    2. **类加载器及类加载器的委托机制**:JVM中有三种内置的类加载器,分别是启动类加载器、扩展类加载器和应用类加载器。此外,还可以自定义类加载器。类加载器之间遵循委托机制,即下级类加载器先请求上级类加载器...

    Java类重新加载101对象类和类加载器Java开发Jav

    类的重新加载可以通过以下几种方式实现: 1. **JRebel**:这是一个流行的第三方工具,可以实时地更新和重加载类,极大地提高了开发效率。它通过插入自己的类加载器来实现类的热部署。 2. **Java Instrumentation ...

    ArcEngine 可加载的数据的几种方法

    ArcEngine 可加载的数据的几种方法 ArcEngine 是一个功能强大且广泛应用的 GIS 软件开发平台,它可以加载多种类型的数据,包括 Shapefile 数据、栅格数据、点数据、经纬度等数据格式。下面我们将详细介绍 ArcEngine...

    类加载器加载过程.rar

    类加载通常发生在以下几种情况: 1. 当Java程序首次引用某个类时,JVM会触发该类的加载。 2. 当使用反射API(如Class.forName())来加载类时。 3. 当动态代理生成代理类时。 4. 当JVM启动并执行主类时。 二、类加载...

    JAVA类加载机制与动态代理

    根据Java虚拟机规范的规定,在以下几种情况下必须对类进行初始化: 1. **当遇到`new`、`getstatic`、`putstatic`或`invokestatic`这四条字节码指令时**,例如使用`new`关键字实例化对象、读取或设置一个类的静态...

    深入探讨 Java 类加载器

    除了这三种系统类加载器,还可以自定义类加载器,满足特定的加载需求,例如加载网络上的类或加密后的类文件。 类加载器的代理模式体现在父子加载器的关系上。当一个类加载器尝试加载类时,它会先委托给父类加载器,...

    Android几种加载网络图片的方法Demo

    本文将深入探讨几种主流的Android加载网络图片的方法,并通过实践演示其使用。 1. **AsyncTask** AsyncTask是Android提供的一种轻量级的异步处理类,可以在后台执行耗时操作,然后在UI线程更新结果。对于简单的...

    类加载说明.pdf

    主要包含以下几种类型的类加载器: 1. **启动类加载器(Bootstrap ClassLoader)**:这是最基础的类加载器,负责加载JDK中的核心类库,如`java.lang`包下的类。这个类加载器没有父类加载器,因为它本身是由C++编写...

    classloader类加载器_基于java类的加载方式详解

    在Java中,类加载器的设计采用了一种称为“双亲委派模式”(Parent Delegation Model)的机制,这种模式确保了Java类的加载能够遵循既定的规则,从而保证了类加载的安全性和一致性。 当我们谈论Java类加载器时,...

    类加载器和双亲委派模型加载类、类的加载优先级的详解.docx

    初始化通常会在以下几种情况下发生: - 使用`new`关键字实例化对象。 - 访问或修改一个类的静态字段(除非该字段已被编译器优化为常量并存储在常量池中)。 - 调用一个类的静态方法。 - 使用反射机制来强制加载某个...

Global site tag (gtag.js) - Google Analytics