2012-11-15 6 views
20

Javaプログラムには2つの主要なメソッドがありますか? だけのような引数の違いによって:それは方法は、エントリポイントとして使用される、可能な場合Javaプログラムには2つの主要なメソッドが存在できますか?

と第二

public static void main(StringSecond[] args) 

することができますか? これを特定する方法助けてください。

+6

です] '。 **クラスごとに1つのエントリーポイント**を持つことができます。静的ネストされたクラス**を独自の 'main'で作ることさえできます。 –

答えて

18

メソッドのパラメータ(数値(または)タイプ)が異なる限り、可能です。それはoverloadingと呼ばれます。

オーバーロードの方法は数及びメソッドに渡される引数の種類によって区別されると

のみメイン方法

String[]
単一(又は)PARAMとして String...は、エントリポイントとして考えますプログラムのために。

+1

スワリッシュの答えはより良く、より完全だと思います。 –

4

public static void main(String[] args)のみです。これは本当のmain()であると考えられる唯一のシグネチャです(プログラムのエントリーポイントとして)。

5

StringSecondがクラスであれば、それはコンパイル可能なコードになります。しかし、 "main method"でプログラムへの2番目のエントリーポイントを意味する場合、あなたの質問に対する答えはまだnoです。プログラムへのエントリポイントは、最初のオプション(public static void main(String[] args))だけです。

しかし、2番目のmain(String[])メソッドを別のクラス(ただし同じプロジェクト内)に配置する場合は、複数の可能なエントリポイントをプロジェクトに追加してから選択できます。しかし、これはオーバーライドまたはオーバーロードの原則と矛盾することはありません。

この分野の混乱の原因、特に入門プログラマのための1つの原因は、public static void main(String[] args)public static void main(String ... args)の両方がエントリポイントとして使用され、同じメソッドシグニチャを持つものとして扱われることにも注意してください。

0

答えはいいえ。メインメソッドは1つしかありません。ここで、「メイン」とは、実行可能なエントリポイントを意味します。

オーバーロードされたバージョンは、例のようにコーディングできますが、実行することはできません。

+3

メインメソッドを2つの異なるクラスに持つことができます。 –

7

1つのプログラムに複数のmainメソッドを含めることができます。その他は、オーバーロードされたメソッドです。 このオーバーロードされた方法は、単一のプログラム内に複数のmainメソッドが存在することができ、単一の主な方法

public class MainMultiple{ 

    public static void main(String args[]){ 
     main(122); 
     main('f'); 
     main("hello java"); 
    } 

    public static void main(int i){ 
     System.out.println("Overloaded main()"+i); 
    } 

    public static void main(char i){ 
     System.out.println("Overloaded main()"+i); 
    } 

    public static void main(String str){ 
     System.out.println("Overloaded main()"+str); 
    } 
} 
0

の下で正常に動作します。しかし、JVMは常にString []引数main()メソッドを呼び出します。他のメソッドは、オーバーロードされたメソッドとして動作します。これらのオーバーロードされたメソッドは、明示的に呼び出す必要があります。

0

同じスコープ内にある2つのmain(String [] args)メソッドがJVMの混乱を招く可能性があります。オーバーロードされたメソッドとしては使用できません。したがって、パラメータの点での署名は異なる必要があります。

1

Javaでは、あなただけ public static void main(String[] args)クラスごとに持つことができます。つまり、プログラムに複数のクラスがある場合、各クラスはpublic static void main(String[] args)を持つことができます。詳細はJLSを参照してください。

-1

私はjavaバージョン1.6.0_32をチェックしていますが、複数のmainメソッドが動作していますが、型シグネチャのpublic static void main(String [] args)のような1つのメインメソッドが必要です。私がテストしたExがここにあります。

public class mainoverload 
{ 
public static void main(String a) 
{ 
    System.out.println("\nIts "+a); 
} 
public static void main(String args[]) 
{ 
    System.out.println("\nIts public static void main\n"); 
    mainoverload.main("Ankit"); 
    mainoverload.main(15,23); 
    mainoverload.main(15); 
} 
public static void main(int a) 
{ 
    System.out.println("\nIts "+a); 
} 
public static void main(int a,int b) 
{ 
    System.out.println("\nIts "+a+" "+b); 
} 
}  
14

ここでは、名前Test.java(特に2クラス名のいずれかとして、ファイルの名前を使用していない)と2クラスを持つ1つのファイルに2 public static void main (String args[])がデフォルトであるされていることがわかりますアクセス指定子。

class Sum { 

    int add(int a, int b) { 
     return (a+b); 
    } 

    public static void main (String args[]) { 
     System.out.println(" using Sum class"); 
     Sum a = new Sum(); 
     System.out.println("Sum is :" + a.add(5, 10)); 
    } 

    public static void main (int i) { 
     System.out.println(" Using Sum class main function with integer argument"); 
     Sum a = new Sum(); 
     System.out.println("Sum is :" + a.add(20, 10)); 
    } 
} 

class DefClass { 

    public static void main (String args[]) { 
     System.out.println(" using DefClass"); 
     Sum a = new Sum(); 
     System.out.println("Sum is :" + a.add(5, 10)); 
     Sum.main(null); 
     Sum.main(1); 
    } 
} 

我々は、コードTest.javaをコンパイルするとき、それは(Sum.classDefClass.classすなわち)2つの.classファイルを生成します、我々はTest.javaを実行する場合、それは名前を持つ任意のメインクラスを見つけることができませんよう、私たちはそれを実行することはできませんテスト。代わりにjava Sumまたはjava DefClassを実行すると、両方とも異なるmain()を使用して異なる出力が得られます。 Sumクラスのmainメソッドを使用するには、クラス名Sum.main(null)またはSum.main(1)//Passing integer value in the DefClass main()を使用できます。

クラススコープでは、クラスの静的メソッドはクラスに属し、オブジェクトには属しておらず、クラス名を使用して呼び出されるため、1つのクラスには1つのpublic static void main (String args[])しか指定できません。複数のオブジェクトを作成し、それらを使用して同じ静的メソッドを呼び出す場合でも、これらの呼び出しが参照する静的メソッドのインスタンスは同じになります。

メインメソッドのオーバーロードは、メインで異なる引数セットを渡すことで行うこともできます。同様の例が上記のコードで提供されていますが、デフォルトでは、制御フローはjava classnameを使用して呼び出されたクラスファイルのpublic static void main (String args[])で開始します。 mainメソッドを他の引数セットで呼び出すには、他のクラスから明示的に呼び出す必要があります。

1

mainメソッドのシグネチャは、パラメータの名前は、静的および公共キーワードの

  • 位置が文字列の配列を使用することもでき
  • を交換することができる任意の有効な名前にすることができ

    public static void main(String[] args) 
    
    • でなければなりませんvarargs構文

    クラスはmainという名前の複数のメソッドを定義できます。 これらのメソッドのシグネチャは、メインメソッドのシグネチャと一致しません。署名の異なるこれらの他のメソッドは、「主な」メソッドとはみなされません。

  • 1

    はい同じプログラム内に2つのmain()を持つことは可能です。例えば、以下のようなDemo1クラスがあるとします。このファイルをコンパイルすると、Demo1.classファイルが生成されます。そして、これを実行すると、デフォルトでString引数の配列を持つmain()が実行されます。 int引数でmain()をスニッフィングしません。

    class Demo1 { 
    static int a, b;  
    public static void main(int args) { 
        System.out.println("Using Demo1 class Main with int arg"); 
        a =30; 
        b =40; 
        System.out.println("Product is: "+a*b); 
    } 
    public static void main(String[] args) { 
         System.out.println("Using Demo1 class Main with string arg"); 
         a =10; 
         b =20; 
         System.out.println("Product is: "+a*b); 
    
    } 
    }  
    
    Output: 
    Using Demo1 class Main with string arg 
    Product is: 200 
    

    しかし、Anonymという名前の別のクラスを追加してファイルをAnonym.javaとして保存すると、この中で私はDemo1クラスのmain()[int型引数か文字列型引数のいずれかを呼び出します。コンパイル後、このAnonym.classファイルが生成されます。

    class Demo1 { 
        static int a, b;  
    public static void main(int args) { 
        System.out.println("Using Demo1 class Main with int arg"); 
        a =30; 
        b =40; 
        System.out.println("Product is: "+a*b); 
    } 
    public static void main(String[] args) { 
        System.out.println("Using Demo1 class Main with string arg"); 
        a =10; 
        b =20; 
        System.out.println("Product is: "+a*b);   
    } 
    }  
    
    class Anonym{ 
    public static void main(String arg[]) 
    { 
    
        Demo1.main(1); 
        Demo1.main(null); 
    } 
    } 
    
    
    Output: 
    Using Demo1 class Main with int arg 
    Product is: 1200 
    Using Demo1 class Main with string arg 
    Product is: 200 
    
    0

    ファイルに以下のコード「Locomotive.javaは、」コンパイルして正常に実行、上記の記事で述べたように実行結果が

    2<SPACE> 
    

    を示すとともに、過負荷ルールはまだ動作します主な方法のために。 はしかし、エントリポイントこれは正当なJavaだろうが、エントリ・ポイントの署名が明らかに[文字列 `として指定されている有名なpsvm(パブリック静的無効メイン(文字列[] args))

    public class Locomotive { 
        Locomotive() { main("hi");} 
    
        public static void main(String[] args) { 
         System.out.print("2 "); 
        } 
    
        public static void main(String args) { 
         System.out.print("3 " + args); 
        } 
    } 
    
    関連する問題