先给结论:当然不是!!

可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以不含public类,如果只有一个非public类,此时可以跟文件名不同。

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

 在java编程思想(第四版)一书中有这样3段话(6.4 类的访问权限):

  1. 每个编译单元(文件)都只能有一个public类,这表示,每个编译单元都有单一的公共接口,用public类来表现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出错误信息。
  2. public类的名称必须完全与含有该编译单元的文件名相同,包含大小写。如果不匹配,同样将得到编译错误。
  3. 虽然不是很常用,但编译单元内完全不带public类也是可能的。在这种情况下,可以随意对文件命名。

例如:

package ab;

class Alpha {
private int privateVar;
Alpha(int _privateVar){ //构造方法
privateVar = _privateVar;
}
boolean isEuqualTo(Alpha b) {
if (this.privateVar == b.privateVar) return true;
else return false;
}
}
public class Beta{
public static void main(String[] args){
Alpha a = new Alpha(1);
Alpha b = new Alpha(2);
System.out.println(a.isEuqualTo(b));
}
}

编译会产生两个.class文件,且能正确运行。

其次,这里并没有要求main函数只能写在public类中(虽然我们通常是这么做的)。我们可以把main函数写在非public类中,例如新建test.java:

package exercise;

public class test {
public static void func(){
System.out.println(1);
}
} class test2{
public static void main(String[] args){
System.out.println(2);
}
}

Java里面就是main方法(这个main方法只需要放到任意一个类中即可)。当你用java执行这个类时,系统会寻找main方法作为入口执行。

所以这里test类中的函数根本没有执行,结果只打印出2。

参考链接:

1、https://www.cnblogs.com/zhukunqiang/p/6652787.html

2、https://blog.csdn.net/bareheadzzq/article/details/6562211

3、https://www.jianshu.com/p/8624e27ae45d

最新文章

  1. JavaScript数组删除重复元素(去重)的方法
  2. HDU 4258 Covered Walkway 斜率优化DP
  3. VB6 GDI+ 入门教程[3] 笔、刷子、矩形、椭圆绘制
  4. mongodb 和 mysql 的对照
  5. 列出当前ARM开发板系统加载的模块
  6. 高放的c++学习笔记之模板与泛型编程
  7. javascript写的新闻滚动代码
  8. jsp九九乘法表
  9. java IO回想小结
  10. 微软的权限框架Asp.Net Identity
  11. ubuntu下的apache的虚拟主机的配置
  12. JFile的导入xlsx与xls
  13. hexo常用命令
  14. JAVA基础复习与总结<五> String类_File类_Date类
  15. linux c 时间函数
  16. alpha冲刺5/10
  17. Add-Migration : 无法将“Add-Migration”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
  18. openal支持的通道数和声道数
  19. 20155334 《网络攻防》 Exp 8 Web基础
  20. mysql数据类型长度

热门文章

  1. POJ 1127 Jack Straws (线段相交)
  2. WSAStartup()函数的使用
  3. 检查浏览器是否有此插件如flash
  4. 51nod1255(栈)
  5. Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题
  6. eclipse 通过svn导入maven工程
  7. cmd 中粘贴复制(转)
  8. shell编程 Shell script 的默认变量($0, $1...)
  9. python进阶02 特殊方法与特殊属性
  10. loj2734「JOISC 2016 Day 2」女装大佬 || 洛谷P3615 如厕计划