刷《Java程序员面试宝典》P42题时候遇到一个问题
是关于
public static void main(String[] args){
}
- public关键字,这个好理解,声明主函数为public就是告诉其他的类可以访问这个函数。
- static关键字,告知编译器main方法是一个静态方法。也就是说main方法中的代码是存储在静态存储区(方法区)的,即当定义了类以后这段代码就已经存在了。只要类被加载后,就可以使用该方法,不需要通过实例化来访问,可直接通过类名.main()直接访问。
- void关键字表明main()的返回值是无类型。
- main是jvm识别的特殊方法名,是程序的入口方法。
同一个.java文件可以有多个main方法,但只有与文件名相同的用public修饰的类中的main()方法才能作为整个程序的入口方法 - 参数String[] args,字符串数组参数args为开发人员在命令行状态下与程序交互提供了一种手段。
public class Testargs {
public static void main(String[] args) {
String str = new String();
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
str += args[i];
}
System.out.println(str);
}
}
//如果不使用编译器,使用命令行进行编译。你可以在准备编译class的时候传入abc,那么上面程序运行的结果就是abc,
另外一种作用就是像正常函数方法一样调用其函数,但是需要注意的一点就是static声明的变量或者方法,是类方法或者说是类变量,不需要实例化就可以直接使用
public classA {
public static void main(String[] args)
{
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
}
public classB {
public static void main(String[] args)
{
//A c = new A();
String[] b = {"111","222","333"};
//c.main(b); //输出111 222 333
//因为main()函数是静态函数,因此不需要实例化就可以使用
A.main(b);//输出结果和上面的是一样的
}
}
其中引起了我对与static部分在JVM内存中到底扮演一个什么角色的兴趣