java源文件中最多只能有一个private

Python021

java源文件中最多只能有一个private,第1张

是。根据查询相关公开信息显示,private:修饰成员类,表明是一个私有类,只能被顶层类访问,每个编译单元(文件)都只能有一个private类。这表示,每个编译单元都有单一的私用接口,用private类来表现,该接口可以按要求包含众多的支持包访问权限的类。

每个编译单元都有单一的公共接口,用public类来表现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出错误信息。

一个Java源文件中可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以只有非public类,如果只有一个非public类,此类可以跟文件名不同。

扩展资料

JAVA类中主要包含属性、方法、构造方法、块以及内部类。

属性用来定义对象的数据

方法用来定义对象的行为

构造方法可以用来创建对象

块能够用来在类加载时执行操作或者在每次实例化前执行通用操作

内部类作为类的一个成员存在,能够访问外部类的属性和方法。

类是对象的模板,使用类往往都需要首先对类进行实例化,即创建对象。要创建对象必须使用new关键字调用构造方法(constructor)才能完成,构造方法中往往对属性进行实例化,也可以实现其他必要的功能,如读取属性文件等。

构造方法的作用是用来创建对象,使用new关键字调用。构造方法的名字必须与类的名字相同,并且大小写敏感,同时构造方法不能声明返回值类型,可以使用任意一种访问修饰符,但是不能使用其他修饰符进行修饰,如static、final、abstract等修饰符都可以修饰构造方法。

参考资料:

百度百科——Java的Public类

每个编译单元(文件)只能有一个public类。这么做的意思是,每个编

译单元只能有一个公开的接口,而这个接口就由其public类来表示。

我想这或是从软件架构设计和安全性设计上得出的结论。或者说是java的设计者们从这方面的考虑。或许这真的是一个规范,但我没有找到相关资料

不晓得到底有没有这一说话。如果有请知道的同行给出资料来源?

实验如下:

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类。

所以总结如下:一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必

须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。

至于main()不是必须要放在public类中才能运行程序。

以上是通过实验得出的结论,个人认为到这里已经可以了,如果一定要追问到底,可能要问问java

平台的设计者了。或许,人家会说:这是java的设计和jvm的内部体系结构设计造成,这是一个规

范,没有为什么。