Java程序的主入口必须是public Static void main(String[] args),1. public确保jvm可以访问该方法;2. static允许jvm在不创建对象的情况下调用;3. void表示无返回值;4. 方法名main和参数string[] args是jvm识别入口的固定格式,其中args可改名但结构不可变;若缺少public或static会导致nosuchmethoderror;string[] args用于接收命令行参数,如java calculator 10 20中args[0]为”10″、args[1]为”20″;一个程序只能有一个入口点,即一个类的main方法被jvm执行;main方法中可通过try-catch处理异常,否则异常将由jvm处理并终止程序。
要让 Java 程序跑起来,你得有个“主入口”,这个入口就是
public static void main(String[] args)
。它就像一栋房子的正门,JVM (Java 虚拟机) 通过它来启动你的程序。简单来说,这是 Java 程序的起点。
解决方案:
public static void main(String[] args)
详细拆解:
立即学习“Java免费学习笔记(深入)”;
-
public
: 表示这个方法是公开的,任何类都可以访问它。JVM 需要访问它来启动程序,所以必须是
public
。
-
static
: 意味着这个方法属于类本身,而不是类的实例。JVM 在执行
main
方法时,不需要创建类的对象,直接通过类名调用即可。
-
void
: 表示这个方法不返回任何值。
main
方法执行完之后,程序就结束了,不需要返回任何东西给 JVM。
-
main(String[] args)
: 这是方法名,
main
是一个约定俗成的名字,JVM 就认这个名字。
String[] args
是一个字符串数组,用来接收命令行参数。当你运行程序时,可以在命令行中输入一些参数,这些参数会被传递到
main
方法中。
一个简单的例子:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
这段代码定义了一个名为
HelloWorld
的类,其中包含一个
main
方法。
System.out.println("Hello, World!");
会在控制台打印 “Hello, World!”。
Java 主方法必须这样定义吗?可以修改吗?
原则上,
public static void main(String[] args)
的结构不能变,这是 JVM 的硬性要求。如果你改了任何一个部分,JVM 就找不到程序的入口了。
但是,
String[] args
中的
args
这个变量名是可以改的,你可以改成
String[] arguments
,
String[] params
等等,这不会影响程序的运行。例如:
public class HelloWorld { public static void main(String[] arguments) { System.out.println("Hello, World!"); } }
这段代码和上面的代码是完全一样的,只是变量名不同而已。
如果我忘记写
public
或
static
会怎样?
如果忘记写
public
,JVM 会因为权限不足而无法访问
main
方法,程序无法启动。会报类似
NoSuchMethodError: main
的错误,但实际上
main
方法存在,只是不可访问。
如果忘记写
static
,JVM 需要先创建类的实例才能调用
main
方法,但 JVM 并不知道如何创建这个实例,所以程序也会报错,同样会报
NoSuchMethodError: main
错误。
String[] args
有什么用?如何使用命令行参数?
String[] args
允许你从命令行向 Java 程序传递参数。这些参数在程序启动时会被传递到
main
方法中。
例如,假设你有一个名为
Calculator
的程序,可以接收两个数字作为参数,并计算它们的和:
public class Calculator { public static void main(String[] args) { if (args.length != 2) { System.out.println("Usage: java Calculator <num1> <num2>"); return; } try { double num1 = Double.parseDouble(args[0]); double num2 = Double.parseDouble(args[1]); double sum = num1 + num2; System.out.println("The sum is: " + sum); } catch (NumberFormatException e) { System.out.println("Invalid input: Please enter valid numbers."); } } }
要运行这个程序,你需要在命令行中输入:
java Calculator 10 20
程序会输出:
The sum is: 30.0
在这个例子中,
args[0]
是 “10”,
args[1]
是 “20”。程序首先检查
args
数组的长度是否为 2,如果不是,则打印使用说明。然后,它尝试将
args[0]
和
args[1]
转换为
double
类型,并计算它们的和。如果转换失败(例如,输入了非数字字符),则会捕获
NumberFormatException
异常并打印错误消息。
Java 的
main
方法可以有多个吗?
一个 Java 程序只能有一个
main
方法作为入口点。虽然一个 Java 文件可以包含多个类,每个类都可以有自己的
main
方法,但 JVM 只会执行你指定的那个类的
main
方法。 如果你尝试运行一个没有
public static void main(String[] args)
方法的类,JVM 会报错。
如何处理
main
方法中的异常?
在
main
方法中处理异常的方式和其他方法一样。你可以使用
try-catch
块来捕获和处理异常。如果在
main
方法中没有处理异常,那么异常会被传递给 JVM,JVM 会打印异常信息并终止程序。 在上面的
Calculator
例子中,就使用了
try-catch
块来处理
NumberFormatException
异常。 良好的异常处理可以使你的程序更加健壮。