为什么java源文件中只允许一个public类存在
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类
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;
}
运行结果:编译和执行都通过
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类存在的更多相关文章
- 为什么一个java源文件中只能有一个public类
问题:一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致.一个文件 ...
- 浅谈为什么一个java源文件中只能有一个public类?
声明,本篇文章为转载 转载 http://blog.csdn.net/bareheadzzq/article/details/6562211 最近在一个java文件中实现了几个类,其中一个声明为pub ...
- 第7章 一个java源文件中只能有一个public类
一个Java源文件中最多只能有一个public类, 1)当有一个public类时,源文件名必须与之一致,否则无法编译, 2)如果源文件中没有一个public类,则文件名与类中没有一致性要求. 至于ma ...
- 一个.java源文件中可以有多个类吗?(内部类除外)有什么条件?
一个.java源文件中可以有多个类吗?(内部类除外)有什么条件?带着这个疑惑,动手建几个测试类, 揭开心中的疑惑.以下是解开疑惑过程: package test;/** * 一个.java源文件中可以 ...
- java---面试题---.java"源文件中可以包括多个类(不是内部类)
答题时,先答是什么,再答有什么作用和要注意什么 一个".java"源文件中可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致,main方法只能写在 ...
- JAVA源文件中可以包含多个类
可以的,一个“.java”源文件里面可以包含多个类,但是只允许有一个public类,并且类名必须和文件名一直:例如: package test; public class test { } class ...
- .java 文件中只能定义一个public class 且与文件名相同
- java源文件中是否必须要有一个public类?
java源文件中不必有一个public类,如果没有public类的话,那么文件名可以是任意合法名称,且编译完成之后如果该源文件中有多个独立的类,则会生成多个对应的.class文件.
- 一个java源文件中为什么只能有一个public类。
我们都遇到过一个源文件中有多个java类,但当第一个类使用public修饰时,如果下面还有类使用public修饰,会报错.也就是是说一个java源文件最多只能有一个public类. 当有一个publi ...
随机推荐
- js中innerHTML与innerText的用法与区别
用法: <div id="test"> <span style="color:red">test1</span> te ...
- VC++共享数据段实现进程之间共享数据
当我写了一个程序,我希望当这个程序同时运行两遍的时候,两个进程之间能共享一些全局变量,怎么办呢?很简单,使用VC\VC++的共享数据段.; #pragma data_seg()//恢复到正常段继续编程 ...
- 深入浅出Win32多线程设计之MFC的多线程-线程与消息队列(经典)
1.创建和终止线程 在MFC程序中创建一个线程,宜调用AfxBeginThread函数.该函数因参数不同而具有两种重载版本,分别对应工作者线程和用户接口(UI)线程. 工作者线程 CWinThread ...
- 模式匹配KMP
字符串朴素模式匹配算法的2种实现: //1.朴素的模式匹配算法,用while实现 int StrStr_While(const char* pStr, const char* pSub, int* p ...
- 第五章:输入输出(IO)管理
I/O设备概念: 指计算机内部除中央处理器和内存之外的全部设备,通常也称为外部设备. I/O设备分类: ·按交互对象分类: ·人机交互设备 ·与计算机或其它电子设备交互的设备 ·计算机间的同信 ...
- 以libevent网络库为引:网络通信和多线程
1. windows下编译及使用libevent http://www.cnblogs.com/luxiaoxun/p/3603399.html 2. <<libevent学习资料&g ...
- Ibatis的分页机制的缺陷
我们知道,Ibatis为我们提供了可以直接实现分页的方法 queryForList(String statementName, Object parameterObject, int skipResu ...
- 幻世(OurDream)2D图形引擎使用教程11——播放媒体文件(1)
声明:本教程版权归Lizcst Software Lab所有,欢迎转载,但是转载必须保留本段声明文字,并注明文章来源:http://blog.csdn.net/kflizcst 谢谢合作! 播放媒体是 ...
- 【转】java--final
1.final数据 许多程序设计语言都有自己的办法告诉编译器某个数据是“常数”.常数主要应用于下述两个方面: (1) 编译期常数,它永远不会改变 (2) 在运行期初始化的一个值,我们不希望它发生变化 ...
- c语言利用指针计算字符串的长度
可以用strlen函数,这里我们自己写一个. 注意:不能用scanf,scanf一遇到空格就认为输入结束.应该用gets(),遇到换行符或EOF结束.说明可以接受空格. #include<cst ...