首页 > 试题广场 >

Class.forName()方法有什么作用?

[问答题]
初始化参数所指定的类,并返回该类所对应的对象
发表于 2018-06-11 06:52:31 回复(0)
更多回答
在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。 从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证: 1、这个类已经加载; 2、这个类已经连接了。 而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载 java API的那个加载器。
发表于 2016-03-07 08:40:21 回复(8)
作用是加载一个类,forName().newinstance() 和new的作用相当,但是不同的是,将创建一个对象分成两部之后,灵活度就上升了,原因:Class.forName(ClassName)中的ClassName可以是代指,我们前面可以定义String ClassName =“需要的类”;因此在维护修改代码的时候,只需要单单修改一步就可以了,在代码维护修改方面优势很明显。代码量上升了,但更适合于工厂模式了。
感觉自己理解的也不是很深刻,觉得我说错了的可以指点我一下,不甚感激!
发表于 2017-04-11 19:48:03 回复(1)
这是反射机制,可以通过这个来动态加载类
发表于 2015-12-07 10:48:51 回复(1)

publicstatic Class<?> forName(String className)

Returns the Class object associated withthe class or interface with the given string name. Invokingthis method is equivalent to:

Class.forName(className,true, currentLoader)

where currentLoader denotes the definingclass loader of the current class.

For example, thefollowing code fragment returns the runtime Class descriptor for theclass named java.lang.Thread:

Class t =Class.forName("java.lang.Thread")

A call to forName("X") causes theclass named X to beinitialized.

Parameters:

className - the fully qualifiedname of the desired class.

Returns:

the Class object for the classwith the specified name.

从官方给出的API文档中可以看出:

Class.forName(className)实际上是调用Class.forName(className,true, this.getClass().getClassLoader())。第二个参数,是指Class被loading后是不是必须被初始化。可以看出,使 用Class.forName(className)加载类时则已初始化。

所以Class.forName(className)可以简单的理解为:获得字符串参数中指定的类,并初始化该类。

发表于 2018-09-22 19:24:17 回复(1)
zll头像 zll
初始化参数指定的类,并且返回此类对应的Class对象
发表于 2016-03-21 16:03:19 回复(0)

在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。

从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:

1、这个类已经加载;

2、这个类已经连接了。

而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载

  java API的那个加载器。

发表于 2018-08-07 12:10:16 回复(0)
这个方法用来载入跟数据库建立连接的驱动。
发表于 2015-10-29 12:10:42 回复(1)
自己看了一篇博客来总结一下:jvm在加载类时,会给每个类的对象默认装载一个class加载进去,比如八个基本数据类型。不同的是这种方式不像我们平时那样去new一个class对象来装载,他是隐试的创建的。所以每个类都能在jre这个运行环境里运行,以此就解释了为什么这个方法加了Class.,而forname这个方法就是返回class这个对象的。 不知道的是不是这样,欢迎大神指正!
发表于 2021-09-12 09:28:35 回复(0)
<p>加载一个类进入内存,并返回该类的对象,例如静态代码块就是此时被加载</p>
发表于 2020-10-27 19:39:36 回复(0)
加载一个类进入到内存并返回类对象,如静态代码块就是在此时加载,new则是实例化类对象
发表于 2020-07-23 16:19:52 回复(0)
Class.forName(),反射机制中获取类对象的三种方式之一.
能够动态的调用对象的属性,方法.
发表于 2020-03-25 20:59:06 回复(0)
Class.forname()是反射获取字节码的一种方, 另外的两个是 :类名.class() 和 方法名.getClass()。 class.forname()底层是使用newinstance()方法实现的,用来创建对象实例的。
发表于 2019-10-25 22:56:19 回复(0)
class.forname() 与new Instance()  联合起来使用   前者实现类的加载 然后后者 创建类对象
发表于 2019-07-30 15:17:34 回复(0)

用在反射机制中,便于动态加载我们想要加载的类

发表于 2019-06-11 08:28:51 回复(0)
初始化参数指定的类,并且返回此类对应的Class 对象
发表于 2019-05-05 15:36:30 回复(0)
初始化参数指定的类,并且返回此类对应的Class对象
发表于 2019-05-03 21:24:26 回复(0)
初始化参数指定的类,并且返回此类对应的Class 对象
发表于 2019-05-01 17:04:34 回复(0)
初始化参数指定的类,并且返回此类对应的Class 对象
发表于 2019-04-28 20:38:55 回复(0)