出産前後の痔にはご注意!

お世話になります。

独学でJavaの学習を始めました。
(仕事で必要になったためです)

Java のソースファイル名は、main メソッドを宣言するクラスの
クラス名と一致させなければならないようですが、これは
そのクラスを public をつけて宣言したときに限るのでしょうか?

以下のソースを「hello.java」という名前で保存し、コンパイルすると
エラーが出ますが、「public」を削除して再びコンパイルすると、
コンパイルが通り、「test.class」が生成されます。

**********
public class test
{
public static void main (String args[])
{
System.out.println("Hello World");
}
}
**********

同一パッケージ外からクラスを参照する場合、クラス名とソースファイル名を
一致させてあげないとクラスを見つけられない、ということなのでしょうか?

とんちんかんな認識でしたら申し訳ありませんが、
ご教授頂ける方、宜しくお願い致します。

また、実際に Java を使って開発されている方にお伺いしたいのですが、
現場では main メソッドを宣言するクラスのクラス名と、ソースファイルの
ファイル名を一致させる、ということは常識というか、暗黙の了解みたいな
ものなのでしょうか?
(もちろんプロジェクト毎のコーディング規約によると思うのですが…)

このQ&Aに関連する最新のQ&A

A 回答 (4件)

本来、ソースファイルの名前とそれに含まれるクラスの名前とは無関係です。

しかし、あなたのおっしゃるように、このままでは「あるクラスのソースファイルはどれなのかわからない」ということになってしまいます。

そこで、「ひとつのソースファイルに含まれる public なクラス・インタフェースはひとつまで」「public なクラス・インタフェースの名前とソースファイルの名前を一致させる」というように制限してもよい、と決められました。

実際、javac はそのように制限を設けて動作するようになっています。

なお、ソースファイルに public なクラス・インタフェースがない場合は、ファイル名に制限はありません。

また、main メソッド自身は public でなければなりませんが、そのクラスは public でなくてもかまいません。
    • good
    • 0
この回答へのお礼

非常に分かり易かったです!!

ご回答、ありがとうございました。

お礼日時:2003/01/20 11:00

参考URLを見てください。



参考URL:http://www.tcct.zaq.ne.jp/ayato/programming/java …
    • good
    • 0
この回答へのお礼

こんなサイトがあるんですね。
知りませんでした。

Java を学習するにあたって(どんな言語もそうなのかも知れませんが)、
API を始め、「情報を調べる力」というものが非常に大事だと思いました。

ご回答ありがとうございました。

お礼日時:2003/01/20 10:54

「ソースファイル名はクラス名を使用する」と決まっています。


mainメソッドを持っているかどうかは関係ないです。
1つのソースファイルに複数のクラスを定義した場合は、
publicクラス名をファイル名にします。

ちなみにクラス名は大文字から始まるのが普通です。(これも決まっている??)
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

重要なのは main メソッドを持ったクラスかどうかではなくて、
public 宣言したクラスかどうか、なんですね!
勉強になりました。

それから、
> ちなみにクラス名は大文字から始まるのが普通です。

そうですよね。
「class Test ~ 」とすべきでした。
失礼しました…。

お礼日時:2003/01/20 10:49

ここを参考にしてみてください。



参考URL:http://www2.ttcn.ne.jp/~javaroad/java_basic1.htm
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございます。

教えて頂いたサイトには、
『Javaのソースファイル名は必ずそのソースファイルに宣言されている
いずれかのクラス名と一致していなければなりません。』
と書いてあったのですが、以下の場合はコンパイルエラーには
なりませんでした。

<example.java>
class test{
public static void main(String args[]){
enzanC.shisokuM();
outputC.displayM();
}
}

class enzanC{
static void shisokuM(){
//四則演算処理を行う
・・・・・
・・・・・
}
}

class outputC{
static void displayM(){
//演算結果を出力する
・・・・・
・・・・・
}
}

(もちろん、コンパイル後に生成された example.class を実行しても
エラーになりますし、コーディングした本人以外は main メソッドを
どこで宣言しているかが分からないですから、このコーディングの仕方
自体、問題だと思いますが)

文法的には問題ないけど、現場ではそんなコーディング通用しないよ、
というのが厄介ですね。

お礼日時:2003/01/20 10:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング