Class.getName()对给定的类做了什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Class.getName()对给定的类做了什么?相关的知识,希望对你有一定的参考价值。

假设我有一个具有对象obj的“雇员”类。那么将如何执行obj.getClass()。getName()语句?什么应该返回?

答案

getClass()方法获取对象的实际类,它可能与持有对象的变量的类不同。 getName()方法将返回完整包加上该类的类名作为字符串,如下所示:

com.company.project.package.MyClass

例如,以下代码输出上面的String:

package com.company.project.package;

class MyClass extends Object {
  // some definition
}

Object o = new MyClass();
System.out.println(o.getClass().getName());
另一答案

免责声明:虽然Erick的答案是正确的,但它并不完整。

简而言之

此方法与具有差异的getCanonicalName()类似 - 它返回类的二进制名称,其中规范版本返回null(例如,对于匿名类)。

细节

如果此类对象表示不是数组类型的引用类型,则返回该类的二进制名称:

String.class.getName()
    returns "java.lang.String"
(new Object() {}).getClass().getName()
    returns "test.Main$1"

如果此类对象表示基本类型或void,则返回的名称是一个String,它等于与基本类型或void相对应的Java语言关键字。

byte.class.getName()
    returns "byte"
long.class.getName()
    returns "long"

如果此类对象表示一个数组类,则名称的内部形式由元素类型的名称组成,前面是一个或多个'['字符,表示数组嵌套的深度:

(new Object[3]).getClass().getName()
    returns "[Ljava.lang.Object;"
(new int[3][4][5][6][7][8][9]).getClass().getName()
    returns "[[[[[[[I"

元素类型名称的编码如下:

Element Type           Encoding
boolean                Z
byte                   B
char                   C
class or interface     L<classname>;
double                 D
float                  F
int                    I
long                   J
short                  S

关于这种方法的官方文档:https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--

另一答案

类的名称,在您的情况下为“employee”或“my.package.employee”。

以上是关于Class.getName()对给定的类做了什么?的主要内容,如果未能解决你的问题,请参考以下文章

Class.getName() 的静态调用

java中,引用另一个包中的类做父类时,显示程序包不存在怎么办

Kotlin 初学者单例类(object)

Kotlin 对象表达式和对象声明

java泛型T和class.getName一样吗?

Kotlin 六 对象表达式和对象声明