1.提出问题

为什么java源文件中只允许一个public类存在?

2.分析问题

问题涉及到的条件:源文件的名字    public类     main方法

一般我们在编写一个源文件的时候:

一个public类   一个main方法    public类名和源文件名字相同     main方法写在public类中

3.验证

3.1 源文件中不存在public类

1.源文件中没有public只是提供一个main方法

class Test2{
int i=2;
} class Test3{
int i=3;
} class Test1{
public static void main(String[] args){
System.out.println("当前类名为:Test1");
}
}

执行结果:

编译通过

     执行有main方法的类Test1.class的时候成功

执行没有main方法的类Test2.class的时候没有成功

结论:public不是编译和执行必须的;main方法是执行必须的

3.2源文件中存在public类

由上面的实验中可以得知执行程序必须执行有main方法的类;那么在此基础上令public类分别满足一下条件来做实验。

1.与源文件名字不相同(main方法在类中)

public class Test2{
public static void main(String[] args){
System.out.println("当前类名为:Test1");
} } class Test3{
int i=3;
} class Test1{
int i=2;
}

运行结果:

编译不通过

2.与源文件名字相同(main方法在类中)

 class Test2{
int i=2;
} } class Test3{
int i=3;
} public class Test1{
public static void main(String[] args){
System.out.println("当前类名为:Test1"); }

运行结果:

结论:public如果存在,public类的类名必须和源文件名字相同;

这个也就是解释了为什么只能够有一个public类,我们的源文件名字只有一个如果拥有很多的public类那么源文件就没有办法起名字了。

3.main方法不在public类中

class Test2{
public static void main(String[] args){
System.out.println("当前类名为:Test2"); } } class Test3{
int i=3;
} public class Test1{
int i=2;
}

运行结果:编译和执行都通过



结论:public类中不必要存在main函数

4.总结


《深入jvm第二版》中有这样一句话:java虚拟机实例通过调用某个类的main()来运行一个Java程序,而这个main()必须是public

static void 并接收一个字符串数组作为参数,任何拥有这样一个main()的类都可以作为java程序的起点。并没有说拥有main()方法的类一定要是public类。

从上面的实验中得出的结论:程序分为编译和执行两个阶段。

4.1编译阶段

public类存在的时候,程序编译和public类有关系。和main()函数无关。

如果存在public类,那么一个源文件中只能够存在一个而且要与源文件的名字相同。----------否则编译会报错

如果不存在public类,那么程序也可以成功编译。

4.2执行阶段

只有存在main()方法程序就可以执行,和public类无关。

为什么java源文件中只允许一个public类存在的更多相关文章

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

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

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

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

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

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

  4. 一个.java源文件中可以有多个类吗?(内部类除外)有什么条件?

    一个.java源文件中可以有多个类吗?(内部类除外)有什么条件?带着这个疑惑,动手建几个测试类, 揭开心中的疑惑.以下是解开疑惑过程: package test;/** * 一个.java源文件中可以 ...

  5. java---面试题---.java"源文件中可以包括多个类(不是内部类)

    答题时,先答是什么,再答有什么作用和要注意什么 一个".java"源文件中可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致,main方法只能写在 ...

  6. JAVA源文件中可以包含多个类

    可以的,一个“.java”源文件里面可以包含多个类,但是只允许有一个public类,并且类名必须和文件名一直:例如: package test; public class test { } class ...

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

  8. java源文件中是否必须要有一个public类?

    java源文件中不必有一个public类,如果没有public类的话,那么文件名可以是任意合法名称,且编译完成之后如果该源文件中有多个独立的类,则会生成多个对应的.class文件.

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

    我们都遇到过一个源文件中有多个java类,但当第一个类使用public修饰时,如果下面还有类使用public修饰,会报错.也就是是说一个java源文件最多只能有一个public类. 当有一个publi ...

随机推荐

  1. 解决 Xcode7 中多个模拟器的办法

    转自: http://www.oschina.net/code/snippet_196012_50574 1.关闭xcode 2.终端输入 sudo killall -9 com.apple.Core ...

  2. 编译kernel:内核makefile的作用

    < 嵌入式linux应用完全开发手册 > 韦东山 内核Makefile的使命: 编译哪些内核文件? 读取各级子目录makefile, .config, auto.conf, Kbuild, ...

  3. 自定义UIViewController与xib文件关系深入分析

    6月14日 上海 OSC 源创会开始报名啦,有很多机械键盘送哦!!! 用xcode模板向工程加入UIViewController sub class的时候,如果选中了with xib for inte ...

  4. new Intent(String action,Uri uri)构造器说明

    这是myDiary这个工程下MainActivity中的protected void onListItemClick(ListView l, View v, int position, long id ...

  5. Android 应用内HttpClient 与 WebView 共享 Cookie

    DefaultHttpClient httpclient=....; String toUrl="https://cap.cityu.edu.hk/studentlan/details.as ...

  6. CGroup 介绍、应用实例及原理描述

    CGroup 介绍 CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制.记录.隔离进程组 (process groups) 所使用的物力资源 (如 cpu ...

  7. oschina 开发工具

    开发工具 29反编译工具 26持续集成系统 19SQL注入工具 139Git开源工具 138Java开发工具 43.NET开发工具 85PHP开发工具 96C/C++开发工具 70Ruby/Rails ...

  8. 解决TCP网络传输“粘包”问题

    当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...

  9. Linux定义系统提示符的变量:PS1

  10. 【原创】Android 系统稳定性 - ANR(二)

    文章都为原创,转载请注明出处,未经允许而盗用者追究法律责任. 很久之前写的了,留着有点浪费,共享之.编写者:李文栋P.S. OpenOffice粘贴过来后格式有些混乱. 1.2 如何分析ANR问题 引 ...