永发信息网

java下Class.forName的作用是什么,为什么要使用它

答案:1  悬赏:50  手机版
解决时间 2021-04-14 20:01
  • 提问者网友:放下
  • 2021-04-14 13:57
java下Class.forName的作用是什么,为什么要使用它
最佳答案
  • 五星知识达人网友:玩世
  • 2021-04-14 15:07
Class.forName(xxx.xx.xx)返回的是一个类
首先你要明白在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的(和new不一样,要分清楚)。
Aa=(A)Class.forName("pacage.A").newInstance();这和你Aa=newA();
是一样的效果。
关于补充的问题
答案是肯定的,jvm会执行静态代码段,你要记住一个概念,静态代码是和class绑定的,class装载成功就表示执行了你的静态代码了。而且以后不会再走这段静态代码了。
Class.forName(xxx.xx.xx)返回的是一个类
Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段
动态加载和创建Class对象,比如想根据用户输入的字符串来创建对象
Stringstr=用户输入的字符串
Classt=Class.forName(str);
t.newInstance();
classc=Class.forName(Example);
factory=(ExampleInterface)c.newInstance();
其中ExampleInterface是Example的接口,可以写成如下形式:
StringclassName="Example";
classc=Class.forName(className);
factory=(ExampleInterface)c.newInstance();
进一步可以写成如下形式:
StringclassName=readfromXMlConfig;//从xml配置文件中获得字符串
classc=Class.forName(className);
factory=(ExampleInterface)c.newInstance();
从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载javaAPI的那个加载器。
现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。
最后用最简单的描述来区分new关键字和newInstance()方法的区别:
newInstance:弱类型。低效率。只能调用无参构造。
new:强类型。相对高效。能调用任何public构造。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯