Javaプログラミング入門

2. Hello World!

最終更新:

javatutorial

- view
管理者のみ編集可
Eclipseは、プログラムの作成から実行までをスムーズに行える便利な開発環境です。
初めてプログラミングをする方でも、基本的な操作を覚えれば簡単にプログラムを書いて実行できます。
ここでは、Eclipseを使ってプログラムを作成し、実行するまでの流れを説明します。

これから私たちがやろうとしているのは、コンピュータに「Hello World!」という文字を画面に表示してもらうことです。
では、具体的にどのようにお願いすればよいのでしょうか?
① 人間の言葉で表現すると?
私たちが普段使う言葉で説明すると、次のようになります。
➡ 「コンピュータの画面に『Hello World!』と表示してください。」

② プログラムとは何か?
私たちはこのお願いをコンピュータに伝えたいのですが、コンピュータは人間の言葉をそのまま理解することができません。
そこで、コンピュータが理解できる言葉で指示を出す必要があります。
さらに、コンピュータへの指示は、細かく正確に伝えなければいけません。
例えば、
  • どこに表示するのか?
  • 何を表示するのか?
  • どのように実行するのか?
といったことを、コンピュータが理解できる形で書く必要があります。
このように、コンピュータが理解できる形で書かれた指示の集合をプログラムと呼びます。

実際にコードを動かす手順までを順番に見ていきましょう。

新規プロジェクトの作成

まずは、新しいプロジェクトを作成し、プログラミングの学習を始める準備を整えましょう。
メニューバーから「ファイル」→「新規」→「Javaプロジェクト」を選択します。

「新規Javaプロジェクト」ウィンドウが開いたら、プロジェクト名を「JavaLesson」と入力し「完了」ボタンをクリックします。

JavaLessonというプロジェクトが作成されます。

プロジェクトのアイコンの左にある三角を押すと二つの項目がでます。

プログラムファイルの作成

作成したプロジェクトを右クリックし、「新規」→「クラス」を選択します。

「新規Javaクラス」ウィンドウが表示されるので、名前(M)のテキストを入力するところに「HelloWorld」と入力します。
また、下にある「public static void main(String[] args)」にチェックを入れて、「完了」をクリックします。

プログラムの入力

作成した"HelloWorld.java」ファイルがエディタ画面に表示されます。

以下のプログラムを入力してください
サンプル:HelloWorld.java
  1. public class HelloWorld {
  2. public static void main(String[] args) {
  3. System.out.println("Hello World!");
  4. }
  5. }
  6.  
System.out.println()という長い単語は「syso」と入力した後に
コントロールキーを押しながらスペースキーを押すことで入力を補完することができます。




コードを入力したら、コントロールキーを押しながらSキーを押してファイルを保存します。

プログラムの実行

ファイルの保存が完了したら、エディタ画面で右クリックをして「実行」→「Javaアプリケーション」を選択します。

実行結果は下部の「コンソール」タブに表示され、このタブに「Hello World!」と表示されれば成功です。

これからの学習について

以降のサンプルプログラムに関してもプログラムファイルを作成する手順と同じ通り作成してもらえば問題ありません。
入力する名前に関しては、サンプル:の横に指定してありますので、その名前通りに入力してください。



実行する際も手順は同じになります。

プログラムの開始地点であるメインメソッド

public static void main(String[] args)という記載に関して簡単に説明をしたいと思います。
Javaのプログラムは、必ず特定の場所から実行が始まります。
そのスタート地点となるのがmainメソッドです。
mainメソッドはプログラムの出発地点です。
もし mainメソッドがなければ、Javaのプログラムはどこから実行すればいいのかわからず、Eclipseで実行することができません。

画面に値を表示する

画面に文字を表示するときに使うのがSystem.out.println()という命令になります。
System.out.println()の() の中には、表示したい値を指定します。
今回はHello Worldという文字列を表示させたいので、ダブルクォーテーションで囲った中にHello Worldと指定しています。
他の文字を出力したければダブルクォーテーションで囲まれた中身を変更すれば良いです。
System.out.println("Javaの世界へようこそ!");
文字列だけでなく、数値も出力することができます。
その場合は()の中に直接数値を指定すれば良いです。
System.out.println(100);

💡注意
命令の最後には ;を必ずつける必要があります。
この;を付け忘れるとエラーになり、プログラムの実行ができなくなります。

わかりやすいプログラムを書くためには

プログラムを書くときは、他の人が読んでもわかりやすいように工夫することが大切です。
そのために特に重要なのが、コメントインデントです。

コメントとは?

コメントは、プログラムの中に書く説明文のことです。
実行するプログラムには影響を与えず、人間がプログラムの意図や動作を理解するために役立ちます。

Javaでは、コメントは次のように書きます。
サンプル:HelloWorld.java
  1. public class HelloWorld {
  2. public static void main(String[] args) {
  3. // これは1行コメントです
  4. System.out.println("Hello World!"); // 画面に「Hello World!」を表示する
  5. }
  6. }
  7.  
サンプル:HelloWorld.java
  1. public class HelloWorld {
  2. public static void main(String[] args) {
  3. /*
  4.   * これは複数行コメントです。
  5.   * /* */で囲まれている限り何行でも続けて書けます。
  6. */
  7. System.out.println("Hello World!");
  8. }
  9. }
  10.  

インデントとは?

ブロックについて
プログラムでは、中括弧 {} の間にある部分をブロックと呼びます。
中括弧を開いたら、必ず閉じる必要があります。

初心者によくあるミスは、閉じ中括弧を忘れてしまうことです。
これをしっかりと行わないと、プログラムがコンパイルできなくなります。
そのため、中括弧を開いたらすぐに閉じる中括弧を書く癖をつけるようにしましょう。

Javaのようなプログラミング言語では、中括弧{ が出ると一段字下げをして、コードの開始位置をずらすという習慣があり
逆に、中括弧 }が出ると、元の位置に戻すという習慣があります

これにより、今どの階層にいるのかがわかりやすくなります。
インデントをしなくてもプログラムは動作しますが、階層構造が分かりにくくなるため、必ずインデントを行うようにしてください。

コラム

mainメソッドの修飾子の意味

1.なぜpublicが必要なのか?
publicは「誰がこのメソッドを使えるか」を決めるアクセス修飾子です。
Javaのプログラムは、JVM(Java仮想マシン)によって実行されます。
JVMがmainメソッドを見つけて実行するためには、このメソッドがどこからでもアクセスできるようにしておく必要があります。
もしprivateやprotectedにしてしまうと、JVMがmainメソッドを見つけられず、プログラムが動かなくなります。
そのため、publicにする必要があります。

2.なぜstaticが必要なのか?
staticは「このメソッドはクラスに属する」ことを意味します。
Javaのプログラムを実行するとき、まだ何のオブジェクト(インスタンス)も作られていません。
そのため、最初に呼び出されるmainメソッドは、オブジェクトを作らなくても使えるようにしておく必要があります。
staticを付けることで、オブジェクトを作らずに直接クラス名だけで実行できるようになります。
もしstaticを付けなかった場合、プログラムを実行する前にオブジェクトを作る必要があります。
しかし、クラスのコンストラクターが引数を必要とする場合、どの引数を渡せばいいのか分からなくなり、プログラムの実行が難しくなります。
また、抽象クラスやインターフェースにもmainメソッドを書くことはできますが、それらは直接インスタンス化できません。
そのため、mainメソッドを実行できなくなってしまいます。
こういった問題を少しでも緩和するために、Javaではmainメソッドがstaticになっています。

3.なぜvoidが必要なのか?
voidは「このメソッドは何も値を返さない」ことを意味します。
mainメソッドは、プログラムの開始地点としてのみ呼び出されることを目的としています。
したがってmainメソッドから値を返すことは無意味であり、不要になります。

4.なぜmainという名前でなければいけないのか?
JavaのプログラムはJVMが決めたルールによって実行されます。
そのルールの中で、プログラムの開始地点となるメソッドは必ずmainであると決められています。
もしmain以外の名前にしてしまうと、JVMは最初に実行する場所を見つけられず、エラーになってしまいます。
そのため、メソッド名は必ずmainにする必要があります。

mainメソッドの仮引数は可変長引数でも大丈夫です

public static void main(String... args) { 
} 
 

Java 21から main メソッドがシンプルになりました

従来のmainメソッド(Java20以前)
  1. class Main {
  2. public static void main(String[] args) {
  3. // プログラムの処理
  4. }
  5. }
  6.  
Java 21以降の main メソッド
  1. void main(String[] args) {
  2. // プログラムの処理
  3. }
  4.  
驚いた方もいるかもしれませんが、クラスの記述がなくなっています。
クラスがないけど大丈夫なの?と思うかもしれませんが、実際にはコンパイル時に自動でクラスが追加されます。
例えば、javapコマンドを使って逆アセンブルすると、コンパイル後には次のようなコードになっているのが確認できます。
  1. final class ファイル名 {
  2. void main(String[] args) {
  3. // プログラムの処理
  4. }
  5. }
  6.  
つまり、見た目はシンプルになっただけで、内部ではちゃんとクラスが作られているということです。

Java21でのmainメソッドの新ルール

Java21では、これまで厳格に決められていたmainメソッドのルールが、以下のようにより柔軟になりました。

①mainメソッドのアクセス修飾子が自由になりました。
public, protected, defaultの修飾子が使えるようになりました。(privateはNG)

②static main(String[] args) がない場合の処理が変わります。
static main(String[] args) がない場合、 static main()(引数なしの main)があれば、そちらを実行します。
もちろん、static main(String[] args) があれば、そちらが優先されます。

③クラスのインスタンスが自動生成される場合があります。
staticなmainメソッドがない場合、コンストラクタでインスタンスを生成し、インスタンスメソッドとしてmain()を実行します。
main(String[]args)とmain()が両方ある場合は、引数ありのmain(String[]args)が優先されます。

この機能はあくまで「初心者向けの書きやすさ向上」が目的です!
実際の、現場ではJava21未満の環境を使っているプロジェクトも多いため
public static void main(String[] args)で書くのが一般的です。
そのため、新しい書き方に慣れるのは良いですが、基本は従来の書き方をおすすめします!

Javaドキュメンテーションコメント

Javaのドキュメンテーションコメントは、/** */という形式のJavadocフォーマットで記述します。
Javadocは、簡単に言うと、Javaのソースコードから「プログラムについての説明書」を自動で生成する仕組みです。
他のプログラミング言語でも、C#では///、Pythonでは"""というように
コメントの書き方は異なりますが、何を書くべきかという基本的な部分はどの言語でも同じです。

Javadocフォーマットでコメントを記述しておくと、javadocコマンドやEclipseを使ってHTML形式のドキュメントファイルを生成できます。
このjavadocコマンドは、デフォルトでpublicまたはprotectedのメソッドのみをドキュメントに含めるようになっています。

ドキュメントの重要性
あるソフトウェア企業が、一人の技術者を採用することに決めた理由は、その人が公開しているオープンソースソフトウェアのドキュメントが素晴らしかったからです。
彼らは、作成されたドキュメントを見ただけで、その技術者には高い技術力があり、一緒に働きたいと判断したのです。
言語を学ぶために読み書きの練習が必要なように、コーディング技術を向上させるためにも、質の高いコードを読み、多くのコードを書くことが重要です。
設計ドキュメントを書くことも同じです。
日々分かりやすいドキュメントを書く練習を怠らず、長い経験を積むことで、良質なドキュメントを書く力が身につきます。
ドキュメンテーションコメントは「APIの仕様」であり、主にAPIを使用する人のために記述されます。
そのため、通常はpublicまたはprotectedなメソッドやフィールドが対象となります。
ドキュメンテーションコメントを見ただけで、そのAPIを正しく使えるようになっていることが重要です。
あるAPIを使おうと思ったときに、そのメソッドの実装を見なければ使い方が分からないようでは、正しく説明できていないということになります。
サンプル:Calculator.java
  1. /**
  2.  * Calculatorクラスは、基本的な計算機能を提供します。
  3.  * 加算、減算、乗算、除算を行うメソッドが含まれています。
  4.  */
  5. public class Calculator {
  6.  
  7. /**
  8.   * 2つの整数の合計を返します。
  9.   *
  10.   * @param a 加算する最初の整数
  11.   * @param b 加算する2番目の整数
  12.   * @return aとbの合計
  13.   */
  14. public int add(int a, int b) {
  15. return a + b;
  16. }
  17.  
  18. /**
  19.   * 2つの整数の差を返します。
  20.   *
  21.   * @param a 減算される整数
  22.   * @param b 減算する整数
  23.   * @return aからbを引いた結果
  24.   */
  25. public int subtract(int a, int b) {
  26. return a - b;
  27. }
  28.  
  29. /**
  30.   * 2つの整数の積を返します。
  31.   *
  32.   * @param a 乗算する最初の整数
  33.   * @param b 乗算する2番目の整数
  34.   * @return aとbの積
  35.   */
  36. public int multiply(int a, int b) {
  37. return a * b;
  38. }
  39.  
  40. /**
  41.   * 2つの整数の商を返します。
  42.   *
  43.   * @param a 割られる整数
  44.   * @param b 割る整数
  45.   * @return aをbで割った結果
  46.   * @throws IllegalArgumentException bが0のとき
  47.   */
  48. public double divide(int a, int b) {
  49. if (b == 0) {
  50. throw new IllegalArgumentException("割る数は0であってはいけません。");
  51. }
  52. return (double) a / b;
  53. }
  54. }
  55.  

ウィキ募集バナー