为什么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类

 

由上面的实验中可以得知执行程序必须执行有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类无关。


原文地址:https://www.cnblogs.com/pangblog/p/3292070.html