Class.forName()用法及与new区别 详解

平时开发中我们经常会发现:用到Class.forName()方法。为什么要用呢? 下面分析一下:

主要功能Class.forName(xxx.xx.xx)返回的是一个类Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段

在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。

Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如:class c = Class.forName(“Example”);factory = (ExampleInterface)c.newInstance();

其中ExampleInterface是Example的接口,可以写成如下形式:String className = “Example”;class c = Class.forName(className); factory = (ExampleInterface)c.newInstance();

进一步可以写成如下形式:String className = readfromXMlConfig;//从xml 配置文件中获得字符串class c = Class.forName(className); factory = (ExampleInterface)c.newInstance();

上面代码已经不存在Example的类名称,它的优点是,无论Example类怎么变化,上述代码不变,甚至可以更换Example的兄弟类Example2 , Example3 , Example4……,只要他们继承ExampleInterface就可以。

从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。 而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载 java API的那个加载器。

现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。

二.new 和Class.forName()有什么区别? 其实上面已经说到一些了,这里来做个总结: 首先,newInstance( )是一个方法,而new是一个关键字; 其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用 new关键字生成对象没有这个限制。 简言之:newInstance(): 弱类型,低效率,只能调用无参构造。new: 强类型,相对高效,能调用任何public构造。Class.forName(“”)返回的是类。Class.forName(“”).newInstance()返回的是object

(0)

相关推荐

  • yum和apt-get的区别详解

    yum和apt-get的区别 一般来说著名的linux系统基本上分两大类: 1.RedHat系列:Redhat.Centos.Fedora等 2.Debian系列:Debian.Ubuntu等 Red ...

  • Linux中内存buffer和cache的区别详解

    细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法 ...

  • Linux中RedHat CentOS Ubuntu Fedora的区别详解

    Linux中RedHat CentOS Ubuntu Fedora的区别详解

  • linux下普通文件和目录文件区别详解

    文件权限一般可认为是0 123 456 789,一共十位: 0:表示该文件的文件类型.Windows里面是使用了一种文件关联的技术,通过扩展名来关联相应的应用程序,使得双击某个文件,就能达到调用相应的 ...

  • Linux下help、man、info命令区别详解

    --help.man.info三个指令均为Linux下的帮助指令格式,三个指令略有区别. 操作方法 01 help命令用于显示shell内部的帮助信息.help命令只能显示shell内部的命令帮助信息 ...

  • IDE硬盘和SATA硬盘有什么区别详解

    SATA硬盘与IDE硬盘最大的区别在于接口标准.SATA硬盘是符合SATA接口标准的硬盘,IDE硬盘是符合PATA接口标准的硬盘. SATA硬盘与IDE硬盘在内部的机械结构和工作原理基本是一样的,差别 ...

  • 关于云主机和VPS的区别详解

    一,我们先来了解下云主机和VPS的详细区别 1.虚拟主机.VPS和云主机 共享主机也称虚拟主机,从互联网诞生至今,大部分站长都是从"共享主机"(shared hosting)开始学 ...

  • select into from与insert into select区别详解

    可能第一次接触select...into...from...和insert into...select...有很多人都会误解, 从表面上看都是把相关信息查询出来,然后添加到一个表里,其实还远远没有这么 ...

  • 网线制作中直通线与交叉线的区别详解

    关于网线的制作,很多书对细节表述的不太清楚,容易引起歧义,下面我们一起来仔细的了解一下. 网线的标准顺序 01 网线有两种标准顺序,分别是T568A和T568B: 02 T568A标准顺序从左至右依次 ...