• ベストアンサー

クラス宣言とアクセス制御

お世話になります。 独学で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 メソッドを宣言するクラスのクラス名と、ソースファイルの ファイル名を一致させる、ということは常識というか、暗黙の了解みたいな ものなのでしょうか? (もちろんプロジェクト毎のコーディング規約によると思うのですが…)

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.4

本来、ソースファイルの名前とそれに含まれるクラスの名前とは無関係です。しかし、あなたのおっしゃるように、このままでは「あるクラスのソースファイルはどれなのかわからない」ということになってしまいます。 そこで、「ひとつのソースファイルに含まれる public なクラス・インタフェースはひとつまで」「public なクラス・インタフェースの名前とソースファイルの名前を一致させる」というように制限してもよい、と決められました。 実際、javac はそのように制限を設けて動作するようになっています。 なお、ソースファイルに public なクラス・インタフェースがない場合は、ファイル名に制限はありません。 また、main メソッド自身は public でなければなりませんが、そのクラスは public でなくてもかまいません。

daisy_k
質問者

お礼

非常に分かり易かったです!! ご回答、ありがとうございました。

その他の回答 (3)

  • yuji
  • ベストアンサー率37% (64/169)
回答No.3

参考URLを見てください。

参考URL:
http://www.tcct.zaq.ne.jp/ayato/programming/java/codeconv_jp/
daisy_k
質問者

お礼

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

  • sasadora
  • ベストアンサー率68% (59/86)
回答No.2

「ソースファイル名はクラス名を使用する」と決まっています。 mainメソッドを持っているかどうかは関係ないです。 1つのソースファイルに複数のクラスを定義した場合は、 publicクラス名をファイル名にします。 ちなみにクラス名は大文字から始まるのが普通です。(これも決まっている??)

daisy_k
質問者

お礼

早速のご回答ありがとうございます。 重要なのは main メソッドを持ったクラスかどうかではなくて、 public 宣言したクラスかどうか、なんですね! 勉強になりました。 それから、 > ちなみにクラス名は大文字から始まるのが普通です。 そうですよね。 「class Test ~ 」とすべきでした。 失礼しました…。

  • kou2000
  • ベストアンサー率29% (14/48)
回答No.1

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

参考URL:
http://www2.ttcn.ne.jp/~javaroad/java_basic1.htm
daisy_k
質問者

お礼

さっそくのご回答ありがとうございます。 教えて頂いたサイトには、 『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 メソッドを どこで宣言しているかが分からないですから、このコーディングの仕方 自体、問題だと思いますが) 文法的には問題ないけど、現場ではそんなコーディング通用しないよ、 というのが厄介ですね。

関連するQ&A

専門家に質問してみよう