Class.getName() 对给定的类做了什么?
2022-09-04 01:39:44
假设我有一个类“employee”有一个对象obj.那么obj.getClass().getName()语句将如何执行?它应该是什么回报?
假设我有一个类“employee”有一个对象obj.那么obj.getClass().getName()语句将如何执行?它应该是什么回报?
该方法获取对象的实际类,该类可能与保存该对象的变量的类不同。该方法将以字符串形式返回完整的包以及该类的类名,如下所示:getClass()
getName()
com.company.project.package.MyClass
例如,以下代码输出上面的字符串:
package com.company.project.package; class MyClass extends Object { // some definition } Object o = new MyClass(); System.out.println(o.getClass().getName());
免责声明:虽然埃里克的答案是正确的,但它并不完整。
总之
此方法类似于 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--