6

在(默认包)中,我有一个名为“Bird”的类,它有一个名为“dialog”的方法。

我可以在同一个包中创建一个名为 Class1 的类,如下所示:

public class Class1
{
    public static void main(String[] args) 
    {
        Bird b = new Bird("Alexander",true,5);
        b.dialog("tweet!");
    }
}

这实际上有效,我实际上可以tweet!在控制台中看到。

Class1我的问题是:如果位于包中Fundamental (而类Bird位于“默认包”中),我需要在代码中添加什么?我收到一个错误:在这种情况下“无法识别鸟类类型”。我可能应该以某种方式指出包裹。

附带问题: 1. 什么是类路径以及如何更改它?我已经看到这个术语在几个与包相关的讨论的上下文中被模糊地使用,但没有一个像我刚刚给出的那样有明确的例子。2. 我多次看到名为 xxx.bla.zzz 的包——这是标准吗?我通常只使用一个通用名称(不是三个用 . 分隔的名称。)我了解包是 Java 替代其他语言中的名称空间。如果有几个值得一提的解决方案解决方案,我将不胜感激。谢谢!

4

3 回答 3

12

你不应该使用默认包,这不是一个好习惯,你不能从默认包中导入类。始终声明您的包结构。

在第一行的类Bird中添加:

package animals;

在 Class1.java 的第一行写下你的包名

package foo;

import animals.Bird;

请注意,为此,类Bird和类Class1应分别位于文件夹“animals”和文件夹“foo”中

于 2013-01-29T21:39:42.393 回答
3

根据 JLS(第 7.5 章。导入声明http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.5)不可能从默认(未命名)包导入

未命名包中的类型(第 7.4.2 节)没有规范名称,因此每种导入声明中对规范名称的要求意味着(a)无法导入未命名包中的类型,以及(b)静态成员无法导入未命名包中的类型。因此,第 7.5.1 节、第 7.5.2 节、第 7.5.3 节和第 7.5.4 节都要求在尝试将类型(或其静态成员)导入未命名包中时出现编译时错误。

于 2013-01-30T01:14:17.253 回答
2

到目前为止提供的解决方案很有帮助,但如果您使用的是 NetBeans,则解决问题要简单得多。转到项目右键单击并选择打开新包。NetBeans 为您提供了一个用于创建新包的对话框。这就是诀窍所​​在,注意:确保您的新项目名称不以与其他包相同的名称开头,以便新包将被唯一标识。例如,给新包一个不同的名称

newPackage;

然后,您可以在您希望在其中使用包的类文件上使用 import 语句:

import newPackage.SecondClass;

您实际上可以使用代码完成 ctr + spaceBar 来确保包清晰可见。

我希望这很简单。 看看这个截图

于 2016-02-29T17:33:22.287 回答