• 为什么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类无关。


  • 相关阅读:
    [asp.net core]SignalR一个例子
    [Asp.net core]bootstrap分页
    ${pageContext.request.contextPath}无法解析
    [Java web]Spring+Struts2+Hibernate整合过程(2)
    [Java web]Spring+Struts2+Hibernate整合过程
    java.lang.IllegalStateException: Failed to load ApplicationContext
    [Struts2]配置文件
    unihtmlmemo使用
    ADO序列
    variant和rawbytestring相互转换
  • 原文地址:https://www.cnblogs.com/pangblog/p/3292070.html
Copyright © 2020-2023  润新知