任何一个对象都是先获得.class文件然后类加载器加载?
发布网友
发布时间:2022-04-26 21:05
我来回答
共2个回答
热心网友
时间:2023-11-02 05:38
new 反射newIntence 走的流程应该是一样的,但是就是字节码解释加载时机不同。
java运行简单过程(编译、解释和执行)。
两者往往都是提前编译的(反射也有动态编译的)
new是事前解释,直接执行。
反射是运行期动态解释,然后才执行。
最直接的区别
>>new 不需要知道类的路径,而反射需要类的路径。
原因是因为new的类已经在自己的命名空间里面。JVM在执行一个java程序时,
类加载器会把需要的字节码都装载到自己的命名空间,不需要再次加载。性能上比反射要快。
反射是因为用户不确定加载哪个类,而想运行过程中加载需要类的方式。
类加载器在运行过程加载java字节码,并布局运行程序的内存空间,然后执行。它更灵活。
参考:
http://blog.csdn.net/junhua198310/article/details/1756484
热心网友
时间:2023-11-02 05:39
1、所有的类都是通过ClassLoader.findClass(String name)与loadClass(String name)来查找和装载的
2、同一ClassLoader不能有重名的类,但不同的ClassLoader可以有重名的类,由不同的ClassLoader装载相同名称相同字节码的类是不同的
3、newInstance方法底层也要通过反射机制找到无参数构造函数创建对象,new也一样,只不过它是jvm认识的操作而已,你可以把它看作一段调用反射机制的代码的简写
热心网友
时间:2023-11-02 05:38
new 反射newIntence 走的流程应该是一样的,但是就是字节码解释加载时机不同。
java运行简单过程(编译、解释和执行)。
两者往往都是提前编译的(反射也有动态编译的)
new是事前解释,直接执行。
反射是运行期动态解释,然后才执行。
最直接的区别
>>new 不需要知道类的路径,而反射需要类的路径。
原因是因为new的类已经在自己的命名空间里面。JVM在执行一个java程序时,
类加载器会把需要的字节码都装载到自己的命名空间,不需要再次加载。性能上比反射要快。
反射是因为用户不确定加载哪个类,而想运行过程中加载需要类的方式。
类加载器在运行过程加载java字节码,并布局运行程序的内存空间,然后执行。它更灵活。
参考:
http://blog.csdn.net/junhua198310/article/details/1756484
热心网友
时间:2023-11-02 05:39
1、所有的类都是通过ClassLoader.findClass(String name)与loadClass(String name)来查找和装载的
2、同一ClassLoader不能有重名的类,但不同的ClassLoader可以有重名的类,由不同的ClassLoader装载相同名称相同字节码的类是不同的
3、newInstance方法底层也要通过反射机制找到无参数构造函数创建对象,new也一样,只不过它是jvm认识的操作而已,你可以把它看作一段调用反射机制的代码的简写