Java Technology

[Java] publicクラスについてちょっと学んでみた

2020-12-13

javaをさわっていて、よく

public class 〇〇 {
  public static void main(String[] args){

  }
}


が初めに出てきて、覚えられないし意味もよくわからなかったので、せっかくなので分解して理解してみる。

今回はpublic class 〇〇について。


「public class [クラス名]」とファイル名は合わせる

まずルールとしては、パブリッククラスで宣言したクラス名とファイル名は合わせなければならない。

名前が違うとどうなるか?下記のようなエラーが出る。



Main.java:1: error: class Hello is public, should be declared in a file named Hello.java


エラーを解消するためには、ファイル名Main.javaでクラスを「public class main」にするか、ファイルをHello.javaにしてクラスを「public class Hello」のままにする。


「public class クラス名()」が二つある場合もエラーがでる。

もし二つ public classを宣言するとどうなるか。

すると下記の例のように、エラーがでる。

Main.java:8: error: class Hello is public, should be declared in a file named Hello.java



public class Helloを宣言したいなら、Hello.javaを宣言してくださいと出る。

もちろんここでファイル名をHelloにしたら、もう一つのパブリッククラスはMainとなってるので、エラーで「ファイル名をMainにして」とエラーが出る。

つまり二つのpublicクラスは同じファイルにおけない。


Javaでは1ファイル1クラスが原則

Javaでは、1ファイルにつき、1クラスという原則がある。他の言語が必ずしもそうなっているわけではないが、これはJavaの言語仕様らしい。


なんで1ファイル1クラスが原則なの?

かりやすい回答がここに共有されていた。

まずはJavaの言語の使用を理解する際は、企業が大規模なシステムを開発するための言語だと言うことを前提に置く。するといくつかのメリットが見えてくるらしい。


クラスを探しやすくする

例えば何万行、何千ファイルという多数のコードからクラスを探す時、1ファイルに1クラスだと探しやすい。

しかし「5000ファイルあるうちの1736こと3400こ目のファイルだけクラスが2個入ってて...」という話になるととたんに探すのに時間がかかる。

人間の盲点をカバーすると言う意味で、1クラス1ファイルはメリット。


機械にとっても読みやすい

1クラス1ファイルのようなルールが多いほど、機械の読み込むスピード(コンパイル)が早くなるらしい。


ちなみにpublicって何?

このpublicの部分は、アクセス修飾子と呼ばれる。クラスやメソッドの他クラスへの公開範囲を決める役割を果たしていて、publicの他にも、protectedやprivateが存在する。

-Java, Technology