一个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 并且必须与文件名相同,