学习Java有一段时间了,一直没用过博客来写写自己在学习过程中遇到的问题和学习心得,看到别人在诸如博客这样的社区写一些总结觉得挺好的。索性,今天开始自己也用起博客记录学习。一来呢,能更好的总结学习知识。二来,有问题更有机会让别人指出,对自己学习也很有帮助。话不多说,就以main方法详解开始今天的主题吧。
为了表述方便,我先把mian方法写出来:
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”方法写成:
public class Demo {public void main(String[] args) {System.out.println("Hello Word");}
}
此时,JVM要调用main方法可以这样做:new Demo().main();对于这种情况来说显然是可以的。但是我们接着看下面这种情况:
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
担心某些程序在启动的时候需要参数,这个我在这里简单演示一下使用方法,好像几乎用不到。
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也是可以的。