栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java类中的规范名称,简单名称和类名称有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java类中的规范名称,简单名称和类名称有什么区别?

如果不确定某件事,请尝试先编写测试。

我这样做:

class ClassNameTest {    public static void main(final String... arguments) {        printNamesForClass( int.class, "int.class (primitive)");        printNamesForClass( String.class, "String.class (ordinary class)");        printNamesForClass( java.util.HashMap.SimpleEntry.class, "java.util.HashMap.SimpleEntry.class (nested class)");        printNamesForClass( new java.io.Serializable(){}.getClass(), "new java.io.Serializable(){}.getClass() (anonymous inner class)");    }    private static void printNamesForClass(final Class<?> clazz, final String label) {        System.out.println(label + ":");        System.out.println("    getName():          " + clazz.getName());        System.out.println("    getCanonicalName(): " + clazz.getCanonicalName());        System.out.println("    getSimpleName():    " + clazz.getSimpleName());        System.out.println("    getTypeName():      " + clazz.getTypeName()); // added in Java 8        System.out.println();    }}

印刷品:

int.class(原始):    getName():int    getCanonicalName():int    getSimpleName():int    getTypeName():intString.class(普通类):    getName():java.lang.String    getCanonicalName():java.lang.String    getSimpleName():字符串    getTypeName():java.lang.Stringjava.util.HashMap.SimpleEntry.class(嵌套类):    getName():java.util.AbstractMap $ SimpleEntry    getCanonicalName():java.util.AbstractMap.SimpleEntry    getSimpleName():SimpleEntry    getTypeName():java.util.AbstractMap $ SimpleEntry新的java.io.Serializable(){}。getClass()(匿名内部类):    getName():ClassNameTest $ 1    getCanonicalName():空    getSimpleName():        getTypeName():ClassNameTest $ 1

最后一个块中有一个空条目,其中

getSimpleName
返回一个空字符串。

结果是:

  • 名称 是您愿意使用动态加载与类,例如,调用的名称
    Class.forName
    与默认
    ClassLoader
    。在一定范围内
    ClassLoader
    ,所有类都有唯一的名称。
  • 规范名称 是将在import语句中使用的名称。在执行
    toString
    或记录操作时,它可能很有用。当
    javac
    编译器具有类路径的完整视图时,它通过在编译时冲突完全限定的类和包名称来在其中强制规范名称的唯一性。但是,JVM必须接受此类名称冲突,因此规范名称不能唯一地标识内的类
    ClassLoader
    。(事后看来,该getter的更好的名字应该是
    getJavaName
    ;但是此方法可以追溯到JVM仅用于运行Java程序的时间。)
  • 简单的名字 松散标识类,又可能是有用的过程
    toString
    或记录的操作,但不能保证是唯一的。
  • 类型名称 返回“ 此 类型名称 的信息字符串”,“类似于toString():它纯粹是信息信息,没有合约值”(如sir4ur0n所写)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569171.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号