2012-03-08 9 views
0

私はJavaを使い慣れていて、洗練したい: まず、同じファイルに2つのクラスを持つことができるかどうかはわかりません。エルスクラス何かの役割は何Javaのクラス定義

class Something {  
    //code here 
} //end of class Something 

public class SomethingElse { 
    //NO code here!!! 
    public static void main(String[] args) { 
     //code of main here 
    }//end of main 
} 

と内部にはコードがありませんなぜ私はそれが非常に愚かな質問である知っているがあります。 私の質問は、あなたがこのコードの列を見ると、各クラスは何ですか?私は実際には得られないし、いくつかの助けを必要とするいくつかの詳細...

答えて

0

ファイルごとに1つのパブリッククラスを持つことができ、ファイルはクラスの同じ名前を持つ必要があります。しかし、ファイルクラスだけに見える他のプライベートクラスを持つことができます。たとえば:

ファイルSomething.java

public class Something { 
    //Something can access SomethingElse's doSomething method. 

    private class SomethingElse { 
    public void doSomething() { 
    } 
    } 
} 

class SomethingToo { 

} 

ファイルOtherSomething.java

public class OtherSomething { 
    //OtherSomething cannot access SomethingElse's doSomething method. 
    //But can access SomethingToo, if they are in the same package 
} 
+1

これは当てはまりません。 OtherSomethingは、SomethingElseオブジェクトをインスタンス化することによってdoSomething()メソッドにアクセスできます。実際にSomethingクラスを参照していない場合は、コンパイル時に問題が発生することがあります。 –

+0

@ジョン感謝、私は答えを編集しました。 –

+1

真の半分。両方のクラスが同じパッケージに入っている限り、SomethingElseの物にアクセスすることができます。それ以外の場合は、SomethingElseとそのすべてのメソッドは非表示になります(リフレクションを除いて)。 – Jochen

0

あなたは同じファイルで定義された複数のクラスを持つことができます。ただし、パブリッククラス名はパブリック名とファイル名として定義されるクラスが1つだけ定義されます。

No code here!!!には、クラス変数とメソッドを定義できます。 main()はそのような例の1つです。

0

上記のファイルには、SomethingElse(public)とSomethingという2つのクラスがあります。これは通常、非publicクラスがpublicクラスによって内部的に呼び出されたときに行われます。また、上記のコードでは、SomethingElseは「ドライバ」クラスのようです。つまり、それ自身の機能やデータはありませんが、他のクラス(この場合はおそらく何か)を実行(ドライブ)するために使用されます。

0

ネストされたクラスを持つことはできますが、禁じられている。各パブリッククラスは、そのクラスと同じ名前のファイルにする必要があります。

4

ファイルごとに複数のクラスを設定できますが、1つのクラスのみがpublicになり、その名前がファイルの名前と一致する必要があります(MyClass.javaのpublic MyClassなど)。ファイルの

パブリッククラス外界に見えるようになり、そしてクラスがpublic static main(String[] args)メソッドを持っている場合、特に、アプリケーションを起動するために使用することができます。例えば、あなたの場合は

あなたがのjavacを使用してファイルをコンパイルした後、あなたはファイルSomething.classSomethingElse.classを取得します。コマンドjava SomethingElseを使用して

は、次の操作を実行するためにJava仮想マシンを教えてくれます:

  • 署名を照合、SomethingElse.classファイルでなければなりませんSomethingElseクラス、
  • コールmainメソッドを探します私はこのクラスに上に貼り付けました(そして与えられた引数をargs配列に入れます)。

クラスがパブリックではなく、mainメソッドを持っていないので、あなたはjava Somethingを呼び出すことはできません。しかし、あなたのプログラムの中の他のクラス(特にSomethingElseはあなたのSomethingクラスを使うことができます)。

-1

はい、1つのJavaファイルに2つ以上のクラスを持つことができます。 唯一の条件は、シグニチャ(public static void main(String[] args))のメインメソッドを含むクラスが1つだけであることです。 公開クラスは1つだけです。そのパブリッククラス名を使用すると、ファイルを保存できます。ファイル名は、パブリッククラスの名前と一致する必要があります。

+0

"唯一の条件はメインメソッドを含むクラスです"。それは正しくありません。 – EJP

0

同じファイル内に2つのクラスを持つことは可能ですが、それは悪い考え方です。読みやすさの低下に加えて、最終的にそのクラス宣言が実際にどこで行われたのかを知ることは、結果的に困難になります。さらに、クラスに関連する変数を宣言し、.java名を共有するクラスを宣言しない場合、javacはコンパイルする可能性が高いです。

これを行う必要がある場合は、2番目のクラスを使用している唯一の場所が.java名を共有するクラス内にあることを確認してください。 (例:SomethingElseクラス内のSomethingオブジェクトのみを使用してください)。それ以外の場合は、すべてのクラスを別々の.javaファイルに分割します。