Java 主方法
Java程序就是按照确定的顺序去执行一系列Java指令。由于Java指令是按一定的顺序执行的,所以Java程序总有一个开始和结束。
要运行Java程序,你需要向Java虚拟机发出信号,告诉JVM从哪里开始执行程序。在Java中,所有指令(代码)都必须存在于Java类中。类是将数据和指令组合在一起的一种方式。因此,Java类可以同时包含变量和方法。变量可以包含数据,方法可以将数据(指令)组合在一起。如果你现在还不能理解这些,也不必担心,我将后续内容中解释这些概念。
一个简单的Java类声明
下面所示的Java代码块,声明了一个不含变量、方法或者其他指令的类:
public class MyClass {
}
上面的代码需要放在一个后缀名为 .java的文件中,同时该文件名必须与类名相同。换而言之,这个文件名 必须是 MyClass.java 。当你将这部分代码存入该文件中后,你就可以使用Java SDK编译它了,或者更简单地用Java IDE编译。
强烈建议你把类放进Java package里面。Java package只是文件系统中的一个目录,它可以包含一个或多个Java文件。package可以被嵌套,就像目录一样。例如,你可以创建一个名为 myjavacode的package,它将与硬盘中的名为 myjavacode 目录对应。
如果你将Java类放进package中,你必须在Java文件的顶部明确指出package的名字。如下是添加了package声明的类:
package myjavacode;
public class MyClass {
}
注: Myclass.java 必须在 myjavacode 目录中,并且还应该包含package声明: package myjavacode 。Java文件放在正确的目录中是不够的,仅仅在Java文件中拥有package声明也是不够。这两个要求必须同时满足。
主方法
Java程序需要在一个入口处开始执行。Java程序是从某个类的main()方法开始执行的。你可以选择要执行的类的名称,但不能选择方法的名称。方法名始终是 main 。下面就是包含在类中的main()方法声明的大概样式:
package myjavacode;
public class MyClass {
public static void main(String[] args) {
}
}
其中 public 、 static 和 void 三个关键词都有特殊含义。你现在不用考虑它们,只需要记住main()方法声明的时候需要这三个关键词就行了。
紧接着三个关键词的是方法名。回顾一下之前讲过的,方法是一系列指令的组合,它们是可以逐个被执行。通过“调用”(执行)方法,你可以执行该方法中的所有指令。
在方法名后面,被括号括起来的是参数列表。参数就是一些变量(数据、值),我们将它们传给方法,然后可以被方法中的指令使用。main()方法必须传递一个String数组对象。你可以像如下所示一样声明一个String数组对象。
String[] stringArray
不用去考虑什么是String、数组是什么。这些也会在后续教程中解释。另外,传入的参数名是什么也不重要。第一次我传的String数组的名字是 args ,第二次我定义的String数组的名字是 stringArray,你可以自由选择一个参数名字。
紧接着就是一个 {} ,当main方法被运行时,处于 {} 里面的代码就会被执行。这部分代码也被叫做“方法体”。在上面的例子中,因为方法是空的,所以不会有任何代码被执行。
好的,接下来我们在方法体里面插入一条简单的代码:
package myjavacode;
public class MyClass {
public static void main(String[] args) {
System.out.println("Hello World, Java Program");
}
}
现在main()方法就包含了一条简单Java指令(代码):
System.out.println("Hello World, Java Program");
这条代码将会在控制窗口打印出 Hello World, Java Program 这段文字。如果你在命令行运行这段Java程序,你将在命令行窗口看到这段文字输出。如果你在Java IDE里面运行它的话,你将会在IDE里面的控制台看到相应的文字输出。
运行主方法
当你使用命令行来运行Java程序时,你调用了 java 命令,这个命令来自JRE,同时你需要告诉它去运行哪个Java类,传递什么参数给 main() 方法。然后JVM将会运行对应的Java程序。如图所示:
在命令行执行java命令,java命令又会去执行Java主程序。
下面是一个示例命令行:
java -cp classes myjavacode.MyClass
上面命令行的第一部分是 java 命令。该命令会启动JVM。在某些情况下,你可以需要明确输入完整 java 命令的路径(一般是位于Java安装目录下的bin子目录)。
第二、三个参数(-cp classes)是告诉JVM所依赖的类路径(cp全称为 class path,意为类路径)。在这个例子中,已经编译好的类放在 classes 目录中。
最后一个参数是需要执行的Java类名。请注意,包名加上类名就唯一确定了需要执行的类(完全限定类名)。
传参给主方法
你也可以通过如下方式给main()方法传递参数:
java -cp classes myjavacode.MyClass Hello World
当JVM运行 myjavacode.MyClass 的main()方法时,String 数组将会把“Hello” 和 “World”当作两个参数传递给main()方法。
在main()方法里面我们可以通过如下方式来获取传进来的参数:
package myjavacode;
public class MyClass {
public static void main(String[] args) {
System.out.println( args[0] );
System.out.println( args[1] );
}
}
注意args数组中对元素0和元素1的引用( args[0] 和 args[1] )。 args[0] 包含字符串“Hello”,而 args[1] 代表字符串“World”。
Java源代码的编译和运行我们将在下一章节Java项目概览,编译与执行 讲解。
变量和数组我们将会后续章节讲解,现在不需要你全部理解。
Java主类
如果Java程序中只有一个Java类包含main()方法,那么包含main()方法的类通常被称为主类。
在你的项目中,你可以创建包含main()方法任意数量的类。但是,JVM一次只能运行一个类。你仍旧可以从Java虚拟机执行的main()方法时调用其他额main()方法(当然,目前你还没有见过这种方式),你也可以启动多个JVM,每个JVM都执行单个main()方法。
下一篇:Java项目概览,编译与执行