【问题标题】:Java: import statement vs fully qualified name?Java:导入语句与完全限定名称?
【发布时间】:2012-08-08 02:02:37
【问题描述】:

我已经尝试在网上和我自己的知识体系中找到这个问题的答案,但我似乎无法找到一个明确、明确的答案。

假设我只使用了另一个包中的一个类,它只需要导入一次,比如myPack.anotherPackage.ClassName

使用 import 语句 有什么区别(如果有):

import myPack.anotherPackage.ClassName;

相对于使用完全限定名称

myPack.anotherpackage.ClassName classInst = new myPack.anotherpackage.ClassName();

显然,这个问题只适用于ClassName 只使用一次的情况。

【问题讨论】:

  • @AaronKurtzhals 不是真的。您指出的问题询问了使用 import 语句的性能,而这个问题更多的是关于使用 import 与使用限定名称之间的区别。答案会有所不同。
  • 在我链接到的问题中,aioobe 接受的答案未涵盖您要查找的其他信息?

标签: java import


【解决方案1】:

在我看来,没有。查看字节码 - 不会有任何区别。

 javap -c <your class>

【讨论】:

  • 编译时呢?有什么区别吗?
  • @NathanSabruka 我不知道
【解决方案2】:

据我所知没有区别。唯一的区别是代码的冗长。通常,越冗长越难阅读。也许看字节码?

【讨论】:

    【解决方案3】:

    导入语句让你的代码更可读,因为你不会用完整的包弄乱代码。

    如果存在ClassNames 的冲突,那么只有在这种情况下才建议使用完全限定名称

    【讨论】:

      【解决方案4】:

      没有真正的区别,尤其是对于您在此处引用的特定简单案例。见Java: Use import or explicit package / class name?

      【讨论】:

        【解决方案5】:

        1.更多的是关于readabilityfunctional 重要性。

        2. import 语句提供cleaner code,而不是使用完整的包名称以及 classinterface 名称。

        3. 但是在导入模棱两可的包时必须小心。

          `java.awt.List` and `java.util.List`
        

        然后你需要一个完整的导入一个完整的包名,如下所示

        import java.util.List;
        
        and 
        
        java.awt.List l = new java.awt.List();
        

        【讨论】:

        • 我会说你需要完全导入最多一个。如果我觉得 FQN 使代码更具可读性,我已经使用了 FQN。例如,如果我有一个在 java.util.Datejava.sql.Date 之间转换的方法,我将完全限定两者以使读者更清楚发生了什么。
        【解决方案6】:

        代码编译后没有区别。在这两种情况下,字节码都将具有完全限定名,即编译器会自动将类名替换为限定名。它只是为了让程序员的生活更轻松,我们不必编写完全限定的名称来引用一个类。

        【讨论】:

          【解决方案7】:

          导入和包用于命名和访问保护(默认) 这样做的简单原因是可以有许多同名的类。

          为了区分它们,我们需要在包下将它们分开,并在需要时导入它们。

          导入类或直接输入完全限定名没有区别,但有一些细微差别。 1. 最重要的是,如果您导入包中的所有类(即 import xyz.*;) 这些类仍然可能存在命名问题,例如,如果有多个通用导入,您可能在运行时使用了错误的类。

          1. 如果在运行时动态加载类,例如在运行时注册 JDBC 驱动程序,您需要提供完整的类名作为参数,以便动态加载它。

          一般使用以下最佳做法: 1.永远不要使用import abc.*;导入格式并始终导入单个类(eclipse 或某些 IDE 可以自动更正导入到 * 并需要禁用此功能) 2. 当你已经导入了一个同名的类,并且想在同一个程序下使用另一个同名的类时,你必须使用完全限定的类名。 3. 希望对你有帮助:)

          【讨论】:

            猜你喜欢
            • 2022-06-15
            • 2012-10-12
            • 1970-01-01
            • 1970-01-01
            • 2018-02-27
            • 1970-01-01
            • 2023-03-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多