面试官:类的加载方式

作者: 秦时的明月夜 | 来源:发表于2019-09-21 16:28 被阅读0次

类的加载方式

1、隐式加载 -new
2、显式加载 -ClassLoader.loadClassClass.forName
区别:
方式1:
new 通过关键字 然后通过不同的构造器直接创建实例。
如:new String() ,new String("test")
方式2:
需要加载.class文件获取Class对象,通过Class对象,获取构造器,然后调用newInstance方法创建对象实例。

public class Test2 {
    public static void main(String[] args) {
        try {
            //class.forName 加载方式
            Class<?> classForName = Class.forName("com.javalearning.TestClass");
            Constructor<?> constructor1 = classForName.getConstructor(String.class);
            constructor1.newInstance("加载方式Class.forName:有一个参数的构造器");

            //loader加载方式
            ClassLoader classLoader = ClassLoader.getSystemClassLoader();
            Class<?> classLoaderClass = classLoader.loadClass("com.javalearning.TestClass");
            Constructor<?> constructor2 = classLoaderClass.getConstructor(String.class);
            constructor2.newInstance("加载方式ClassLoader:有一个参数的构造器");
        }catch (Exception e){

        }
    }
}

ClassLoader.loadClass和Class.forName的区别

Class的装载包括3个步骤:加载(loading),连接(link),初始化(initialize
参考:类的加载过程

Class.forName

Class.forName源码
forName0 第二个参数initialize初始话 这里参数是true说明是初始化过的,因此,静态代码快和静态变量是会被执行和初始话的。

ClassLoader.loadClass

ClassLoader.loadClass源码
第二参resolve,注释中说明 这个参数 代表是否链接(类加载过程中的链接过程)
ClassLoader.loadClass在加载类的过程中只走了第一步。

测试:

image.png image.png
image.png

总结:

Class.forName得到的class是已经初始化。
ClassLoader.loadeClass得到的class是还没有链接的。

相关文章

  • 面试官:类的加载方式

    类的加载方式 1、隐式加载 -new2、显式加载 -ClassLoader.loadClass和Class.fo...

  • java类的加载机制

    概念 类的生命周期 类加载器 jvm类加载机制 类的加载方式 双亲委派模式

  • JVM - ClassLoader

    1. 概述 类加载器实际定义了类的namespace。 2.类加载方式之当前类加载器和指定类加载器 类的加载只有两...

  • ClassLoader学习

    JVM 类加载器常用的三种方式 1. 默认方式 之双亲委托模式 子类加载器在加载一个类时,会让父类先加载。如果父类...

  • 三、类加载试题

    (1)阿里的面试官问我,可以不可以自己写个String类 答案:不可以,因为 根据类加载的双亲委派机制,会去加载父...

  • java 类加载过程

    上次阿里面试,面试官问我 类加载过程,脑子有印象,就是说不清,这次整理下 类加载的思维导图 1.加载 1.通过一个...

  • 类加载器获取输入流/路径

    加载类得到路径的方式 getClassLoader():指定到类加载的目录,getResource()用户获取资源...

  • iOS---11---类和分类加载

    [toc] 类的加载 非懒加载类在运行时处理,懒加载编译期确定.区分:方式为load方法,把所有类的加载提前.看代...

  • 阿里、华为、腾讯Java技术面试题精选

    JVM的类加载机制是什么?有哪些实现方式? 类加载机制: 类的加载指的是将类的.class文件中的二进制数据读入到...

  • 精选11道Java技术面试题并有答案(包含部分阿里和华为的面试题

    1. JVM的类加载机制是什么?有哪些实现方式? 类加载机制: 类的加载指的是将类的.class文件中的二进制数据...

网友评论

    本文标题:面试官:类的加载方式

    本文链接:https://www.haomeiwen.com/subject/xxqeuctx.html