为什么在一个java源文件当中只能够有一个public类呢?

无尘剑客 2006-05-28 10:20:35
在一个java源文件当中可以有多个类,但是为什么只能有一个public类呢?而当这个类被修饰为public的话,为什么源文件名必须要与类名相同呢?
希望多多给予指点,先谢谢了。
...全文
3353 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
laban_lin 2006-06-03
  • 打赏
  • 举报
回复
你那是编译,运行一下就错了。说的入口是运行入口,public class 没有main方法也可以编译通过。
无尘剑客 2006-06-03
  • 打赏
  • 举报
回复
我做过一个例子,带有main方法的类不是public类,而没有带main方法的类却是public类。这两个类在同一个源文件下却没有报错这是为什么?
public class publicTest
{
void show()
{
System.out.println("Hello World");
}
}
class testClass
{
public static void main(String args[])
{
publicTest pt=new publicTest();
System.out.println("The main.");
pt.show();
}
}
javabeginner2006 2006-05-30
  • 打赏
  • 举报
回复
1、在源程序中只有一个public类,是为了让程序在执行时只从一个接口导入。如果能有多个public类,程序就无法识别该从哪里导入程序了。比如说:
import java.io.*;
class student
{
private int id;
private float score;
public student(int id,float score)
{
this.id=id;
this.score=score;
}
public int getid()
{
return this.id;
}
public float getscore()
{
return this.score;
}
}
public class stu
{
public static void main(String args[] )
{
student a = new student(1,99);`

System.out.print(a.getid()+"\t");
System.out.println(a.getscore());
}
}
这个程序,如果student也为public类,那程序如果从student类中导入,那就什么都没有,而从stu类里能正确的输出。这样就会产生矛盾,导致系统出错。所有在java中只允许有一个public类。
至于源文件名必须要与类名相同,是为了让系统更好地识别从哪个类中导入(个人见解)。
其实这是java的硬性规定。

zt_soft(Get busy living, Or get busy dying.) 3、编译单元里面可以没有public 类,虽然这种情况不常见,但却是可以的。这时,你就能随意为文件起名字了。
zt_soft(Get busy living, Or get busy dying.) 能不能试举一例呢?让我们这些初学者见识见识(例子请尽量简单些)
zyxzyx10 2006-05-30
  • 打赏
  • 举报
回复
for desgin,see thinking in java.
wh_mimi 2006-05-30
  • 打赏
  • 举报
回复
fff
taoyuming 2006-05-30
  • 打赏
  • 举报
回复
为什么在一个java源文件当中只能够有一个public类呢?
首先,楼主所说的问题所针对的情况是在“一个java源文件中包含多个类时”,这样只能够有一个public类,因为java程序的入口是main方法,所以被定为public的这个类里一定是含有main方法的类,而且该类的名称要和文件名一致,因为虚拟机开始要找main的.
在标准的java代码编写时,无论代码量多少,最好一个源文件里只有一个类或接口(接口也要单独写在一个源文件里),因为JAVA是面向对象的语言,每个类都是抽象的结果,所以每个类都要单独写在一个源文件里.
最好不要在一个.java的源文件里写很多的类.
ztroma 2006-05-30
  • 打赏
  • 举报
回复
正解,其实这些都是理论上的,做实验可以通过,但是实际用处不大
其实包也是,你可以写一个没有包声明的程序,但是在实际项目中,所以的都需要声明包
这是一种规范
zt_soft 2006-05-30
  • 打赏
  • 举报
回复
下面这段代码,文件名取什么都可以,只要后缀为.java就行!
class test1{
public static void main(String[] args){
System.out.println("test1");
}
}

class test2{
public static void main(String[] args){
System.out.println("test2");
}
}
Shine_Moon 2006-05-29
  • 打赏
  • 举报
回复
1、每个编译单元(文件)只能有一个public 类。这么做的意思是,每个编
译单元只能有一个公开的接口,而这个接口就由其public 类来表示。

说得有道理.
编译单元中没有public类,指的是没有公开的接口,但是可以在同一个包内访问的.
public的意思是在包内包外均可访问.
Snoworld 2006-05-29
  • 打赏
  • 举报
回复
如果楼主还不懂,
是能请教开发JAVA的那些老师们了。
zt_soft 2006-05-29
  • 打赏
  • 举报
回复
楼上所说的没错,但是编译单元当中为什么却又可以没有public类了呢?这样不就连一个公开的接口都没有了吗?这样有意义吗?

---------------------------
to tanlei_accp(爱梦薇)

这时,你就能随意为文件起名字了。
无尘剑客 2006-05-28
  • 打赏
  • 举报
回复
楼上所说的没错,但是编译单元当中为什么却又可以没有public类了呢?这样不就连一个公开的接口都没有了吗?这样有意义吗?
zt_soft 2006-05-28
  • 打赏
  • 举报
回复
1、每个编译单元(文件)只能有一个public 类。这么做的意思是,每个编
译单元只能有一个公开的接口,而这个接口就由其public 类来表示。
你可以根据需要,往这个文件里面添加任意多个提供辅助功能的package 权限的类。但是如果这个编译单元里面有两个或两个以上的public 类的话,编译器就会报错。
2. public 类的名字必须和这个编译单元的文件名完全相同,包括大小
写。所以对Widget 类,文件名必须是Widget.java,不能是widget.java 或WIDGET.java。如果你不遵守,编译器又要报错
了。
3. 编译单元里面可以没有public 类,虽然这种情况不常见,但却是可以
的。这时,你就能随意为文件起名字了。
goddie2046 2006-05-28
  • 打赏
  • 举报
回复
因为你要保存文件,而文件名就是这个public类。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧