在Java中.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

为什么不允许通过.class返回的类引用调用静态方法?但是,如果直接使用类名调用静态方法,它就可以正常工作。如下面的示例所示。他们不平等吗

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
返回Class
java.lang.Class
的实例,不,
Class
Base
不同


Class
java.lang.Class
主要在使用时使用。

Base
是类名
Base.method()
是在类
Base
上调用静态方法的java语法

Base.class
是对
class
类型的对象的引用,用于描述类
Base
Base.class.method1()
当然不起作用,因为class
class
没有方法
method1

如果有必要,可以使用反射调用底层类的方法。考虑:


Base.class.getMethod(“method1”).invoke(null)

谢谢您的回复。但是为什么Class不等于Base呢?它们是不同类型的名称——type
java.lang.Class
和type
typeinfo.Base
。正如Eran所说,
Class
类型的对象具有Class
Class
的方法,而不是Class
Base
的方法,因此不能对
Class
类型的对象调用Class
Base
的方法。