一个.java文件内只能写一个class吗
2023-09-27 14:27:46 时间
先给结论:当然不是!!
可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以不含public类,如果只有一个非public类,此时可以跟文件名不同。
为什么一个java源文件中只能有一个public类?
在java编程思想(第四版)一书中有这样3段话(6.4 类的访问权限):
- 每个编译单元(文件)都只能有一个public类,这表示,每个编译单元都有单一的公共接口,用public类来表现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出错误信息。
- public类的名称必须完全与含有该编译单元的文件名相同,包含大小写。如果不匹配,同样将得到编译错误。
- 虽然不是很常用,但编译单元内完全不带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
相关文章
- java如何寻找main函数对应的类
- java面试知识(来自牛客网)
- java JFileChooser选择文件和保存文件
- Java架构师-容器化(二):容器编排技术-K8S(Kubernetes;Docker集群的管理工具;占有80%的市场)【可直接使用阿里云的Kubernetes集群服务,不需要自己搭建,但要付费】
- 基本通用的使用jdbc文件java代码连接数据库
- upload4j安全、高效、易用的java http文件上传框架
- 【详细】如何将Java源码打包成可执行的jar文件(windows&linux系统都是可以执行的)
- 【转】JSch - Java实现的SFTP(文件下载详解篇)
- Java设计模式之七大结构型模式(附实例和详解)
- Java构建指定大小文件
- 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.3.2 随机访问文件
- Java文件:追加内容到文本文件
- 【 java 集合】Collections工具类的使用
- 用JSmooth制作java jar文件的可运行exe文件教程【图文】
- 鸿蒙编译报错:Unable to find the java component with apiVersion 4.
- JAVA将一个目录下的所有文件复制到另一个新目录
- 利用JAVA程序将所有JAVA文件内容添加到一个文件中(代码加注释详解)
- Java实用类
- 查看JAVA的class二进制文件的方法
- java.lang.IllegalStateException: getOutputStream() has already been called for this response解决方案
- Java集合框架:TreeMap
- Java集合框架:HashMap
- 这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试都可)