一个Java文件中可以定义多个Class么?

2020-09-10  本文已影响0人  WowBoard

一个Java文件可以定义多个Class么 ?

答案肯定是可以的。

下面我们测试一下:

//Test.java
class A {}

class B {}

class C {}

class D {}

创建一个Test.java文件, 在这个文件中定义了4个类 分别是A,B,C,D。
然后在编译一下这个Test.java文件,看会发生什么?

[boardMacBook-Pro ~]$ javac Text.java
[boardMacBook-Pro ~]$

编译并没有报错,

[boardMacBook-Pro ~]$ ls
A.class    B.class    C.class    D.class Test.java

可以看到Test.java 将被编译成4个class文件

但是事情并未结束~
我们给Test.java 其中一个类加上一个public试试?

//Test.java
public class A {}

class B {}

class C {}

class D {}

我们重新编译编译一下Test.java文件

[boardMacBook-Pro ~]$ rm -rf *.class 
[boardMacBook-Pro ~]$ javac Text.java
Test.java:4: 错误: 类 A 是公共的, 应在名为 A.java 的文件中声明
public class A {
       ^
1 个错误

可以看到编译出错了, 并没有通过编译, 其实这里如果你用IDE工具的话,在编辑器内就会标注红色提示错误了!

错误的提示是,类 A 是公共的, 应在名为 A.java 的文件中声明 也就是说在java中,使用public声明的类 类名必须和文件名一致

那接下来我们将public class A 换成 public class Test 试试?

//Test.java
public class Test {}

class B {}

class C {}

class D {}
[boardMacBook-Pro ~]$ javac Text.java
[boardMacBook-Pro ~]$ ls
Test.java:4: 错误: 类 A 是公共的, 应在名为 A.java 的文件中声明
B.class    C.class    D.class   Test.class Test.java

编译可以通过了,并声称了对应的class文件

那我们在试试,将其他的class 也声明成public呢?

//Test.java
public class Test {}

public class B {}

public class C {}

public class D {}
[boardMacBook-Pro ~]$ rm -rf *.class
[boardMacBook-Pro ~]$ javac Test.java
Test.java:6: 错误: 类 B 是公共的, 应在名为 B.java 的文件中声明
public class B {}
       ^
Test.java:8: 错误: 类 C 是公共的, 应在名为 C.java 的文件中声明
public class C {}
       ^
Test.java:10: 错误: 类 D 是公共的, 应在名为 D.java 的文件中声明
public class D {}
       ^
3 个错误

编译报错了,根据错误提示,我们可以理解成只要是public声明的class 必须与java源文件名称相同!

通过以上测试我们可以得出以下结论:
1,单独的java文件中可以声明多个class文件
2,public的类不是必须的
3,在Java源文件中每定义一个class在编译的时候就会生成一个对应的class文件
4,在java源文件中只能有一个使用public声明的class 并且必须与文件名相同,

上一篇 下一篇

猜你喜欢

热点阅读