一个java文件可以有多个类?

在Java文件中有多个类的目的是什么? 我是Java的新手。

编辑:这可以通过在公共类中创build一个内部类来实现,对吗?

是的,它可以。 但是,每个.java文件只能有一个公共顶级类,而公共顶级类必须与源文件具有相同的名称。

在一个源文件中包含多个类的目的是将相关的支持function(内部数据结构,支持类等)与主公共类捆绑在一起。 请注意,不要这样做 – 唯一的影响是代码的可读性(或不可读性)。

如果你想实现一个公共类,你必须在一个与该类相同的文件中实现它。 一个文件可以包含一个公共的和可选的私人类。 如果这些类只在公共类内部使用,那么这很有用。 另外公共类也可以包含内部类。

尽pipe在单个源文件中有一个或多个私有类是好的,但我认为使用内部类和匿名类更具可读性。 例如,可以使用匿名类在公共类中定义一个Comparator类:

  public static Comparator MyComparator = new Comparator() { public int compare(Object obj, Object anotherObj) { } }; 

Comparator类通常需要一个单独的文件才能公开。 这样它就与使用它的类捆绑在一起。

是的,尽可能多的!

但是,每个文件中只有一个“公共”类。

除了匿名内部类外,另一个用途是实现公共接口的私有内部类( 请参阅本文 )。 外部类可以访问内部类的所有私有字段和方法。

这使您可以创build两个紧密耦合的类,例如模型及其视图,而不用公开任何一个的实现。 另一个例子是一个集合及其迭代器。

一般来说,每个文件应该有一个类。 如果你这样组织,那么当你search一个类的时候,你只需要search这个名字的文件。

当一个类最好使用一个或多个小型辅助类来实现的时候是个例外。 通常,当这些类存在于同一个文件中时,代码最容易遵循。 例如,您可能需要一个小的“元组”包装类来在方法调用之间传递一些数据。 另一个例子是实现Runnable或Callable的“任务”类。 他们可能是如此之小,以至于他们最好与创build和调用他们的父类相结合。

.java文件被称为编译单元。 每个编译单元可以包含任意数量的顶级类和接口。 如果没有公共的顶级types,那么编译单元可以被命名为任何东西。

 //Multiple.java //preceding package and import statements class MyClass{...} interface Service{...} ... //No public classes or interfaces ... 

编译单元中只能有一个公共类/接口。 cu必须与这个公共顶级types完全一致。

 //Test.java //named exactly as the public class Test public class Test{...} //!public class Operations{...} interface Selector{...} ... //Other non-public classes/interfaces 

主要方法的重点 – 第1部分

第2部分

(关于第2部分涵盖的课程数量和访问级别的要点)

我认为应该是“每个.java文件只能有一个非静态顶级公共类”。 不是吗?

是的,你可以创build多个公共类,但它必须是一个嵌套类。

 public class first { public static void main(String[] args) { // TODO Auto-generated method stub } public class demo1 { public class demo2 { } } } 

是的它可以,但是在任何包中只能有一个公共类,因为java编译器创build与公共类名称相同的.Class文件。因此,如果它们多于一个公共类,将很难select编译器应该是什么类的文件的名字。

是的,200%

例:

 class A { void methodDeclaration() { System.out.println("!!!"); } } class B { public static void main(String[] args) { new A().methodDeclaration(); } } 

变化…一个这样的例子将是一个匿名类 (当使用事件监听器等时你会遇到这些)。

如果你想实现一个单例,这是一个在你的程序中运行的类,在整个应用程序执行过程中只有一个实例在内存中,那么实现一个单例的方法之一是将一个私有的静态类嵌套在公共类。 然后内部私有类只有在调用访问私有实例的公共方法时才会实例化自己。

看看这个wiki文章,

https://en.wikipedia.org/wiki/Singleton_pattern

这个概念需要一段时间来咀嚼。

在.java文件中,只能有一个公共顶级类,其名称与文件相同,但可能有几个公共内部类可以导出到每个人并访问外部类的字段/方法: AlertDialog中的AlertDialog.Builder (由'public static'修改)(由'public'修改)

是的您可以在一个.Java文件中包含多个Class。 但是你已经让其中一个公开。 并保存与公共类名称相同的.java文件。 当你编译那个.java文件时,你会得到.java文件中定义的每个类的单独的.class文件。

除此之外,在一个.java文件中定义多个类的方法太多了。

  1. 使用内部类的概念。
  2. 使用匿名类的概念。

是的! .java文件只能包含一个公共类。

如果你想要这两个类是公共的,它们必须放在两个.java文件中:A.java和B.java。

是的,你可以在一个.java文件中有多个类。 其中至多有一个可以公开。 其他人是封装私有的。 他们不能是私人的或受保护的。 如果一个是公开的,那么这个文件必须有这个类的名字。 否则,可以将ANYING作为其名称给予该文件。

在一个文件中有许多类意味着这些类在同一个包中。 所以在这个包内但是不在那个文件中的其他类也可以使用这些类。 而且,当这个包被导入时,导入类也可以使用它们。

对于更详细的调查,你可以在这里访问我的博客文章。

文件中只能有一个公共类顶级类。 该公共类的类名应该是文件的名称。 它可以有许多公共的内部类。

你可以在一个文件中有许多类。 文件中不同级别的可见性限制如下:

顶级课程:
1个公共课
0私人class
任何数量的默认/保护类

内部类:
任何可见度的内部类(默认,私人,保护,公共)

如果我错了,请纠正我。