小伙伴在写Java文件时会不会产生这样子的疑问呢?为什么程序的入口一定要是public static void main(String args[])这个样子的呢?可以将public 或static去掉吗?或者不加参数可以吗?为什么函数的返回的是void?有问题,当然得去实践才能得到答案,接下来的内容将为大家解决这些疑惑。
首先将public去掉看看运行效果
代码如下:
运行效果图:
从图片可以看到编译通过,但是运行不了,报错了,来分析下原因:
使用public修饰主函数的话,可以让其他类来访问这个函数,如果改用其他修饰(如protected,private),其他类访问不了该方法。因为Java的程序是通过Java的虚拟机JVM来调用的,属于外部调用,所以需要使用public修饰,否则虚拟机无法调用。所以public不能够去掉。
其次是去掉static,看看运行效果。
出现了同样的错误
下面来分析一下原因:
首先因为Java是一门面向编程的语言,除了静态方法可以直接调用之外,其他方法的调用必须通过对象创建的实例来调用,对于主函数来说,是通过Java的虚拟机去调用的,属于外部调用,所以 需要static来声明该方法是静态方法,可以直接通过类名调用。
然后将void改为int,让其有返回值。
依旧报错,显示mian方法必须返回空类型值。同样的来分析一下原因。
首先,学过其他语言的人都知道,一个方法有返回值,那么在调用这个函数的时候会返回一个值,如果不对其返回的数进行操作,那么则会报错。在Java中,因为main函数是栈中最底层的函数,若出现返回值时,JVM无法对返回值进行上抛,如果有返回值难道抛给操作系统么?这显然是不可能的。看到这或许有人会疑问,为什么C语言的main函数可以有返回值,那是因为C语言在运行时是直接在操作系统运行的,若返回的是0,则说明程序是正常运行的。
现在来看看最后一个疑问,是关于main函数的参数的。
首先先将参数去掉,
如图所示,报错了。再将参赛的类型改变一下,发现同样报错了。
再改一下参数的名字
此时发现可以运行了,由此可以得到,main方法中的参数,不能删除,也不能对其的类型进行更改,必须是String型。下面来分析下原因。
因为args[]提供了与虚拟机交互的一种途径和方法。能够为程序使用者在命令行状态下与程序交互提供了一种手段。这是Java语言所规定的,在平常运用中,可以向args[]这个字符串数组传递参数。
下面来举个例子运用一下这个参数。
代码如下:
class Print{
public static void main(String args[]){
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
}
运行截图:
使用这些参数的方法是在编译完程序之后,在运行程序时,在后面加上所想传的参数,如果有多个参数,则用空格隔开,如上图所示。
至此,关于主函数的为什么一定要是**public static void main(String args[])**的原因已经讲解完了,如果大家还有什么不懂,欢迎大家一起交流
来源:CSDN
作者:芷若丶初见
链接:https://blog.csdn.net/qq_44658573/article/details/104618353