Java - 为什么必须使用Class类的实例方法编写classname.class.method或instance.getClass()。方法?

时间:2017-07-28 11:35:15

标签: java class methods

为什么使用Class类的方法来编写classname.class.method或instance.getClass()方法是必要的?

例如:

public class SomeClass{
   public static void main (String[] args){
       SomeClass sm = new SomeClass();
       //The correct ways:
       System.out.println(sm.getClass().getName());
       //or
       System.out.println(SomeClass.class.getName()); 
   }
}     

类类的实例方法需要一个类(在System.out.println(sm.getClass().getName();中可以看到它,因为sm.getClass()返回一个类)所以为什么写System.out.println(SomeClass.getName();不正确并且有必要写如果getName()方法被类调用,那么“class”在中间?是因为SomeClass类不被视为Class类的实例吗?为什么sm.getClass()被认为是Class类的实例呢?

谢谢。

3 个答案:

答案 0 :(得分:4)

new SomeClass()创建SomeClass类的实例:

SomeClass someClass = new SomeClass();

它不提供Class SomeClass实例作为getClass()Object类的实例方法:

Class<? extends SomeClass> clazz = new SomeClass().getClass();

这是完全不同的两件事。

答案 1 :(得分:1)

  

为什么使用Class类的方法来编写classname.class.method或instance.getClass()方法是必要的?

Java没有独立的函数,因此为了调用任何函数,您必须将其作为类的成员调用。如果你想调用属于A类的函数,你必须将它作为A类的方法调用。我知道这是一个重言式;但正如你所说,这就是你所要求的问题。

  

为什么写System.out.println不正确(SomeClass()。getName();

写这个是不正确的,因为它不是有效的java语法。 Java保留了class-name-follow-by-parentheses结构来代表标识构造函数。 (并且必须以new为前缀。)

  

有必要写&#34; class&#34;如果getName()方法是由类调用的话?

除了不支持独立函数之外,java不支持任何独立的代码,因此为了调用任何东西,调用代码必须在类中,所以所有方法都由类调用。

  

是因为SomeClass类不被视为Class类的实例吗?

嗯,是的。

  

为什么sm.getClass()被认为是Class类的一个实例呢?

它不被视为类的实例。但它确实返回了一个类的实例。

答案 2 :(得分:0)

我正在打破界限以理解简单的方法。希望如此有用

SomeClass sm = new SomeClass();

Class clazz1 = sm.getClass(); //sm.getClass() returns Class object
System.out.println(clazz1.getName());    

Class clazz2 = SomeClass.class; //SomeClass.class returns Class object 

System.out.println(clazz2.getName()); 

这意味着在Class类中可以使用getName()方法。