我刚尝试从 main
方法中排除 String[]
args 参数
它编译得很好!
但 JVM 显示了一个异常
为什么每次都必须包含 String[]
args,而它却可以编译?
这是怎么回事?为什么不会显示编译错误?
打这个让我想到,也许编译器没有把它看作是 THE main
方法..那是真的吗?
如果是这样..为什么呢?我的意思是难道不应该只有一个必须将 String[]
args 作为参数的主方法吗?
我刚尝试从 main
方法中排除 String[]
args 参数
它编译得很好!
但 JVM 显示了一个异常
为什么每次都必须包含 String[]
args,而它却可以编译?
这是怎么回事?为什么不会显示编译错误?
打这个让我想到,也许编译器没有把它看作是 THE main
方法..那是真的吗?
如果是这样..为什么呢?我的意思是难道不应该只有一个必须将 String[]
args 作为参数的主方法吗?
public static void main( String[] args )
找到了名为main
的方法。所有其他名称为main
的方法都只是“普通”方法。
main
方法。你可以自由定义一个 JVM 不应该运行程序的方法。 - tangenspublic static void main(String[] args)
方法,只有你想从JVM中运行的那个类才需要。如果找到了public static void main()
,则该类将编译通过,但如果尝试使用JVM运行它,则会抛出异常,因为程序的入口点无法找到。public static void main(String[] args)
方法。public static void main(String[] args)
方法(每个类一个),这样做的好处是可以单独测试和调试每个类。Java支持方法重载。这意味着你可以有几个同名但参数不同的方法。
话虽如此,当你运行java ClassName
时,Java会在ClassName.class
中寻找签名为public static void main (String[])
的方法(它不关心String[]
变量的命名),并运行它。如果没有找到,Java将抛出以下异常:
Exception in thread "main" java.lang.NoSuchMethodError: main
main()
,它们接受不同的参数 - 运行时会忽略它们。这不是重载吗?定义一个方法是完全合法的
static void main() {
}
这不是JVM要查找的入口点。
重载是具有相同名称但不同参数的多个方法的能力。实际上,编译器会根据方法名和参数创建一个名称。
因此,main(String[])将被编译器称为main_String_arr,而main()将被称为main。
是的..
Java编译器将寻找相同的方法签名来考虑它为main
编写任何具有相同名称但其他参数的函数将导致函数重载..
重载函数并不相同..!!
C#中的情况有所不同..
最后,您必须确保您的主要内容如下:
public static void main(String[] args)
这仍然是一种有效的方法。例如,如果您想要,您可以拥有一个名为“main”的静态方法,并带有一个int参数:
public static void main(int foo){}
In the Java programming language, every application must contain a main method whose signature is:
public static void main(String[] args)
The modifiers
public
andstatic
can be written in either order (public static
orstatic public
), but the convention is to usepublic static
as shown above. You can name the argument anything you want, but most programmers choose "args
" or "argv
".The
main
method is similar to the main function in C and C++; it's the entry point for your application and will subsequently invoke all the other methods required by your program.
准确来说,Java将main
方法定义为应用程序入口点。并非所有内容都是应用程序,也不是每个main
方法都是应用程序入口点。例如,小程序不需要main
,因为它使用不同的机制启动。
还要注意自从引入可变参数后,您实际上可以将应用程序入口点声明如下:
public static void main(String... args)
这是可行的,因为在Java中,变长参数背后的语法糖实际上被实现为数组。
public static void main(String... args)
。 - OscarRyz