Java Class.getName()对给定的类做什么?
假设我有一个类“employee”,它有一个对象obj。 那么如何执行obj.getClass().getName()语句?它应该是什么 方法Java Class.getName()对给定的类做什么?,java,reflection,Java,Reflection,假设我有一个类“employee”,它有一个对象obj。 那么如何执行obj.getClass().getName()语句?它应该是什么 方法getClass()获取对象的实际类,该类可能不同于保存该对象的变量的类。getName()方法将以字符串形式返回该类的完整包和类名,如下所示: com.company.project.package.MyClass 例如,以下代码输出上述字符串: package com.company.project.package; class MyClass ex
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());
包com.company.project.package;
类MyClass扩展对象{
//一些定义
}
对象o=新的MyClass();
System.out.println(o.getClass().getName());
类的名称,在您的例子中是“employee”或“my.package.employee”。免责声明:虽然Erick的答案是正确的,但它并不完整 简言之 此方法类似于getCanonicalName(),但有一点不同——它返回类的二进制名称,其中canonical版本返回null(例如,对于匿名类) 详细信息 如果该类对象表示的引用类型不是数组类型,则返回该类的二进制名称:
String.class.getName()
returns "java.lang.String"
(new Object() {}).getClass().getName()
returns "test.Main$1"
如果该类对象表示基元类型或void,则返回的名称是一个字符串,该字符串等于对应于基元类型或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
元素类型编码
布尔Z
字节B
字符C
类或接口L;
双D
浮动F
int I
长J
短S
关于此方法的正式文档:它返回的对象是对象?或对象的任何子类?你必须更具体一些。添加一些细节,以便人们能够理解你在寻找什么……我不清楚你所说的“如何执行[语句]”是什么意思。您是在询问JVM在运行时如何执行动态调度?编译器如何生成字节码?还是仅仅询问如何编写导致调用字节码的代码(尽管后者似乎非常简单)我不理解你的问题。obj是employee类的实例吗?还是employee的成员变量?还是其他什么?