在Java中.class返回的究竟是什么?
为什么不允许通过.class返回的类引用调用静态方法?但是,如果直接使用类名调用静态方法,它就可以正常工作。如下面的示例所示。他们不平等吗在Java中.class返回的究竟是什么?,java,class,Java,Class,为什么不允许通过.class返回的类引用调用静态方法?但是,如果直接使用类名调用静态方法,它就可以正常工作。如下面的示例所示。他们不平等吗 package typeinfo; class Base { public static void method1() { System.out.println("Inside static method1"); } public void method2() { System.out.println
package typeinfo;
class Base {
public static void method1() {
System.out.println("Inside static method1");
}
public void method2() {
System.out.println("Inside method2");
}
}
public class Sample {
public static void main(String[] args) {
Class<Base> b = Base.class;
// Works fine
Base.method1();
// Gives compilation error: cannot find symbol
// Is below statement not equal to Base.method1() ?
b.method1();
}
}
包类型信息;
阶级基础{
公共静态无效方法1(){
System.out.println(“内部静态方法1”);
}
公开作废方法2(){
System.out.println(“内部方法2”);
}
}
公共类样本{
公共静态void main(字符串[]args){
b类=基本类;
//很好
Base.method1();
//给出编译错误:找不到符号
//下面的语句是否不等于Base.method1()?
b、 方法1();
}
}
b
属于Class
类型,因此它具有该类型的方法,而不是基本类的方法
您可以使用Class
的实例通过反射来调用它们引用的类的方法。.Class
返回Classjava.lang.Class
的实例,不,Class
与Base
不同
Classjava.lang.Class
主要在使用时使用。Base
是类名Base.method()
是在类Base
上调用静态方法的java语法
Base.class
是对class
类型的对象的引用,用于描述类Base
Base.class.method1()
当然不起作用,因为classclass
没有方法method1
如果有必要,可以使用反射调用底层类的方法。考虑:
Base.class.getMethod(“method1”).invoke(null)代码>谢谢您的回复。但是为什么Class不等于Base呢?它们是不同类型的名称——typejava.lang.Class
和typetypeinfo.Base
。正如Eran所说,Class
类型的对象具有ClassClass
的方法,而不是ClassBase
的方法,因此不能对Class
类型的对象调用ClassBase
的方法。