繁体   English   中英

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

[英]Can a java file have more than one class?

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

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

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

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

如果要实现公共类,则必须在与该类同名的文件中实现它。 单个文件可以包含一个公共类和一些可选的私有类。 如果这些类仅由公共类在内部使用,这将很有用。 此外,公共类还可以包含内部类。

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

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

    }
  };

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

是的,你想要多少就多少!

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

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

//Multiple.java
//preceding package and import statements

class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...

一个编译单元中只能有一个公共类/接口。 cu 的名称必须与此公共顶级类型完全相同。

//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 部分涵盖的课程数量及其访问级别的要点)

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

public class first {

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

    public class demo1
    {

        public class demo2
        {

        }
    }
}

一般来说,每个文件应该有一个类。 如果你这样组织,那么当你搜索一个类时,你知道你只需要搜索具有该名称的文件。

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

是的,一个 .java 文件中可以有多个类。 其中最多一个可以是公开的。 其他是包私有的。 它们不能是私有的或受保护的。 如果是公共的,则该文件必须具有该类的名称。 否则,任何东西都可以作为它的名称赋予该文件。

在一个文件中有许多类意味着这些类在同一个包中。 因此,该包内但不在该文件中的任何其他类也可以使用这些类。 此外,当该包被导入时,导入类也可以使用它们。

如需更详细的调查,您可以在此处访问我的博客文章。

是 200% ,

例子:

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

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

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

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

如果您希望这两个类是公共的,则必须将它们放入两个 .java 文件中:A.java 和 B.java。

是的,它可以,但是任何包中只能有 1 个公共类,因为 java 编译器创建了与公共类名称同名的 .Class 文件,因此如果它们超过 1 个公共类,则很难选择编译器认为类文件的名称应该是什么。

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

如果要实现单例,即在整个应用程序执行期间内存中只有一个实例的程序中运行的类,那么实现单例的方法之一是将私有静态类嵌套在公共类中. 然后内部私有类仅在调用其访问私有实例的公共方法时才实例化自身。

看看这篇维基文章,

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

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

在一个.java文件中,只能有一个与文件名相同的公共顶级类,但可能有几个公共内部类可以导出给每个人并访问外部类的字段/方法,例如: AlertDialog.Builder在(由“公共静态”修饰的) AlertDialog (由“公共”修饰的)

是 一个 .Java 文件中可以包含多个类。 但是您已经将其中之一设为 Public 。 并保存与公共类名称相同的 .java 文件。 当您编译该 .java 文件时,您将为 .java 文件中定义的每个类获得单独的 .class 文件。

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

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

变化......一个这样的例子是匿名类(在使用事件侦听器等时你会遇到很多)。

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

您可以在一个文件中包含多个类。 文件中不同级别的类可见性的限制如下:

顶级课程:
1 公开课
0 私人课程
任意数量的默认/受保护类

内部类:
具有任何可见性的任意数量的内部类(默认、私有、受保护、公共)

如果我错了,请纠正我。

是的,它可以。 但是,每个 .java 文件只能有一个公共类,因为公共类必须与源文件同名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM