Javaの基本構文一覧

## 1. HelloWorld
:::note info
Javaのファイル名とpublic class名は一致します。
※一致していないとコンパイルエラーになります。
:::
```java:HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
```
```text:結果
Hello, World!
```

## 2. 変数宣言
```java:Variables.java
public class Variables {
    public static void main(String[] args) {
        int number = 10; // 整数型
        boolean isJavaFun = true; // 真偽値型

        String text = "Hello"; // 文字列は参照型
    }
}
```
基本のデータ型（プリミティブ型）には以下の種類があります。
| 型名 | 値 | 型名 | 値 |
|:--|:--|:--|:--|
| byte | 整数（8ビット） | float | [単精度浮動小数点数](https://ja.wikipedia.org/wiki/%E5%8D%98%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0) |
| short | 整数（16ビット） | double | [倍精度浮動小数点数](https://ja.wikipedia.org/wiki/%E5%80%8D%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0) |
| int | 整数（32ビット） | char | 1つの文字 | 
| long | 整数（64ビット） | boolean | 論理値（true or false） |

文字列は参照型です。

https://qiita.com/yumeya-tech/items/e1b68c7a0d3f94575798

## 3. 分岐
```java:Branching.java
public class Branching {
    public static void main(String[] args) {
        int number = 10;
        // if文
        if (number > 0) {
            System.out.println("数字は正数です。");
        } else if (number < 0) {
            System.out.println("数字は負数です。");
        } else {
            System.out.println("数字はゼロです。");
        }
        // switch文
        switch (number) {
            case 10:
                System.out.println("数字は10です。");
                break; // switch文を抜ける。これがないと次の「数字は10以外です。」が表示されてしまう。
            default:
                System.out.println("数字は10以外です。");
                break;
        }
    }
}
```
## 4. 繰り返し
```java:Loop.java
public class Loop {
    public static void main(String[] args) {
        // for文
        for (int i = 1; i <= 5; i++) {
            System.out.println("i = " + i);
        }

        // while文
        int j = 5;
        while (j > 0) {
            System.out.println("j = " + j);
            j--;
        }
    }
}
```
```text:結果
i = 1
i = 2
i = 3
i = 4
i = 5
j = 5
j = 4
j = 3
j = 2
j = 1
```
## 5. 関数
:::note info
クラス内で定義される関数をメソッドと呼びます。
:::
```java:Functions.java
public class Functions {
    public static void main(String[] args) {
        printMessage("Hello, Java!");
    }

    // mainがstaticなのでメソッドもstaticとする必要がある。
    public static void printMessage(String message) {
        System.out.println(message);
    }
}
```
```text:結果
Hello, Java!
```
## 6. クラスとオブジェクト
```java:MyClass.java
public class MyClass {
    public static void main(String[] args) {
        /*
        インスタンスの生成。
        クラスからオブジェクトを作り出します。
        クラスのコンストラクタを呼び出してオブジェクトの初期化を行います。
         */
        Person person = new Person("山田", 30);
        // メソッドを呼び出します。
        person.display();
    }
}
```
```java:Person.java
public class Person {
    /*
    インスタンス変数。
    オブジェクトごとに異なる値を持てる変数です。
    インスタンス変数をprivateにすることで、外部から直接アクセスできないようにします。
    これはオブジェクト指向のカプセル化の要素の１つです。
     */
    private String name;
    private int age;

    /*
    コンストラクタ。
    オブジェクトが生成される際に呼び出される特殊なメソッドです。
    クラス名と同じ名前で、戻り値の指定もありません。
    オブジェクト生成時の初期化処理に使用されます。
     */
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /*
    ゲッターとセッター。
    インスタンス変数の値を読み書きするためのメソッドです。
    インスタンス変数はprivateで外部からアクセスできないため、
    このメソッドを通してアクセスすることになります。
     */
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // メソッド
    public void display() {
        System.out.println("名前は " + name + " です。年齢は " + age + " 歳です。");
    }
}
```
```text:結果
名前は 山田 です。年齢は 30 歳です。
```
## 7. エラー処理
```java:ErrorHandling.java
public class ErrorHandling {
    public static void main(String[] args) {
        try {
            // 0で割ってエラーを発生させる。
            int result = 10 / 0;
        } catch (ArithmeticException e) {
            // 算術計算で例外的条件が発生した場合にスローされます。
            System.out.println("エラーが発生しました: " + e.getMessage());
        } finally {
            System.out.println("このブロックは常に実行されます。");
        }
    }
}
```
```text:結果
エラーが発生しました: / by zero
このブロックは常に実行されます。
```
## 8. リスト（配列）
```java:ArrayExample.java
public class ArrayExample {
    public static void main(String[] args) {
        // 配列を宣言する
        int[] numbers = {1, 2, 3, 4, 5};
        // 配列を1つずつ取り出して繰り返す
        for (int number : numbers) {
            System.out.println(number);
        }

        // Listを宣言する。
        List<Integer> list = new ArrayList<>();
        for (int i = 1; i <= 5; i++) {
            // Listに値を設定する
            list.add(i);
        }
        for (int element : list) {
            // リストを1つずつ取り出して繰り返す
            System.out.println(element);
        }
    }
}
```
```text:結果
1
2
3
4
5
1
2
3
4
5
```
## 9. 辞書（連想配列）
```java:HashMapExample.java
import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        // Mapの宣言。キーがString、値がInteger(int)。
        HashMap<String, Integer> map = new HashMap<>();
        // Mapに値を追加する。キーと値。
        map.put("Apple", 1);
        map.put("Banana", 2);
        map.put("Cherry", 3);

        // Mapから値を取得する。
        System.out.println(map.get("Apple"));
    }
}
```
```text:結果
1
```
## 10. ファイル入出力
```java:FileIO.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;

public class FileIO {
    public static void main(String[] args) {
        // output.txtを作成して内容を書き込む。
        // output.txtはルート直下に配置されます。
        try (PrintWriter writer = new PrintWriter(new FileWriter("output.txt"))) {
            writer.println("Hello, file!");
        } catch (Exception e) {
            e.printStackTrace();
        }

        // output.txtの内容を読み込んで内容を表示する。
        try (BufferedReader reader = new BufferedReader(new FileReader("output.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
```
```text:結果
Hello, file!
```