为什么java源文件中只允许一个public类存在

本文探讨了Java源文件中Public类的存在规则及其与源文件名称的关系,并通过实验验证了Public类对于编译和执行的影响,明确了Main方法的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值