为什么使用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类的实例呢?
谢谢。
答案 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()方法。