【问题标题】:Can we overload the main method in Java?我们可以重载Java中的main方法吗?
【发布时间】:2010-09-21 10:18:03
【问题描述】:

我们可以在 Java 中重载 main() 方法吗?

【问题讨论】:

  • 为什么要重载 main() 方法。如果您想要不同的启动行为,您可以使用 main() 创建任意数量的类。只需在调用 jar 时声明主类。或者你可以添加一些额外的参数,当你的 main 启动时测试它会影响它的作用。

标签: java


【解决方案1】:

可以重载main() 方法,但只有public static void main(String[] args) 会在JVM 启动您的类时使用。例如:

public class Test {
    public static void main(String[] args) {
        System.out.println("main(String[] args)");
    }

    public static void main(String arg1) {
        System.out.println("main(String arg1)");
    }

    public static void main(String arg1, String arg2) {
        System.out.println("main(String arg1, String arg2)");
    }
}

当您从命令行运行java Test ... 时,这将始终打印main(String[] args),即使您指定了一个或两个命令行参数。

当然,您可以自己从代码中调用main() 方法 - 此时将应用正常的重载规则。

编辑:请注意,您可以使用可变参数签名,因为从 JVM 的角度来看这是等效的:

public static void main(String... args)

【讨论】:

  • 通过 JVM,准确地说 - 可以手动调用任何重载版本。
  • @Mohan:和其他方法一样。您可以在代码中的其他位置调用main()
  • @SANTHOSH:不,仍然是String[]。这是被识别为入口点的 only 签名。
  • @JavaMan:这就是规范所说的......如果你提供了一个不同的签名(例如,一个你自己的类作为参数之一)JVM如何知道要提供哪些参数?
  • @RiteshPuri:我看不到太多的目的,但同样地,防止重载也很奇怪。不要忘记main 方法也可以直接从其他代码中调用,所以这样的重载并不是不可访问的。
【解决方案2】:

是的,您可以在 Java 中重载 main 方法。但是程序在运行时不会执行重载的main方法,你必须从实际的main方法中调用重载的main方法。

这意味着 main 方法充当 java 解释器开始执行应用程序的入口点。 其中作为加载的 main 需要从 main 调用。

【讨论】:

  • 不错的答案。谢谢。 :)
  • 很好的答案,但即使是 JVM 也无法击败 Skeet。
【解决方案3】:

是的,通过方法重载。通过方法重载,您可以在一个类中拥有任意数量的主要方法。让我们看一个简单的例子:

class Simple{  
  public static void main(int a){  
  System.out.println(a);  
  }  

  public static void main(String args[]){  
  System.out.println("main() method invoked");  
  main(10);  
  }  
}  

它将给出以下输出:

main() method invoked
10

【讨论】:

    【解决方案4】:

    是的,你可以重载 main()

    但要清楚—— 尽管您可以重载 main,但只有具有 标准签名 的版本才能作为应用程序从命令行执行。例如

    public static void main(String a,String... args){
    // some code
    }
    2)public static void main(String[] args){//JVM will call this method to start 
    // some code 
    }
    

    【讨论】:

      【解决方案5】:

      是的,您可以在 Java 中重载 main 方法。您必须从实际的 main 方法调用重载的 main 方法。

      【讨论】:

        【解决方案6】:

        是的,main 方法可以重载。重载的 main 方法必须从“public static void main(String args[])”内部调用,因为这是 JVM 启动类时的入口点。重载的 main 方法也可以像普通方法一样具有任何限定符。

        【讨论】:

          【解决方案7】:

          是的,你可以。

          Java 中的main 方法不是地外方法。除了main() 与任何其他方法一样并且可以以类似的方式重载之外,JVM 总是寻找方法签名来启动程序。

          • 普通的main方法作为JVM启动的入口点 程序的执行。

          • 我们可以在 Java 中重载 main 方法。但是程序没有
            当我们运行你的程序时,执行重载的main方法,我们需要 仅从实际的 main 方法调用重载的 main 方法。

            // A Java program with overloaded main()
            import java.io.*;     
            public class Test {         
              // Normal main()
              public static void main(String[] args) {
                System.out.println("Hi Geek (from main)");
                Test.main("Geek");
              }     
              // Overloaded main methods
              public static void main(String arg1) {
                System.out.println("Hi, " + arg1);
                Test.main("Dear Geek","My Geek");
              }
              public static void main(String arg1, String arg2) {
                System.out.println("Hi, " + arg1 + ", " + arg2);
              }
            }
            

            Valid variants of main() in Java

          【讨论】:

            【解决方案8】:

            是的,我们可以重载 main 方法。 main 方法不能是静态的 main 方法。

            【讨论】:

              【解决方案9】:

              这是完全合法的:

              public static void main(String[] args) {
              
              }
              
              public static void main(String argv) {
                  System.out.println("hello");
              }
              

              【讨论】:

                【解决方案10】:

                是的。 'main()' 方法可以被重载。我试图输入一些代码来回答你的问题。

                public class Test{
                static public void main( String [] args )
                        {
                                System.out.println( "In the JVMs static main" );
                                main( 5, 6, 7 );    //Calling overloaded static main method
                                Test t = new Test( );
                                String [] message  = { "Subhash", "Loves", "Programming" };
                                t.main(5);
                                t.main( 6, message );
                        }
                
                        public static void main( int ... args )
                        {
                                System.out.println( "In the static main called by JVM's main" );
                                for( int val : args )
                                {
                                        System.out.println( val );
                                }
                        }
                
                        public void main( int x )
                        {
                                System.out.println( "1: In the overloaded  non-static main with int with value " + x );
                        }
                
                        public void main( int x, String [] args )
                        {
                                System.out.println( "2: In the overloaded  non-static main with int with value " + x );
                                for ( String val : args )
                                {
                                        System.out.println( val );
                                }
                        }
                }
                

                输出:

                $ java Test
                In the JVMs static main
                In the static main called by JVM's main
                5
                6
                7
                1: In the overloaded  non-static main with int with value 5
                2: In the overloaded  non-static main with int with value 6
                Subhash
                Loves
                Programming
                $
                

                在上面的代码中,为了演示目的,静态方法和非静态版本的主要方法都被重载了。注意,写JVM的main是指JVM首先用来执行程序的main方法。

                【讨论】:

                  【解决方案11】:

                  是的,你可以重载 main 方法,但解释器总是会搜索正确的 main 方法语法来开始执行。 是的,你必须在对象的帮助下调用重载的 main 方法。

                  class Sample{
                  public void main(int a,int b){
                  System.out.println("The value of a is "  +a);
                  }
                  public static void main(String args[]){
                  System.out.println("We r in main method");
                  Sample obj=new Sample();
                  obj.main(5,4);
                  main(3);
                  }
                  public static void main(int c){
                  System.out.println("The value of c  is"  +c);
                  }
                  }
                  
                  The output of the program is:
                  We r in main method
                  The value of a is 5
                  The value of c is 3
                  

                  【讨论】:

                    【解决方案12】:

                    是的,根据我的观点,我们可以重载 main 方法,但方法重载就是这样。例如

                    class main_overload {
                        public static void main(int a) {
                            System.out.println(a);
                        }
                        public static void main(String args[]) {
                            System.out.println("That's My Main Function");
                            main(100);
                        }
                    }
                    

                    在这个双反斜杠步骤中,我只是调用了 main 方法....

                    【讨论】:

                      【解决方案13】:

                      是的,主方法可以重载,因为其他函数也可以重载。需要注意的一点是,至少应该有一个主函数带有“String args[]”作为参数。您的程序中可以有任意数量的主函数,具有不同的参数和功能。让我们通过一个简单的例子来理解:

                      Class A{
                      
                      public static void main(String[] args)
                      {
                      System.out.println("This is the main function ");
                      A object= new A();
                      object.main("Hi this is overloaded function");//Calling the main function
                      }
                      
                      public static void main(String argu)     //duplicate main function
                      {
                      System.out.println("main(String argu)");
                      }
                      }
                      

                      输出: 这是主要功能
                      嗨,这是重载函数

                      【讨论】:

                        【解决方案14】:

                        是的,您可以重载 main 方法,但在任何类中,都应该只有一个带有签名 public static void main(string args[]) 的方法,您的应用程序在该方法中开始执行,正如我们所知,在任何语言中,执行都从 Main 方法开始。

                        package rh1;
                        
                        public class someClass 
                        {
                        
                            public static void main(String... args)
                            {
                                System.out.println("Hello world");
                        
                                main("d");
                                main(10);
                            }
                            public static void main(int s)
                            {
                        
                                System.out.println("Beautiful world");
                            }
                            public static void main(String s)
                            {
                                System.out.println("Bye world");
                            }
                        }
                        

                        【讨论】:

                          猜你喜欢
                          • 2014-01-29
                          • 1970-01-01
                          • 2011-07-14
                          • 1970-01-01
                          • 1970-01-01
                          • 2015-06-28
                          • 1970-01-01
                          • 1970-01-01
                          • 2022-10-15
                          相关资源
                          最近更新 更多