Java MyClass.class和class.forName之间的差异(“className”)
我们可以通过3种方法获得类对象:Java MyClass.class和class.forName之间的差异(“className”),java,reflection,Java,Reflection,我们可以通过3种方法获得类对象: 我的班级 对象类 Class.forName(“className”) 我不明白:MyClass.class和class.forName(“className”)之间的区别 因为两者都需要类名 Class.forName("className"); forName是类“class”的静态方法。 我们需要提供所需类的完全限定名。 当类名在运行时为人所知时,可以使用此选项 ClassName.class; .class不是一个方法,它是一个关键字,可以与i
- 我的班级
- 对象类
- Class.forName(“className”)
MyClass.class
和class.forName(“className”)
之间的区别
因为两者都需要类名
Class.forName("className");
forName是类“class”的静态方法。
我们需要提供所需类的完全限定名。
当类名在运行时为人所知时,可以使用此选项
ClassName.class;
.class不是一个方法,它是一个关键字,可以与int等基元类型一起使用。
当类的名称被预先知道并添加到项目中时,那个么我们就使用ClassName.Class
我不明白:MyClass.class
和class.forName(“className”)
之间的区别
因为两者都需要类名
Class.forName("className");
最大的区别在于他们什么时候需要它。由于Class.forName
接受字符串,因此可以在运行时确定类名。当然,MyClass.class
是在编译时确定的。这使得Class.forName
对于根据配置动态加载类(例如,根据配置文件的设置加载数据库驱动程序)非常有用
四舍五入:obj.getClass()
很有用,因为您可能不知道对象的实际类-例如,在方法中,您使用接口而不是类接受参数,例如在foo(Map m)
中。您不知道m
的类,只知道它是实现Map
的东西。(99%的时候,你不应该关心它的类是什么,但这1%偶尔会出现。)
它根据完全限定的类名字符串动态加载类
obj.getClass
返回表示对象的运行时类的java.lang.Class对象
MyClass.class:
class
literal是由类、接口、数组的名称组成的表达式,
或基元类型,或伪类型void,后跟a
'.'和标记类。
C.class
的类型,其中C是类的名称,接口或数组类型是class
一个重要的区别是: 类将执行类A的加载和链接。
Class.forName(“A”)将执行类A的加载、链接和初始化。或者,简而言之:运行时查找与编译时查找。Class不是关键字。MyClass.Class不会导致运行时查找的各种答案中的建议或含义的可能重复项为false。当包含引用的类正在加载时,它只会导致更早的运行时查找!查找失败对加载是致命的。很好的解释