JAVA一个程序中为什么规定只能有一个公共类

作者&投稿:衅栋 (若有异议请与网页底部的电邮联系)
为什么JAVA文件中只能含有一个Public类?~

每个编译单元都有单一的公共接口,用public类来表现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出错误信息。
一个Java源文件中可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以只有非public类,如果只有一个非public类,此类可以跟文件名不同。

扩展资料:
JAVA类中主要包含属性、方法、构造方法、块以及内部类。
属性用来定义对象的数据;
方法用来定义对象的行为;
构造方法可以用来创建对象;
块能够用来在类加载时执行操作或者在每次实例化前执行通用操作;
内部类作为类的一个成员存在,能够访问外部类的属性和方法。
类是对象的模板,使用类往往都需要首先对类进行实例化,即创建对象。要创建对象必须使用new关键字调用构造方法(constructor)才能完成,构造方法中往往对属性进行实例化,也可以实现其他必要的功能,如读取属性文件等。
构造方法的作用是用来创建对象,使用new关键字调用。构造方法的名字必须与类的名字相同,并且大小写敏感,同时构造方法不能声明返回值类型,可以使用任意一种访问修饰符,但是不能使用其他修饰符进行修饰,如static、final、abstract等修饰符都可以修饰构造方法。
参考资料:
百度百科——Java的Public类

每个编译单元(文件)只能有一个public类。这么做的意思是,每个编
译单元只能有一个公开的接口,而这个接口就由其public类来表示。
我想这或是从软件架构设计和安全性设计上得出的结论。或者说是java的设计者们从这方面的考虑。或许这真的是一个规范,但我没有找到相关资料
不晓得到底有没有这一说话。如果有请知道的同行给出资料来源?
实验如下:
Test3.java源文件:
class Test1
{
int i = 1;

}
class Test2
{
int i = 2;
public static void main(String[] args)
{
System.out.println("main method");
}
}
C:/javatest>javac Test3.java
C:/javatest>java Test2
main method
注:编译不会出错,注意是运行的Test2 因为没有Test3.class文件生成。如果运行Test3则报错
找不到该类
C:/javatest>java Test3
Exception in thread "main" java.lang.NoClassDefFoundError: Test3
Caused by: java.lang.ClassNotFoundException: Test3
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: Test3. Program will exit.
这个错误原因很简单:JVM中的类加载器找不到Test3.class
同时这里也说明了包含main()的类如果想运行则不一定要是public的。

《深入jvm第二版》中有这样一句话:
java虚拟机实例通过调用某个类的main()来运行一个Java程序,而这个main()必须是public
static void 并接收一个字符串数组作为参数,任何拥有这样一个main()的类都可以作为java程
序的起点。
并没有说拥有main()方法的类一定要是public类。

Test7.java源文件:
class Test5
{
int i = 1;

}
public class Test6
{
int i = 2;
public static void main(String[] args)
{
System.out.println("main method");
}
}
如果运行Test7.java 报错:
C:/javatest>javac Test7.java
Test7.java:8: 类 Test6 是公共的,应在名为 Test6.java 的文件中声明
public class Test6
^1 错误
这里说明了文件名必须与public类的类名一致,(如果文件中有public类)
这里可以看出如果有多个public类,那么文件名应该是哪个public类的呢?显然一个java源文件
只能有一个public类。
所以总结如下:一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必
须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。
至于main()不是必须要放在public类中才能运行程序。
以上是通过实验得出的结论,个人认为到这里已经可以了,如果一定要追问到底,可能要问问java
平台的设计者了。或许,人家会说:这是java的设计和jvm的内部体系结构设计造成,这是一个规
范,没有为什么。

不是一个程序只能有一个公共类,是一个java源程序文件只能有一个公共类。而且main方法也不一定需要写在public class里面,写在default class里面也可以作为程序的entry point。

public class test {
}
class test2
{
public static void main(String arg[]) {
System.out.println(1);
}
}
可以写在非公共类里
问题是你运行的时候,需要指向非公共类
如上例子

JAVA一个程序中为什么规定只能有一个公共类
答:不是一个程序只能有一个公共类,是一个java源程序文件只能有一个公共类。而且main方法也不一定需要写在public class里面,写在default class里面也可以作为程序的entry point。

浅谈为什么一个java源文件中只能有一个public类
答:你好:java程序是从一个public类的main函数开始执行的,(其实是main线程),就像C程序是从main()函数开始执行一样。 只能有一个public类是为了给类装载器提供方便。 一个public 类只能定义在以它的类名为文件名的文件中。每个编译单元(文件)都只有一个public 类。因为每个编译单元都只...

浅谈为什么一个java源文件中只能有一个public类
答:只能有一个public类。所以总结如下:一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必 须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。至于main()不是必须要放在public类中才能运行程序。以上是通过实验得出的结论,个人认为到这里已...

Java的程序为什么要定义在一个类中?
答:一个类就是一个对象。。java是面向对象的。。所以类是他最基本也是最根本的思想。。并不是每一个类都必须有main方法。。说通俗点。。main方法就是你不用实例类就能调用的方法。。

编写一个java程序,List l =(List)s 为什么要这样定义,是什么意思?_百度...
答:最简单一个理由:通用。Displayable(可显示对象) 是 List的父类。

Java做一个时间的程序,为什么要除以1000*60*60*24啊。这个数字是什么意...
答:时间是以毫秒来算的,一天等于24小时,一小时等于60分钟,一分钟等于60秒,一秒等于1000毫秒!你的问题说的刚好是天数

一段java程序中为什么要写下面一段话,他是什么意思,根据什么写的?_百 ...
答:导入别的包而已,简单来说,有些功能别人已经写好了,你就不需要自己去写了,导入别人写的包,你直接调用别人的方法,就行了

java工作原理
答:Java工作原理 由四方面组成:(1)Java编程语言 (2)Java类文件格式 (3)Java虚拟机 (4)Java应用程序接口 当编辑并运行一个Java程序时,需要同时涉及到这四种方面。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类 ,通过...

Java做一个时间的程序,为什么要除以1000*60*60*24
答:Java一开始生成的时间的单位是毫秒 除以1000单位就变成秒 再除以60单位就变成分钟 再除以60变成小时 再除以24变成天 1442332689043 ÷ 1000 ÷ 60 ÷ 60 ÷ 24 = 1442332689043 ÷ (1000 × 60 × 60 × 24)如果你想要得到小时,就把24去掉就可以了,根据自己的需求来定。

在一个合法的 Java 源程序文件中定义了 3 个类,其中属性为 public 的...
答:属性为public的类可能有一个。Java关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量。Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。关键字一律用小写字母标识,按...