干货 | Java中获取类名的3种方法!
2023-09-27 14:22:40 时间
获取类名的方法
Java 中获取类名的方式主要有以下三种。
- getName()
返回的是虚拟机里面的class的类名表现形式。
- getCanonicalName()
返回的是更容易理解的类名表示。
- getSimpleName()
返回的是类的简称。
都有什么区别?
通过一个实例来看下它们主要的区别。
public class TestClass {
public static void main(String[] args) {
// 外部普通类
System.out.println("方法名 类名");
System.out.println("getName " + TestClass.class.getName());
System.out.println("getCanonicalName " + TestClass.class.getCanonicalName());
System.out.println("getSimpleName " + TestClass.class.getSimpleName());
System.out.println();
// 内部类
System.out.println("getName " + TestInnerClass.class.getName());
System.out.println("getCanonicalName " + TestInnerClass.class.getCanonicalName());
System.out.println("getSimpleName " + TestInnerClass.class.getSimpleName());
System.out.println();
// 数组类
TestInnerClass[] testInnerClasses = new TestInnerClass[]{
new TestInnerClass(),
new TestInnerClass(),
new TestInnerClass()
};
System.out.println("getName " + testInnerClasses.getClass().getName());
System.out.println("getCanonicalName " + testInnerClasses.getClass().getCanonicalName());
System.out.println("getSimpleName " + testInnerClasses.getClass().getSimpleName());
System.out.println();
}
static class TestInnerClass {
}
}
程序输出以下结果。
方法名 类名
getName com.test.TestClass
getCanonicalName com.test.TestClass
getSimpleName TestClass
getName com.test.TestClass$TestInnerClass
getCanonicalName com.test.TestClass.TestInnerClass
getSimpleName TestInnerClass
getName [Lcom.test.TestClass$TestInnerClass;
getCanonicalName com.test.TestClass.TestInnerClass[]
getSimpleName TestInnerClass[]
[Lcom.test.TestClass$TestInnerClass;
值得说明一下。
这是一种对函数返回值和参数的编码,叫做JNI字段描述符(JavaNative Interface FieldDescriptors)。
[
表示数组,一个代表一维数组,比如 [[
代表二维数组。之后 L
代表类描述符,最后;
表示类名结束。
另外,最近面试整理了 Java 最新、最全的面试题:
结论
1、从以上结果可以看出 getName() 和 getCanonicalName() 在获取普通类名的时候没有区别,在获取内部类和数组类有区别的。
2、getSimpleName() 在获取普通类和内部类名的时候没区别,在获取数组类的时候有区别。
相关文章
- java虚拟机学习-JVM调优总结-调优方法(12)
- Java线程唤醒与阻塞的常用方法
- 【JAVA】关于【数组】的知识合集!(有新的学习,再追加更新)
- Java中日期时间格式化方法SimpleDateFormat和DateTimeFormatter使用完整示例及区别说明
- Java 拆分String String equals 方法的实现
- 设计模式java——访问者模式
- SpringBoot出现 java.lang.IllegalArgumentException: Request header is too large 解决方法
- 【Java】+获取当前方法、类的名称
- 【Java】+字符串
- java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 报错的解决办法
- 【Java实习生】每日10道面试题打卡!
- java 线程间的通信 (wait / notify / notifyAll)
- Java泛型:泛型类、泛型接口和泛型方法
- java爬虫入门--用jsoup爬取汽车之家的新闻
- Java RestTemplate 请求参数字符串中有大括号{}的请求正确方法
- Java String startsWith()方法
- java处理jqueryGantt甘特图数据的task.depends依赖规则方法
- Java基础篇:equals()方法与==的区别
- Java基础篇:对象拷贝:clone方法 以及 序列化
- java中通过反射获取方法并且调用(getMethod和invoke深入)实践
- 【JAVA】字符串的构建、替换,子串的提取,Pattern对象、Matcher对象和find方法
- Java中StringBuilder的清空方法比較
- java的System.getProperty()方法能够获取的值
- 关于在Android或Java中精度缺失的解决方法
- Java SpringBoot Beetl模板