Java中 main() 的有效变体
我们知道Java代码从 main 方法开始执行。在运行时,如果 JVM 找不到任何 main 方法,那么我们将得到一个运行时异常:
没有这样的方法错误:
Main method not found in class, please define the main method as:
public static void main(String[] args)
避免这个问题应该有主要的方法。我们也知道Java main 方法有一个特定的原型,它看起来像:
public static void main(String[] args)
尽管上述语法(原型)非常严格,但可以接受一些小改动。这使得它不那么严格,如果我们执行任何更改,那么我们将得到一个运行时异常。我们可以对我们的 main 方法进行一些允许的修改。
以下更改是可以接受的。
让我们了解有效的 main() 的不同变体。
- 默认原型:下面是在Java中编写 main() 的最常见方式。
Java
class Test
{
public static void main(String[] args)
{
System.out.println("Main Method");
}
}
Java
//Java code to understand that The Order of Modifiers don't matters
class Test
{
static public void main(String[] args)
{
System.out.println("Main Method");
}
}
Java
class Test
{
public static void main(String[] args)
{
System.out.println("Main Method");
}
}
Java
class Test
{
public static void main(String []args)
{
System.out.println("Main Method");
}
}
Java
class Test
{
public static void main(String args[])
{
System.out.println("Main Method");
}
}
Java
class Gfg{
public static void main(String[] geeksforgeeks){
System.out.println("Instead of args we have written geeksforgeeks");
}
}
Java
//Java code-> using Var-Args instead of the array
//please note these code may not run in gfg IDE, better run it on other IDEs e.g, eclipse
class Gfg{
final public static void main(String... args){
System.out.println("Var-args main method");
}
}
Java
class Test
{
public static void main(final String[] args)
{
System.out.println("Main Method");
}
}
Java
//Java code having the final main method
////please note these code may not run in gfg IDE, better run it on other IDEs e.g, eclipse
class Gfg{
final public static void main(String[] args){
System.out.println("final main method");
}
}
Java
//Java code having Synchronized main method
//please note these code may not run in gfg IDE, better run it on other IDEs e.g, eclipse
class Test
{
public synchronized static void main(String[] args)
{
System.out.println("Main Method");
}
}
Java
//Java code-> using strictfp modifier in main method
//please note these code may not run in gfg IDE, better run it on other IDEs e.g, eclipse
class Test
{
public strictfp static void main(String[] args)
{
System.out.println("Main Method");
}
}
Java
class Test
{
public static void main(String[] args)
{
System.out.println("Main Method String Array");
}
public static void main(int[] args)
{
System.out.println("Main Method int Array");
}
}
Java
class A
{
public static void main(String[] args)
{
System.out.println("Main Method Parent");
}
}
class B extends A
{
}
Java
class A
{
public static void main(String[] args)
{
System.out.println("Main Method Parent");
}
}
class B extends A
{
public static void main(String[] args)
{
System.out.println("Main Method Child");
}
}
输出:
Main Method
主要语法的含义:
public: JVM can execute the method from anywhere.
static: Main method can be called without object.
void: The main method doesn't return anything.
main(): Name configured in the JVM.
String[]: Accepts the command line arguments.
args:- the name of the String array is args.
- 修饰符的顺序:我们可以在 main() 中交换 static 和 public 的位置。
Java
//Java code to understand that The Order of Modifiers don't matters
class Test
{
static public void main(String[] args)
{
System.out.println("Main Method");
}
}
输出:
Main Method
- 字符串数组参数的变体:我们可以在字符串参数的不同位置放置方括号。
Java
class Test
{
public static void main(String[] args)
{
System.out.println("Main Method");
}
}
输出:
Main Method
Java
class Test
{
public static void main(String []args)
{
System.out.println("Main Method");
}
}
输出:
Main Method
Java
class Test
{
public static void main(String args[])
{
System.out.println("Main Method");
}
}
输出:
Main Method
- Args 或任何东西:除了 args,我们可以编写任何有效的Java标识符。你可以在这里写任何东西,你可以写你的名字或公司的名字,或者你想写的任何东西,但它必须遵循作为Java标识符的规则。
例子:
Java
class Gfg{
public static void main(String[] geeksforgeeks){
System.out.println("Instead of args we have written geeksforgeeks");
}
}
输出:
Instead of args we have written geeksforgeeks
- var-args 代替 String 数组:根据规则,只要有一维数组,我们就可以用 var-arg 参数替换数组。所以这里我们可以使用 var-args 来改变我们的字符串数组。 (三个点而不是 [])
例子:
Java
//Java code-> using Var-Args instead of the array
//please note these code may not run in gfg IDE, better run it on other IDEs e.g, eclipse
class Gfg{
final public static void main(String... args){
System.out.println("Var-args main method");
}
}
输出:
Var-args main method
- Final Modifier String 参数:我们可以将 String args[] 设为 final。
Java
class Test
{
public static void main(final String[] args)
{
System.out.println("Main Method");
}
}
输出:
Main Method
- final main 方法:我们可以用 final 关键字声明 main 方法。这不会改变执行或给出任何错误。
例子:
Java
//Java code having the final main method
////please note these code may not run in gfg IDE, better run it on other IDEs e.g, eclipse
class Gfg{
final public static void main(String[] args){
System.out.println("final main method");
}
}
输出:
final main method
- 静态 main 方法的 synchronized 关键字:我们可以使 main() 同步。
Java
//Java code having Synchronized main method
//please note these code may not run in gfg IDE, better run it on other IDEs e.g, eclipse
class Test
{
public synchronized static void main(String[] args)
{
System.out.println("Main Method");
}
}
输出:
Main Method
- strictfp关键字转静态 main 方法: strictfp 可用于限制浮点计算。
Java
//Java code-> using strictfp modifier in main method
//please note these code may not run in gfg IDE, better run it on other IDEs e.g, eclipse
class Test
{
public strictfp static void main(String[] args)
{
System.out.println("Main Method");
}
}
输出:
Main Method
- 以上所有关键字与静态主方法的组合:
因此我们可以使用以下修饰符声明Java main 方法: - 重载 Main 方法:我们可以用不同类型的参数重载 main()。
Java
class Test
{
public static void main(String[] args)
{
System.out.println("Main Method String Array");
}
public static void main(int[] args)
{
System.out.println("Main Method int Array");
}
}
输出:
Main Method String Array
- Main 方法的继承: JVM 执行 main() 没有任何错误。
Java
class A
{
public static void main(String[] args)
{
System.out.println("Main Method Parent");
}
}
class B extends A
{
}
编译器生成两个类文件,A.class 和 B.class。当我们执行这两个 .class 中的任何一个时,JVM 都会正常执行。
O/P: Java A
Main Method Parent
O/P: Java B
Main Method Parent
- 隐藏 main() 的方法,但不覆盖:由于 main() 是静态的,派生类 main() 隐藏了基类 main。 (有关详细信息,请参阅静态函数的阴影。)
Java
class A
{
public static void main(String[] args)
{
System.out.println("Main Method Parent");
}
}
class B extends A
{
public static void main(String[] args)
{
System.out.println("Main Method Child");
}
}
Java Compiler javac 生成了两个类,A.class 和B.class。当我们执行这两个 .class 时,JVM 执行时没有错误。
O/P: Java A
Main Method Parent
O/P: Java B
Main Method Child