📜  Java中 main() 的有效变体

📅  最后修改于: 2022-05-13 01:55:24.764000             🧑  作者: Mango

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 方法有一个特定的原型,它看起来像:


尽管上述语法(原型)非常严格,但可以接受一些小改动。这使得它不那么严格,如果我们执行任何更改,那么我们将得到一个运行时异常。我们可以对我们的 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