Java的getCanonicalName和getName
来源:互联网 发布:武汉市广电网络分公司 编辑:程序博客网 时间:2024/05/17 09:06
Java中获取类名主要有三个方法供我们使用:getName(), getCanonicalName() 和getSimpleName().
举个例子看下它们的区别。比如如下类:
package my;public class ExternalClassConfig {private String desc;// ... public static class InternalConfig { // ... } }类里面含有个内部类。
然后我们调用类的上面三个方法看下结果:
@Testpublic void testclassName() {System.out.println();System.out.println("方法 值");System.out.println("getName " + ExternalClassConfig.class.getName());System.out.println("getCanonicalName " + ExternalClassConfig.class.getCanonicalName());System.out.println("getSimpleName " + ExternalClassConfig.class.getSimpleName());System.out.println("getName " + InternalConfig.class.getName());System.out.println("getCanonicalName " +InternalConfig.class.getCanonicalName());System.out.println("getSimpleName " + InternalConfig.class.getSimpleName());System.out.println();}
输出结果如下:
方法 值getName my.ExternalClassConfiggetCanonicalName my.ExternalClassConfiggetSimpleName ExternalClassConfiggetName my.ExternalClassConfig$InternalConfiggetCanonicalName my.ExternalClassConfig.InternalConfiggetSimpleName InternalConfig
这里,getName()返回的是虚拟机里面的class的表示,而getCanonicalName()返回的是更容易理解的表示。其实对于大部分class来说这两个方法没有什么不同的。但是对于array或内部类来说是有区别的。
另外,类加载(虚拟机加载)的时候需要类的名字是getName。
再看数组:
@Testpublic void testclassName4Array() {String [] ss = new String[]{"zw", "zz"};System.out.println();System.out.println("方法 值");System.out.println("getName " + ss.getClass().getName());System.out.println("getCanonicalName " + ss.getClass().getCanonicalName());System.out.println("getSimpleName " + ss.getClass().getSimpleName());System.out.println();}输出结果:
方法 值getName [Ljava.lang.String;getCanonicalName java.lang.String[]getSimpleName String[]不习惯这种表示可能觉得有点怪。首先 ‘[’ 表示数组,一个代表一维数组,比如 '[[' 代表二维数组。之后 'L' 代表类描述符,最后分号表示结束。
这种编码叫做JNI字段描述符(JavaNative Interface FieldDescriptors)。有兴趣的话可以自己学习下。
0 0
- Java的getCanonicalName和getName
- java getCanonicalName getSimpleName和getName的区别和用法
- Java getCanonicalName和getSimpleName getName的区别与应用
- Java中class的getName()和getCanonicalName()两个方法的区别
- Class.getName和Class.getCanonicalName
- Class的getCanonicalName和getSimpleName getName的区别与应用
- getCanonicalName和getSimpleName getName的区别与应用
- getCanonicalName和getSimpleName getName的区别与应用
- getCanonicalName和getSimpleName getName的区别与应用
- 一目了然解释getName()、getCanonicalName()和getSimpleName()的异同
- 一目了然解释getName()、getCanonicalName()和getSimpleName()的异同
- getSimpleName,getCanonicalName和getName获取类名的区别
- Class.getName和Class.getCanonicalName[论坛-01]
- 简单比较 getName()、getCanonicalName()、getSimpleName() 的异同
- 简单比较 getName()、getCanonicalName()、getSimpleName() 的异同
- 简单比较 getName()、getCanonicalName()、getSimpleName() 的异同
- JAVA的class.getSimpleName和getCanonicalName
- 比较getName()、getSimpleName、getCanonicalName()
- ARM的PC,LR在中断的使用
- Java集合类详解
- 获取当前年月日 时分秒
- Python基础数据结构之数据转换(Dict,Set,Tuple,List)
- 解读彩色工业相机中的拜耳(Bayer)变换
- Java的getCanonicalName和getName
- ROS Gazebo(三):启动gazebo/URDF
- 15. 3Sum
- sqoop常用指令
- C# 计算角度
- 品牌形象设计:企业品牌定名要领
- 机器学习之性能度量
- python变量
- C++进阶