web-dev-qa-db-ja.com

クラスとは異なる名前のJavaファイルをコンパイルできますか?

Javaファイル名とその基本クラス名なしでJavaプログラムをコンパイルする方法はありますか?.

もしそうなら、説明してください。

25
Hulk

Javaファイル名は常にそのファイル内で定義されたパブリッククラスを反映する必要があります。そうしないと、コンパイラエラーが発生します。たとえば、test.Java:

public class Foo {}

これをコンパイルしようとすると:

[steven@scstop:~]% javac test.Java
test.Java:1: class Foo is public, should be declared in a file named Foo.Java
public class Foo {
       ^
1 error

したがって、ファイル名をパブリッククラス名と一致させる必要があります。それか、あなたが何を求めているのかわからない...実際に達成しようとしていることを説明するのに少し時間を費やすと、より効果的な質問をするのに大いに役立ちます:)

32

質問に答えるには、次の例を見てください。
Sample.Javaファイルを作成します

class A 
{ 
   public static void main(String args[])
   { 
      String str[] = {""}; 
      System.out.println("hi"); 
      B.main(str); 
   } 
} 
class B 
{ 
   public static void main(String args[]) 
   { 
     System.out.println("hello");
   }
} 

これをjavac Sample.Javaとしてコンパイルし、Java Aとして実行すると、出力は

hi 
hello

またはJava Bとして実行すると、出力は
hello

どのクラスもpublicとマークされていないため、defaultアクセスを付与していることに注意してください。パブリッククラスのないファイルには、ファイルの命名に関する制限はありません。

42
ved

ソースファイルにパブリッククラスがない限り、ソースファイルに任意の名前を付けてコンパイルできます。ただし、ソースファイルにパブリッククラスがある場合、そのファイルの名前はクラス名と同じにする必要があります。そうでない場合、コンパイラーはエラーをスローします。

例:
ファイル名: TestFileName.Java

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello,World\n");
    }
}

コンパイル:javac TestFileName.Java

エラー:

TestFileName.Java:1: class HelloWorld is public, should be declared in a file named HelloWorld.Java
public class HelloWorld
       ^
1 error
7
chotu

いいえ、パブリッククラス名はファイル名と一致する必要があります。内部の非公開のクラス名は異なる場合があります。

3
Joel

JavaコンパイルAPIを使用して、任意のJavaソースをコンパイルできます。ソースはファイルから取得する必要はありません。または、関連のないファイルから取得することもできます。名前。これは、プログラムを開発する際の鈍さによって異なります。;)

2
Peter Lawrey

はい、クラスとは異なる名前でJavaファイルをコンパイルします。ただし、そのファイルにパブリッククラスが存在してはなりません。

ファイルにパブリッククラスがある場合、その場合は、その名前をファイル名として指定する必要があります。ただし、クラスにパブリッククラスが含まれていない場合は、クラスに任意の名前を付けることができます。

より明確にするために、以下の例を参照してください。

ファイル名:sample.Java

 class A 
 { 
   public static void main(String args[])
  { 
    System.out.println("hi in Class A"); 
  }   
 } 
class B 
{ 
 public static void main(String args[]) 
 { 
    System.out.println("hello in class B");
 }
}

次にそれを(windows)でコンパイルします:javac sample.Java

次にそれを実行します:Java A

出力:クラスAのhi

次にそれを実行します:Java B

出力:クラスBのhello

確認してください。

2
Nilesh Thakkar

ファイル名と同じ名前のパブリッククラスが必要です。これはとても良いことです。パブリックでない限り、同じファイル内にセカンダリクラスを含めることができます。ただし、これらは「デフォルト」のままにすることができるため、同じパッケージ内の他のクラスでも引き続き使用できます。

これはほとんどの場合行われるべきではありません。クラスとパッケージに関するJavaの命名パターンは、Javaの大きな利点の1つです。つまり、プログラマーは無料で簡単に生活できるようになります。

2
Bill K

クラスが公開されていない場合は、classnameがSimpleのように他の名前を使用して保存し、Hard.Javaを保存します。 complie-> Hard.Java run-> Simple.Java Save your Java file by .Java only。compile javac .Java run Java yourclassnameたとえばプログラムのメインクラス名はAで、.Javaのみで保存
javac .Javaでコンパイル
実行者Java A

0
sam

慣例により、メインクラスの名前は、プログラムを保持するファイルの名前と一致する必要があります。また、ファイル名の大文字の使用がクラス名と一致していることも確認する必要があります。

ファイル名がクラス名に対応するという慣例は、恣意的に見えるかもしれません。ただし、この規則により、プログラムの保守と編成が容易になります。また、場合によっては必要になります。

0
MDIT

いいえ。シェルスクリプトを記述して、コンパイルする前に.Javaファイルの名前を変更できますが、javacではファイル名=クラス名である必要があります。

(また、Windowsでは、大文字と小文字は区別されないため、ASDF.JavaはAsdf.classをコンパイルできます)

0
Chad Okere

はい、私たちはJavaファイルをクラスとは異なる名前でコンパイルできます。ただし、そのファイルにパブリッククラスがあってはなりません。

ファイル内にpublicクラスがある場合、その場合、その名前をファイル名として指定する必要があります。ただし、クラスにpublicクラスが含まれていない場合は、クラスに任意の名前を付けることができます。

より明確にするために、以下の例を参照してください。

ファイル名:example.Java

class A 
 { 
   public static void main(String args[])
  { 
    System.out.println("You are in Class A"); 
  }   
 } 
class B 
{ 
 public static void main(String args[]) 
 { 
    System.out.println("You are in class B");
 }
}

次にそれをコンパイルします:javac example.Java

次にそれを実行します:Java A

output : you are in Class A

次にそれを実行します:Java B

output : you are in class B

確認してください。

0

他の回答によると、唯一の実行可能なソリューションは どういうわけかソースからクラス名を決定する であり、それを使用してファイルの名前を適切な名前に変更し、通常どおりにコンパイルします。

0
Vadzim

はい、ファイルの名前を選択できます(.Java)。そのファイル内のクラスの名前が何であるかは関係ありません。つまり、クラス名はファイル名とはまったく異なる可能性があります。プログラムをファイル名でコンパイルし、メインメソッドが存在するクラス名でプログラムを実行する必要があります。メインメソッドは異なるクラスで複数になる可能性があるため、実行するメインメソッドが含まれているクラス名で実行する必要があります......

0
ved

Java Javaはメインメソッドのオーバーロードを提供するため、メインメソッドもオーバーロードできるため、複数のメインメソッドを記述できます。ここでファイルをコンパイルすると、例.Javaコンパイラは、Java Aでファイルを実行すると、メインメソッドを含む.classファイルを作成します。クラスAのメインメソッドを含むA.classファイルを実行し、その出力が表示されます。画面で、このファイルをJava= Bで実行すると、Bクラスのメインメソッドを提供するB.classファイルが実行されるので、コードは正常に実行されます。

0
Ravi Patil

Javaではプログラムをコンパイルしますが、メソッドを実行します。ファイル名でプログラムをコンパイルし、クラス名を実行する必要があるため、クラス名の異なる名前をファイルに保存できます。

0
user442317

はい、Javaソースファイルを異なるファイル名でコンパイルすることは可能ですが、内部で定義されているクラスがパブリックでないことを確認する必要があります...ソースファイルをコンパイルするとき、対応する。ソースファイル内のクラスのクラスファイルが作成されます。

0
Nithish Reddy J

はい。これは可能です。

クラスとファイル名が同じになる主な理由は、Javaクラスのリスト全体で、コンパイラが実行する必要があるクラスを簡単に確認できるようにするためです。

したがって、ファイル名とクラス名を同じにすることをお勧めします。

そして、このクラスにパブリックメソッドがない場合は、ファイル名以外の異なる名前のクラスをコンパイルして実行します。

0
Ramavi

彼が意味するところは、.Javaファイルの名前が、その中に定義されている実際のクラスとは異なるということです。

これは不可能だと思います。

0
Kalpak

はい、あなたはあなたのJavaソースコードファイルをメインクラス名と同じではない他の名前で保存できますが、それを複雑にすると、バイトコードファイル名はメインクラス名と同じになります。したがって、Javaコード実行の多くの名前を覚えないようにするには、ファイル名とバイトコードファイルだけが同じになるのではなく、メインクラスと同じファイル名にする必要があります。名前。

0
Lalit