关于Java源文件中public类的问题
结论:
一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必须与之一致,否则无法编译;
如果源文件中没有一个public类,则文件名与类中没有一致性要求;
至于main()不是必须要放在public类中才能运行程序。
实验如下:
Test3.java源文件:
class Test1
{
int i = 1;
}
class Test2
{
int i = 2;
public static void main(String[] args)
{
System.out.println("main method");
}
}
C:/javatest>javac Test3.java
C:/javatest>java Test2
main method
注:编译不会出错,注意是运行的Test2 因为没有Test3.class文件生成。如果运行Test3则报错
找不到该类
C:/javatest>java Test3
Exception in thread "main" java.lang.NoClassDefFoundError: Test3
Caused by: java.lang.ClassNotFoundException: Test3
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: Test3. Program will exit.
这个错误原因很简单:JVM中的类加载器找不到Test3.class ,同时这里也说明了包含main()的类如果想运行则不一定要是public的。
《深入jvm第二版》中有这样一句话:
java虚拟机实例通过调用某个类的main()来运行一个Java程序,而这个main()必须是public static void 并接收一个字符串数组作为参数,任何拥有这样一个main()的类都可以作为java程序的起点。
并没有说拥有main()方法的类一定要是public类。
Test7.java源文件:
class Test5
{
int i = 1;
}
public class Test6
{
int i = 2;
public static void main(String[] args)
{
System.out.println("main method");
}
}
如果运行Test7.java 报错:
C:/javatest>javac Test7.java
Test7.java:8: 类 Test6 是公共的,应在名为 Test6.java 的文件中声明
public class Test6
^1 错误
这里说明了文件名必须与public类的类名一致,(如果文件中有public类)
这里可以看出如果有多个public类,那么文件名应该是哪个public类的呢?显然一个java源文件只能有一个public类。
通过上述实验,故能得出开始的结论!
参考:http://blog.csdn.net/bareheadzzq/article/details/6562211
关于Java源文件中public类的问题的更多相关文章
- 为什么java源文件中只允许一个public类存在
1.提出问题 为什么java源文件中只允许一个public类存在? 2.分析问题 问题涉及到的条件:源文件的名字 public类 main方法 一般我们在编写一个源文件的时候: 一个pu ...
- 第7章 一个java源文件中只能有一个public类
一个Java源文件中最多只能有一个public类, 1)当有一个public类时,源文件名必须与之一致,否则无法编译, 2)如果源文件中没有一个public类,则文件名与类中没有一致性要求. 至于ma ...
- java源文件中是否必须要有一个public类?
java源文件中不必有一个public类,如果没有public类的话,那么文件名可以是任意合法名称,且编译完成之后如果该源文件中有多个独立的类,则会生成多个对应的.class文件.
- 为什么一个java源文件中只能有一个public类
问题:一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致.一个文件 ...
- 浅谈为什么一个java源文件中只能有一个public类?
声明,本篇文章为转载 转载 http://blog.csdn.net/bareheadzzq/article/details/6562211 最近在一个java文件中实现了几个类,其中一个声明为pub ...
- Java.基础 -------- 一个Java源文件中可以有很多类,但只能有一个类是public的
一个Java源文件中可以有很多类,但只能有一个类是public的 Java程序是从一个public类main函数开始执行的,只能有一个public是为了给类装载器提供方便,一个publi ...
- java---面试题---.java"源文件中可以包括多个类(不是内部类)
答题时,先答是什么,再答有什么作用和要注意什么 一个".java"源文件中可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致,main方法只能写在 ...
- 1.一个.java源文件中是否可以包括多个类?2...
1.一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制? 答:可以有多个类,但只能有一个public类,并且public的类名必须与文件名相一致. 2.java有没有goto? 答 ...
- JAVA源文件中是否可以包括多个类,有什么限制
JAVA源文件中是否可以包括多个类,有什么限制 解答:一个java源文件中可以包含多个类,每个源文件中至多有一个public类,如果有的话,那么源文件的名字必须与之相同.如果源文件中没有public类 ...
随机推荐
- 收藏:FLASH中键检测与右键屏蔽
原文:http://space.flash8.net/space/?591172/viewspace-708726.html <!DOCTYPE html PUBLIC "-//W3C ...
- BellmanFord 最短路
时间复杂度:O(VE) 最多循环V次,每次循环对每一条边(共E条边)判断是否可以进行松弛操作 最多V次:一个点的最短路,最多包含V-1个点(不包含该点), 如d1->d2->d3-> ...
- dos初始操作和全屏方法
1.初始操作 mount d d:\ ;选择挂载的硬盘 d:\ cd Dos cd MASM ;到达debug/edit/link/masm.exe文件的位置 ;然后可以进行debug/edit xx ...
- linux反向删除文件
Linux反选删除文件 最简单的方法是 # shopt -s extglob (打开extglob模式) # rm -fr !(file1) 如果是多个要排除的,可以这样: # rm -r ...
- MySQL5.5登录密码忘记了,怎嘛办?
1.关闭正在运行的MySQL. 2.打开DOS窗口,转到mysql\bin目录. 3.输入mysqld --skip-grant- tables回车.如果没有出现提示信息,那就对了. 4.再开一 ...
- python写GUI
图形用户界面 本文利用wxpython wx包中的方法都是以大写的字幕开头 import wx def load(event): file = open(filename.GetValue()) co ...
- DataSet in Machine Learning
一.UCI Wine dataset:https://archive.ics.uci.edu/ml/datasets/Wine,包含178个样本,每个样本包含13个与酒的化学特性的特征,标签有1,2, ...
- loadrunner java ssh
s D:\TestCase\20170703_docker_rongqiyun\tc_docker_ssh_docker_push\Actions.java /* * LoadRunner Java ...
- tomcat中配置servlet.xml的JNDI或JDBC连接数据库【原】
tomcat中配置servlet.xml的JNDI或JDBC连接数据库 一. JNDI 1. tomcat环境 找到X:\xxx\......\apache-tomcat-6.0.39\conf\se ...
- git初学 常用命令
初学备忘: MAC 下 clone 项目的时候 记得 sudo -s 输入密码 获得 管理员权限,普通权限看不到 .babelrc 等 点开头的文件 ____——____——____——____ ...