先给结论:当然不是!!

可以有多个类,但只能有一个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

一个.java文件内只能写一个class吗的更多相关文章

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

    问题:一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致.一个文件 ...

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

    声明,本篇文章为转载 转载 http://blog.csdn.net/bareheadzzq/article/details/6562211 最近在一个java文件中实现了几个类,其中一个声明为pub ...

  3. 常用代码之五:RequireJS, 一个Define需要且只能有一个返回值/对象,一个JS文件里只能放一个Define.

    RequireJS 介绍说一个JS文件里只能放一个Define,这个众所周知,不提. 关于Define,它需要有一个返回值/对象,且只能有一个返回值/对象,这一点却是好多帖子没有提到的,但又非常重要的 ...

  4. 第7章 一个java源文件中只能有一个public类

    一个Java源文件中最多只能有一个public类, 1)当有一个public类时,源文件名必须与之一致,否则无法编译, 2)如果源文件中没有一个public类,则文件名与类中没有一致性要求. 至于ma ...

  5. .java 文件中只能定义一个public class 且与文件名相同

  6. Java关于条件判断练习--统计一个src文件下的所有.java文件内的代码行数(注释行、空白行不统计在内)

    要求:统计一个src文件下的所有.java文件内的代码行数(注释行.空白行不统计在内) 分析:先封装一个静态方法用于统计确定的.java文件的有效代码行数.使用字符缓冲流读取文件,首先判断是否是块注释 ...

  7. 一个.java文件中是否可以有多个类

    前段时间,有个同事问到我这个问题:一个.java文件中是否可以有多个类? 答案:可以有多个类,但最多只能有一个被public修饰的class. 且若这个.java文件中有一个public类型的clas ...

  8. 一个项目中:只能存在一个 WebMvcConfigurationSupport (静态文件失效之坑)

    一个项目中:只能存在一个 WebMvcConfigurationSupport 在一个项目中WebMvcConfigurationSupport只能存在一个,多个的时候,只有一个会生效. 静态文件访问 ...

  9. 一个Java文件至多包含一个公共类

    编写一个java源文件时,该源文件又称为编译单元.一个java文件可以包含多个类,但至多包含一个公共类,作为编译时该java文件的公用接口,公共类的名字和源文件的名字要相同,源文件名字的格式为[公共类 ...

随机推荐

  1. EIP权限工作流升级说明-2019/5/23

    增加mysql版本在线预览地址:http://www.eipflow.com:3000/

  2. Cinder服务使用

    Cinder环境 Cinder配置 重新创建卷组cinder-volumes [root@openstack centos]# vgremove cinder-volumes Configuratio ...

  3. MySQL学习中,遇到的问题记录

    一.安装mysql时,报错:1045 原因:因为之前安装过mysql,之后再安装会出现这个问题. 解决: 删除之前的残留就好了 方法:清除mysql之前的历史残留

  4. uoj#335. 【清华集训2017】生成树计数(prufer序列+生成函数+多项式)

    传送门 好神仙的题目--又一次有了做一题学一堆的美好体验 据说本题有第二类斯特林数+分治\(FFT\)的做法,然而咱实在看不懂写的是啥,题解贴这里,有兴趣的可以自己去瞅瞅,看懂了记得回来跟咱讲讲 前置 ...

  5. 洛谷P3688/uoj#291. [ZJOI2017]树状数组

    传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...

  6. eosiolib文件解析

    Source base on EOS version: 1.0.5,some photo except.   在eos源码中,eosiolib库在源码中的位置如下: 在\eos\contracts\e ...

  7. 双系统安装Linux的步骤以及一些误区

    1.一次安装失败引发的思考 笔者安装双系统(Windows 7+ Ubuntu 16.01)时参考了如何安装win10和linux [ubuntu14]双系统这篇百度经验,却发现安装后并没有如期进入U ...

  8. JS 时间格式为/Date(1332919782070)/ 转化为正常的格式

    原理是取中间的毫秒数,再转换成js的Date类型 function ChangeDateFormat(val) { if (val != null) { var date = new Date(par ...

  9. C# ExpandoObject用法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  10. Jmeter4.0----测试数据说明之查看结果树(10)

    1.说明 在用jmeter辅助测试的过程中,我们经常需要根据接口返回的相关信息对我们测试的系统做相应的分析,所以呢,常常会用到jmeter中不同类型的监听器获取接口信息. 2.步骤 第一步: 线程组 ...