java源文件中只能有一个public类

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

闲着没事,在网上看到一个帖子在问为什么一个java源文件中只能有一个public类
网上有人这么回答:http://topic.csdn.net/t/20060528/22/4784755.html
、每个编译单元(文件)只能有一个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源文件只能一个public 闲着没事,在网上看到一个帖子在问为什么一个java源文件只能一个public?网上有人这么回答:http://topic.csdn.net/t/20060528/22/4784755.html、每个编译单元(文件)只能一个public。这么做的意思是,每个编 译单元只能一个公开的接口,而这个接口就由其public来表示。我想这或是从软件架构设计和安全性设计上得出的结论。或者说是j 阅读详情

相关推荐

为什么一个java文件里只有一个public class?

问题:一个".java"源文件中是否可以包括多个(不是内部)?有什么限制?   答案:可以有多个,但只能一个public,并且public名必须与文件名相一致。一个文件中可以只有非public,如果只有一个public,此可以跟文件名不同。 为什么一个java源文件只能一个public?   在java编程思想(第四版)一书中有这样3段话(6.4 的访问权限):   1.每个编译单元(文件)都只能一个public,这表示,每个编译单元都有单一的公共接口,用pu

li1593891525的博客 1776

一个 Java 源文件只能一个 public

一、一个.java源文件中是否可以包括多个(不是内部)?有何限制? 答:可以有多个,但只能一个 public,并且 public名必须与文件名相一致。一个文件中可以只有非 public 。如果只有一个,并且是非 public 的,此可以跟文件名不同。 二、为什么一个 Java 源文件只能一个 public Java 编程思想(第四版)一书中有这样 3 段话(6.4 的访问权限): 每个编译单元(文件)都只能一个 public ,这表示,每个编译单元都有单一的公

ChineseSoftware的博客 9177

为什么public修饰的一个包中(即文件中)只能一个

1,无论是硬件还是虚拟系统加载时首先找public型的,main函数又是程序的入口,所以main函数一定在public修饰的中。 2,Javapublic修饰的名必须与文件名一样,才能编译成功。 假设你有两个public,但文件只能一个,所以一个文件只能一个public ...

weixin_43637073的博客 647

随笔:Java源文件中最多只能一个public修饰的

java编程思想中有这样几句话: 每个编译单元(文件)都只能一个public,这表示,每个编译单元都有单一的公共接口,用public来表现。该接口可以按要求包含众多的支持包访问权限的。如果在某个编译单元内有一个以上的public,编译器就会给出错误信息。 public的名称必须完全与含有该编译单元的文件名相同,包含大小写。如果不匹配,同样将得到编译错误。 虽然不是很常用,但编译单元...

cp026la的博客 2399

一个java源文件只能一个public

java文件只有一个public 1、 每个编译单元(文件)只能一个public 。这么做的意思是,每个编译单元只能一个公开的接口,而这个接口就由其public 来表示。 2、 java程序的入口是main方法,所以被定为public的这个里一定是含有main方法的,而且该的名称要和文件名一致,因为虚拟机开始要找main的。(同个源文件有多个公共,编译器就找不到该执行的main方法了) 3、 你可以根据需要,往这个文件里面添加任意多个提供辅助功能的public 权限的。但是如果这

yyj的博客之旅 6969

为什么一个java源文件只能一个public

为什么一个java源文件只能一个publichttps://www.cnblogs.com/zhukunqiang/p/6652787.html 问题:一个".java"源文件中是否可以包括多个(不是内部)?有什么限制?   答案:可以有多个,但只能一个public,并且public名必须与文件名相一致。一个文件中可以只有非public,如果只有一个public,此可以跟文件名不同。 为什么一个java源文件只能一个public?   在java编程思想(

hys741254872的博客 1885

为什么一个java源文件只能一个public

原文地址:https://www.cnblogs.com/zhukunqiang/p/6652787.html 问题:一个".java"源文件中是否可以包括多个(不是内部)?有什么限制? 答案:可以有多个,但只能一个public,并且public名必须与文件名相一致。一个文件中可以只有非public,如果只有一个public,此可以跟文件名不同。 为什么一个java源文件只能一个public? 在java编程思想(第四版)一书中有这样3段话(6.4 的访问权限): 1.每个编

途中的博客 1785

一个java源文件只能一个public的原因

一个源文件里能定义多个class,但是有且只能一个public,非public的名字只要符合java标识符规则就可以,public的名字必须和源文件名一致。至于为什么有这个规定,很多网上的帖子都说是为了方便JVM根据文件名找到main函数入口,个人觉得这种说法不太可信也不太合理。原因如下,JVM读取的是编译后的.class文件而不是.java源文件,而定义在一个源文件中的多个编译后都生成

shujuboke的博客 1856

javapublic_一个java源文件只能一个public

一个java源文件只能一个public一个java源文件可以有多个,但是只能一个public,并且public名一定要与文件名相一致。一个文件中可以只有非public,如果只有一个public,此可以跟文件名不同。一个java源文件只能一个public。分析:一个".java"源文件中是否可以包括多个(不是内部)?有什么限制?一个java源文件可以有多个,但只能...

weixin_33603111的博客 554

java多个源文件_java-源文件中可以有多个,但是最多只能一个public修饰

1、如果源文件中有多个,那么只能一个public;如果有一个public,那么源文件的名字必须与这个的名字完全相同,扩展名是.java。2、如果源文件中没有public,那么源文件的名字可以任意取。这样编译是没问题的,运行时选择主(包含main方法)运行就可以。3、main()方法不是必须要放在public中才能运行程序。但是,一般情况是这样的:1、一般我们都把main()...

weixin_42466723的博客 3837

JAVA为什么只有一个public_浅谈为什么一个Java源文件只能一个public

第一、只有一个public:浅谈为什么一个java源文件只能一个public?1、 每个编译单元(文件)只能一个public 。这么做的意思是,每个编译单元只能一个公开的接口,而这个接口就由其public 来表示。2、 java程序的入口是main方法,所以被定为public的这个里一定是含有main方法的,而且该的名称要和文件名一致,因为虚拟机开始要找main的。(同个...

weixin_35892206的博客 1576

一个JAVA源文件只能定义一个public

java的参数传递只有值传递,没有引用传递。   在一个JAVA源文件只能定义一个public First.java 文件 public class First{     public static void main(String[] args){         System.out.println("first class");     } }...

迷失的羔羊 738

面试题_Java源文件中可以有多个,为什么只能一个public

3、Java源文件中可以有多个,最多只能一个public? 如果源文件中有多个,那么只能一个public;如果有一个public,那么源文件的名字必须和这个的名字完全相同,扩展名为.java java程序的入口是main方法,所以public里面一定含有main方法的,而且该名称和文件名一致,因为JVM开始就要通过文件名寻找mian方法。 如果源文件中没有public,那么源文件的名字和含有main()方法的名字相同,运行时选择主(包含main方法)运行就可以了。 m

qq_41494557的博客 3442
上一篇: php配置php-fpm启动参数及配置详解
下一篇: 复制360doc网页中的内容
qeshining
博客等级 码龄17年 9粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值