main方法详解

2022-09-04 11:55:10 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

学习Java有一段时间了,一直没用过博客来写写自己在学习过程中遇到的问题和学习心得,看到别人在诸如博客这样的社区写一些总结觉得挺好的。索性,今天开始自己也用起博客记录学习。一来呢,能更好的总结学习知识。二来,有问题更有机会让别人指出,对自己学习也很有帮助。话不多说,就以main方法详解开始今天的主题吧。

为了表述方便,我先把mian方法写出来:

代码语言:javascript复制
public class Demo {
	public static void main(String[] args) {
		System.out.println("Hello Word");
	}
}

1、为什么是公共的(public)

我们都知道,Java指定了一些可访问的修饰符如:private,protected,public。每个修饰符都有它对应的权限,public权限最大,为了说明问题,我们假设main方法是用private修饰的,那么main方法出了Demo这个类对外是不可见的。那么,JVM就访问不到main方法了。因此,为了保证JVM在任何情况下都可以访问到main方法,就用public修饰。

2、为什么是静态的(static)

静态可以让JVM调用main方法的时候更加方便,不需要通过对象调用。但这么说的话说服力好像还不够,那我们同样先假设没有static。“main”方法写成:

代码语言:javascript复制
public class Demo {
	public void main(String[] args) {
		System.out.println("Hello Word");
	}
}

此时,JVM要调用main方法可以这样做:new Demo().main();对于这种情况来说显然是可以的。但是我们接着看下面这种情况:

代码语言:javascript复制
public class Demo {
	public Demo(String name,int age){
		
	}
	public void main(String[] args) {
		System.out.println("Hello Word");
	}
}

这种情况下,Demo这个类没有了无参构造方法,只有带参的构造方法。此时要创建对象就会调用的带参的构造方法,而带参的构造方法必然是要接受参数的,可是对于JVM来讲,根本就不知道要传递什么参数。所以,将main方法设计成静态的,就避免了这种问题。

3、为什么没有返回值(void)

这个很好理解,假设是有返回值的,JVM调用了main方法,main将数据返回给JVM,main方法一旦返回数据,也就意味着程序结束了,而JVM要这个返回的数据是没有意义的。所以就设计main方法为voi。

4、main

这个没什么好说的,只不过是JVM能识别的一个特殊的函数名而已。

5、String [] args

担心某些程序在启动的时候需要参数,这个我在这里简单演示一下使用方法,好像几乎用不到。

代码语言:javascript复制
public class Demo {
	public void main(String[] args) {
		System.out.println("数组的长度:" args.length);
		for (int i = 0; i < args.length; i  ) {
			System.out.println(args[i] ",");
		}
	}
}

当然JDK1.5之后引入了可变参数,所以将String [] args写为String…arrgs也是可以的。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/138333.html原文链接:https://javaforall.cn

0 人点赞