JAVA中public class 和class的区别

如果不想看分析的部分可以直接翻到最后看结论

1.public class

我们先来看下public class

public class Test{
	public static void main(String[] args){
		System.out.pringln("这是一个public class");
	}
}

这种可以说是最普通的一种类,也是我们最常见的一种类。
当我们用javac命令去编译的时候,假如类名与文件名不一致,则会报错。

我将上面的java文件命名为Tewt.java
在cmd中运行如下命令

javac Tewt.java

果不其然,报错了

java class t java class Tom public classE_Test


错误提示为 类 Test 是公共的, 应在名为 Test.java 的文件中声明

当我们把java文件改为Test.java时
再运行一次javac命令

javac Test.java

这次并没有报任何错误,并且在文件夹中多了一个Test.class文件

这说明了一个问题:
public class的类名必须要和java文件名一致,否则无法通过编译。
因此可以推出一个java文件只能有一个public class。
否则,如果一个java文件有两个public class的话,那么文件名用其中一个类名,编译时就会报另一个类名的错。

2.class

再来看下没有public的class
我把Test.java修改成如下

class A{}
class B{}
class C{}
class D{}

javac以下

javac Test.java

您猜怎么着!编译出了4个class文件

java class t java class Tom public classE_Test_02


这说明了另外一个问题:

没有public修饰的class,名字可以不和文件名一致;
一个java文件可以包含多个class,但是public class只能有一个,当然也可以没有public class;
每个类在编译后都会生成一个class文件

3.总结

1.一个java文件可以没有public修饰的类。但如果有的话,只能有一个,并且文件名需要和类名一致。

2.一个java文件可以有多个类,编译后每个类都会生成一个class文件,使用术语来说就是字节码文件

3.下面是补充内容,如果初学阶段不知道什么意思可以不用理解,学到后面自然会知道。
1.字节码文件是由JVM(java虚拟机)编译java文件而来,里面是一些可以由CPU直接识别的二进制的机器语言。
2. 我们都说JAVA具有很好的移植性,跨平台能力比较强,这正是由于JVM把JAVA文件编译成class文件。对于源代码来说,无论什么操作平台(系统,比如windows,linux,unix),只要装上了JRE(Java Runtime Environment,java运行环境),就能运行java文件。

好了,这就是今天份public class和class的区别。