【问题标题】:confused with package and import statements including default package与包和导入语句(包括默认包)混淆
【发布时间】:2014-03-13 19:24:14
【问题描述】:

我对术语及其在 eclipse IDE 中的使用感到困惑。

据我了解,您可以使用 import 关键字来引用一组称为包的类/java 文件中的特定类/java 文件。您还可以使用通配符修饰符在导入语句的末尾引用整组类/java 文件。那么,当您可以在 java src 文件的顶部创建 package 语句而不必进行导入时,为什么要这样做呢?

例如:

文件夹结构:myapp>graphics>.class1, .class2

而不是这样做:import myapp.graphics.*

我们可以这样做吗?:package myapp

所以乳清甚至还有 import 关键字?你不能只使用包 myapp 并通过说 class1 example = class1(); 引用该类;

其次,我尝试删除 package com.example.myapp 并仅使用 import myapp.graphics.* 导入类,但它给了我一个错误,指出 "" does not match the expected package com.example.myapp。它的修复之一是move MainActivity.java to a default package。我选择了该选项并将其移至默认包,然后我能够使用import myapp.graphcis.*; 语句,同时省略package myapp.graphics 语句而不会出现任何错误。

我很困惑。另外,什么是 deauflt 包?我在某处读到使用默认包是不好的做法。为什么?

谢谢。

【问题讨论】:

  • 我读过它,它说 package 关键字仅用于告诉编译器您正在编辑的当前 java 文件在提及包中,并且您使用 import 关键字来导入类或该包中的类。我对么? @Nikhil Joshi 您的声明与此解释相冲突。但是,您是说您使用 import 仅导入预先存在的类。

标签: java android eclipse


【解决方案1】:

根据甲骨文:

包是一个命名空间,它组织了一组相关的类和 接口。从概念上讲,您可以将包视为类似于 计算机上的不同文件夹。您可以将 HTML 页面合二为一 文件夹,另一个中的图像,以及另一个中的脚本或应用程序。 因为用 Java 编程语言编写的软件可以 它由数百或数千个单独的类组成,它使 通过放置相关的类和 接口到包中。

因此,您可以将包视为组织者,与导入无关。

默认包根本没有包。当您将该字段留空时,Eclipse 会就此向您发出警告。使用它是不好的做法,因为

使用默认包可能会产生命名空间冲突。想象一下,您正在创建一个包含 MyClass 类的库。有人用 你的图书馆在他的项目中,并且在他的项目中也有一个 MyClass 类 默认包。编译器应该做什么? Java中的包是 实际上是一个完全标识您的项目的命名空间。所以就是 重要的是不要在实际项目中使用默认包。

Why shouldn't we use the (default)src package?

【讨论】:

  • 请使用>作为引号和反引号或4个空格缩进代码
  • 如果它回答了您的问题,请将其标记为已解决;)
  • 包与导入无关的说法是不正确的。包对于导入非常重要,因为它们有助于确定哪些需要导入,哪些不需要。
  • 包是您要导入的类的路径。我的意思是你不能通过声明一个包来导入一些东西。
  • 我很困惑。你能用 import 关键字同时导入 .java 和 .class 文件吗?假设我在 com.example.myapp 中有我的主要源代码 .java 文件;文件夹以及同一目录中名为 custom.java 的文件中的自定义类。所以我必须先做package com.example.myapp; 然后使用import com.example.myapp.custom; 导入类?您如何在项目中使用自定义类。我知道您可以直接将类代码键入到 .java 源文件中。或者您可以使用包资源管理器上下文菜单中的 New>class 创建一个新类。您如何引用外部课程?
【解决方案2】:

Packages - 类所在的位置。它用于构建完全限定的类名。

导入 - 用于合并预先存在的类,通过使用它,您可以利用它们的功能。

默认包 - src 文件夹下的位置,例如:src\NoPackage.java

例如,如果 NoPackage.java 包含 import com.assertcheck.AssertTesting; 那么 AssertTestingNoPackage 下的引用强>类。

但是在 AssetTesting 类中,您不能导入/使用 NoPackage

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2017-11-03
    • 1970-01-01
    • 2012-12-22
    相关资源
    最近更新 更多