我们可以通过3种方法获得类Class对象:
我不明白:MyClass.class
和Class.forName("className")
之间的区别。
因为两者都需要类名。
答案 0 :(得分:11)
Class.forName("className");
forName是类“Class”的静态方法。 我们需要提供所需类的完全限定名称。 这可以在类的名称将在运行时获知时使用。
ClassName.class;
.class不是一个方法,它是一个关键字,可以像int一样使用原始类型。 当班级名称事先知道时它被添加到项目中,那时我们使用ClassName.class
答案 1 :(得分:8)
我不明白:
MyClass.class
和Class.forName("className")
之间的区别。因为两者都需要类名。
最重要的区别是 时他们需要它。由于Class.forName
接受字符串,因此可以在运行时确定类名。当然,MyClass.class
是在编译时确定的。这使得Class.forName
对于根据配置动态加载类非常有用(例如,根据配置文件的设置加载数据库驱动程序)。
解决问题:obj.getClass()
非常有用,因为您可能不知道对象的实际类 - 例如,在使用接口而不是类接受参数的方法中,例如在{{ 1}}。你不知道foo(Map m)
的类,只是它是实现m
的东西。 (99%的时候,你不应该关心它的课程是什么,但偶尔会增加1%。)
答案 2 :(得分:2)
一个重要的区别是: A.class将执行A类的加载和链接。 Class.forName(" A")将执行A类的加载,链接和初始化。
答案 3 :(得分:1)
Class.forName("className");
它基于完全限定的类名字符串动态加载类。
obj.getClass
返回表示对象的运行时类的java.lang.Class对象。
MyClass.class:
class
文字是一个表达式,包含类,接口,数组的名称,
或原始类型,或伪类型void,后跟a
'。和令牌类。
C.class
的类型,其中C是类,接口或数组类型的名称是Class<C>
。