MyClass.class和Class.forName("className")之间的区别

Nea*_*eal 7 java reflection

我们可以通过3种方法获取类Class对象:

  • MyClass.class
  • obj.getClass
  • 的Class.forName( "类名")

我不明白之间的差别:MyClass.classClass.forName("className").

因为两者都需要Class Name.

swa*_*apy 11

Class.forName("className"); 
Run Code Online (Sandbox Code Playgroud)

forName是类"Class"的静态方法.我们需要提供所需类的完全限定名称.这可以在类的名称将在运行时获知时使用.

ClassName.class;
Run Code Online (Sandbox Code Playgroud)

.class不是一个关键字的方法,可以像int这样的基本类型使用.当Class的名称事先知道并且它被添加到项目中时,那时我们使用ClassName.class

  • 或者,简而言之:运行时查找与编译时查找 (7认同)

T.J*_*der 8

我不明白之间的差别:MyClass.classClass.forName("className").

因为两者都需要Class Name.

最大的区别在于他们何时需要它.由于Class.forName接受字符串,因此可以在运行时确定类名.当然,MyClass.class是在编译时确定的.这Class.forName对于根据配置动态加载类非常有用(例如,根据配置文件的设置加载数据库驱动程序).

四舍五入:obj.getClass()非常有用,因为您可能不知道对象的实际类 - 例如,在使用接口接受参数的方法中,而不是类,例如in foo(Map m).你不知道它的类m,只是它是实现的东西Map.(99%的时候,你不应该关心它的课程是什么,但偶尔会增加1%.)