【发布时间】:2013-11-23 17:29:41
【问题描述】:
我厌倦了创建一个包含一个公共类和一个包含多个公共类的包,然后通过另一个包导入它们,两次程序都正常工作。我了解其中的区别,首先我只能使用一个公共类的方法,但该类可以使用其包中的其他类,当更多类是公共的时,我可以通过外星人包直接访问所有这些类。
现在当我们导入 java.util.Scanner 时,我们导入 java.util.ArrayList 这不是同一个包吗?当我们用一个公共类导入我们的包时,它只显示一个公共类。那意味着java.util有多个公共类,还是?
还有什么是java。意思是,我的包和 java 库包有区别吗?
【问题讨论】:
-
当您为 Java 创建源代码文件时,它通常被称为编译单元(有时是翻译单元)。每个编译单元必须有一个以 .java 结尾的名称,并且在编译单元内部可以有一个必须与文件同名的公共类(包括大写,但不包括 .java 文件扩展名)。每个编译单元只能有一个公共类;否则,编译器会报错。
-
如果该编译单元中还有其他类,则由于它们不是公共的,因此它们对包外的世界是隐藏的,并且它们包含主要公共类的“支持”类。那是布鲁斯·埃克尔的形式。这是否仅仅意味着每个公共类都会有自己的文件,而非公共类不会?
-
@StefS:现在对嵌套类(即在其他类中定义的类)搞乱还为时过早。从学习基本知识开始,现在考虑每个类都必须在自己的文件中定义。只有当您对这些基础知识感到满意时,才可以阅读有关嵌套类的 Java 教程。
-
@JBNizet:啊,当然。我不知道我在想什么。我会删除它,因为它完全是错误的,我想到了
private类。 -
@JBNizet:是的,这是为了解释为什么使用包以及为什么使用导入,我读的书给出了这样的介绍......