ITスクールの授業1日目のまとめ:「Hello, Java」コードの分析
前書き
ITスクールで、国費支援教育でJAVAを学んで日本へ就職するという、6か月掛かる授業が始まった。
プログラミング専攻でない人も受けることができたので、ITやプログラミングを全く知らないことを前提として行われる授業であった。
毎日8時間プログラミングばっかりするハードな授業であるが、1日めにはさすがにもたくさんは学べないので、JAVAのプログラミングに使うIDE[1]である「Eclipse」をダウンロードしたり、JAVAはどんなプログラミング言語であるかなどを学んだ。
そして初めてJAVAとEclipseで作ったプログラムである「Hello, Java」であったが、正直なんの内容もないコードなんで、JAVAのコードがどんな順番で起動するかと、コード全体をできるかぎり分析してみたいと思いました。
まず、「Hello, Java」の全体コードを書いてみよう。
public class Hello {
public static void main(String[] args) {
System.out.println("Hello World!");
}
JAVAやプログラミングの何一つ分からない人には「Hello World!」しか見えないコードであるが、その見えない部分のところをできるかぎり調べてみたいと思う。
1)なぜ「Hello」classに「public」というものがついているのか。
2)なぜmainメソッドに「public」と「static」と「void」がついているのか。
3)「Hello, Java」を出力するための「System.out.println()」はどのような仕組みであるのか。
この3つのことを、様々なJAVAの用語が日本ではどんな言葉になっているかと共に調べてみよう。
1)なぜ「Hello」classに「public」というものがついているのか。
調べた結果をすぐに言うと、「mainメソッドを含んでいるclass(クラス)には、publicをつけることが約束になっているから」である。
JAVAがプログラムを実行する時、JAVAの内部にあるJVM(Java Virtual Machine)というプログラムが「main」という名前のメソッドを探すことになっている。
その時、JVMがmainメソッドにアクセスできるためにmainの前に「public」というアクセス修飾子[2]をつける。
そのため、mainメソッドを含んでいるclassもpublicに指定しないと、mainメソッドにアクセスができなくなってしまいので、必ずmainメソッドを含んでいるclassはpublic属性にしないといけない。
2)なぜmainメソッドに「public」、「static」、「void」がついているのか。
- 「public」である理由
上記した通り、JAVAで作られたプログラムを実行すると、JAVAの内部のプログラムである「JVM」は一番最初に「main」という名前のメソッドにアクセスしようとする。そのため、classの外からもアクセスができるように「public」に設定をしないといけない。
- 「static」である理由
JAVAでは、classの中にあるメソッドを呼び出すためにはインスタンスを作らないといけない。
ならば再びプログラムを実行する時をみよう。JVMはプログラムが始まると、mainメソッドを探して実行する。では、mainメソッドを実行するためにそのclassのインスタンスを作らないといけないのか?
mainメソッドに「static」という言葉がついている理由がここにある。mainメソッドを一番最初に実行する前にすることができてしまう状況で、「static」をつけるとインスタンスを作らなくてもメソッドを呼び出すのができる。
その他にも、プログラムが実行している間、わざわざインスタンスを作っておいてメモリーを占有しておく必要もないので「static」属性をつけているとも言える
- 「void」である理由
「void」とは、メソッドの終わり目にreturn(戻り値)がないという意味です。
考えてみると、mainメソッドはプログラムの始まりと終わりを担当するメソッドである。mainメソッドの終わりはつまり、プログラムが終わることである。だから戻り値が必要ないのも当然だと言えるのではないか?
3)「System.out.println()」はどのような仕組みであるのか。
上のコードを見ると、「Hello World!」出力するために「System.out.println」というメソッドを使うのがわかる。あのメソッドの仕組みを調べてみよう。
-
「System」というものは、「class」である。これはjava.langというパッケージ(package)に含まれている。java.langは基本的にプログラムに含まれているパッケージで、その中身である「system」もいつも使えるらしい。
-
「out」というものは、「System」というclassの中身[3]にあるインスタンスである。「PrintStream」というclassのインスタンスでもあって、「.」をつけると「println()」メソッドを呼び出すことができる。
-
「println」というものは、「PrintStream」というclassのメソッドで、「out」を通じて呼び出される。()のなかに色々なデータ形を書いても全部出力できるのは、これは各データ形ごとにメソッドのオーバーロード[4] ができているからである。
以上で、あらゆるプログラミング言語で初めて作るプリグラム、「Hello, ~~~」シリーズのJAVAバージョンを、知っている知識の中で詳しく分析してみた。
ほとんどググって調べた情報だったけど、調べながらでてきた用語が日本語でどんな言葉であるか[5]を調べたのがすごい勉強になったと思う。
次からも、ITスクールでの授業をzennに記録して、日本へ就職するまでどんなことを学んで来たかをしっかりアピールできるようになりたい。
-
より効率的なプログラミングをするために、コードを編集、構築、テスト、パッケージ化などの多様な機能を提供するソフトウェアです。出所のURL:https://aws.amazon.com/jp/what-is/ide/ ↩︎
-
あるclassに、どこからアクセスができるようにするかを決定する属性。後でまた記録する予定です。 ↩︎
-
詳しくは、java.lang.System ↩︎
-
名前と戻り値が同じであれば、違うデータ形をパラメータに設定して、メソッドに色んなデータ形を使うことができるようにする文法です。 ↩︎
-
たとえば、classやoverlordなどはそのままカタカナで書き換えればオッケーだか、returnは戻り値という、独自的な言葉を使っていて難しかった。 ↩︎
Discussion