【发布时间】:2010-11-01 09:16:18
【问题描述】:
在一个 Java 文件中包含多个类的目的是什么?我是 Java 新手。
已编辑: 这可以通过在公共类中创建内部类来实现,对吧?
【问题讨论】:
在一个 Java 文件中包含多个类的目的是什么?我是 Java 新手。
已编辑: 这可以通过在公共类中创建内部类来实现,对吧?
【问题讨论】:
变化...一个这样的例子是anonymous classes(在使用事件监听器等时你会遇到很多)。
【讨论】:
是的,可以。但是,每个.java 文件只能有一个公共顶级类,并且公共顶级类必须与源文件同名。
在一个源文件中包含多个类的目的是将相关的支持功能(内部数据结构、支持类等)与主要的公共类捆绑在一起。请注意,不这样做总是可以的——唯一的影响是代码的可读性(或不可读)。
【讨论】:
java.awt.LightweightDispatcher在哪里?
可以,但是任何包中只能有 1 个公共类,因为 java 编译器会创建与公共类名称同名的 .Class 文件,因此如果它们超过 1 个公共类,那就很难了为编译器选择应该是类文件的名称。
【讨论】:
如果要实现公共类,则必须在与该类同名的文件中实现它。单个文件可以包含一个公共类和可选的一些私有类。如果类仅由公共类在内部使用,这很有用。此外,公共类还可以包含内部类。
虽然在单个源文件中包含一个或多个私有类很好,但我想说使用内部类和匿名类更易读。例如,可以使用匿名类在公共类中定义 Comparator 类:
public static Comparator MyComparator = new Comparator() {
public int compare(Object obj, Object anotherObj) {
}
};
Comparator 类通常需要一个单独的文件才能公开。这样它就与使用它的类捆绑在一起了。
【讨论】:
一般来说,每个文件应该有一个类。如果您以这种方式组织事物,那么当您搜索一个类时,您知道您只需要搜索具有该名称的文件。
例外情况是,最好使用一个或多个小型辅助类来实现一个类。通常,当这些类存在于同一个文件中时,代码最容易遵循。例如,您可能需要一个小的“元组”包装类在方法调用之间传递一些数据。另一个例子是实现 Runnable 或 Callable 的“任务”类。它们可能很小,最好与创建和调用它们的父类结合使用。
【讨论】:
除了匿名内部类之外,另一个用途是实现公共接口 (see this article) 的私有内部类。外部类可以访问内部类的所有私有字段和方法。
这使您可以创建两个紧密耦合的类,例如模型及其视图,而无需公开其中任何一个的实现。另一个例子是集合及其迭代器。
【讨论】:
是的,想多少就多少!
但是,每个文件中只有一个“公共”类。
【讨论】:
我认为应该是“每个 .java 文件只能有一个非静态顶级公共类”。 不是吗?
【讨论】:
.java 文件称为编译单元。 每个编译单元可以包含任意数量的顶级类和接口。 如果没有公共顶级类型,则编译单元可以命名为任何名称。
//Multiple.java
//preceding package and import statements
class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...
编译单元中只能有一个公共类/接口。 c.u.必须完全按照此公共顶级类型命名。
//Test.java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces
Important points about the main method - part 1
(关于第 2 部分中涉及的类数量及其访问级别的要点)
【讨论】:
如果你想实现一个单例,即在你的程序中运行的一个类,在整个应用程序的执行过程中只有一个实例在内存中,那么实现单例的一种方法是在里面嵌套一个私有静态类公开课。然后内部私有类只有在调用其访问私有实例的公共方法时才实例化自己。
查看这篇 wiki 文章,
https://en.wikipedia.org/wiki/Singleton_pattern
这个概念需要一段时间才能理解。
【讨论】:
在一个.java文件中,只能有一个与文件同名的公共顶级类,但可能有多个公共内部类,可以导出给每个人并访问外部类的字段/方法,例如:AlertDialog.Builder(由'public static'修改)中的AlertDialog(由'public'修改)
【讨论】:
是的,您可以在一个 .Java 文件中拥有多个类。但是您已将其中之一设为 Public 。并保存与公共类名称同名的 .java 文件。当您编译该 .java 文件时,您将为 .java 文件中定义的每个类获得单独的 .class 文件。
除此之外,在一个 .java 文件中定义多个类的方法太多了。
【讨论】:
是的! .java 文件只能包含一个公共类。
如果您希望这两个类公开,则必须将它们放入两个 .java 文件中:A.java 和 B.java。
【讨论】:
是的,您可以在一个 .java 文件中拥有多个类。最多其中一个可以是公开的。其他的是包私有的。它们不能是私有的或受保护的。如果一个是公共的,则该文件必须具有该类的名称。否则,任何东西都可以作为其名称赋予该文件。
在一个文件中有许多类意味着这些类在同一个包中。因此,该包内但不在该文件中的任何其他类也可以使用这些类。此外,当导入该包时,导入类也可以使用它们。
如需更详细的调查,您可以访问我的博文here。
【讨论】:
是的 200%,
例子:
class A {
void methodDeclaration() { System.out.println("!!!"); }
}
class B {
public static void main(String[] args) {
new A().methodDeclaration();
}
}
【讨论】:
是的,您可以创建多个公共类,但它必须是嵌套类。
public class first {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public class demo1
{
public class demo2
{
}
}
}
【讨论】:
一个文件中只能有一个公共类顶级类。该公共类的类名应该是文件的名称。它可以有许多公共内部类。
您可以在一个文件中包含多个类。文件中不同级别的类可见性的限制如下:
顶级课程:
1 个公开课
0 私人课程
任意数量的默认/受保护的类
内部类:
具有任何可见性(默认、私有、受保护、公共)的任意数量的内部类
如果我错了,请纠正我。
【讨论】:
是的,可以。但是,每个 .java 文件只能有一个公共类,因为公共类必须与源文件同名。
【讨论】: