在(默认包)中,我有一个名为“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替代其他语言的命名空间。如果有几个解决方案值得一提,我会很感激。谢谢!
答案 0 :(得分:10)
您永远不应该使用默认包,这不是一个好习惯,也不能从默认包中导入类。始终声明您的包结构。
在第一行的课程Bird
中添加:
package animals;
在Class1.java的第一行写下您的包名
package foo;
import animals.Bird;
请注意,要使其工作,班级Bird
和班级Class1
应分别位于“animals”文件夹和“foo”文件夹中
答案 1 :(得分: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都要求在未命名的包中导入类型(或其静态成员)的任何尝试都存在编译时错误。
答案 2 :(得分:2)
到目前为止提供的解决方案是有用的,但如果您使用NetBeans,则解决问题非常简单。右键单击项目并选择打开新包。 NetBeans为您提供了用于创建新包的Dialog。这就是诀窍所在,注意:确保您的新项目名称不以与其他软件包相同的名称开头,以便唯一标识新软件包。例如,为新软件包添加一个名称
newPackage;
然后,您可以在您希望使用该包的类文件中使用import语句:
import newPackage.SecondClass;
您可以使用代码完成ctr + spaceBar来确保包装清晰可见。
我希望这很简单。 check out this screenshot