Learn in 10 minutes

Learn in 10 minutes

10分でJavaを学ぶ

Javaは「一度書けば、どこでも実行できる」という原則で知られる高水準のオブジェクト指向プログラミング言語です。このチュートリアルはJava 21+の機能をカバーし、Javaの基礎を素早く学習するのに役立ちます。

1. 最初のJavaプログラムを書く

Javaプログラムはクラスで構成されています。簡単なプログラムから始めましょう。HelloWorld.javaという名前のファイルを作成します:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

プログラムをコンパイルして実行します:

javac HelloWorld.java
java HelloWorld

出力は次のようになります:

Hello, World!

この簡単なプログラムはJavaの基本構造を示しています。すべてのJavaプログラムには少なくとも1つのクラスが必要で、mainメソッドがエントリーポイントです。

2. 基本的な構文

Javaの構文は構造化されており、特定の規則に従います:

// これは単一行コメントです
/* これは
   複数行コメントです */

public class BasicSyntax {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}

Javaの基本的な構文規則:

  • 大文字小文字の区別:Javaは大文字小文字を区別します。Variablevariableは異なります。
  • クラス名:大文字で始まり、キャメルケース規則に従う必要があります。
  • メソッド名:小文字で始まり、キャメルケース規則に従う必要があります。
  • セミコロン:すべてのステートメントはセミコロン;で終わる必要があります。
  • 中括弧:コードブロックは中括弧{}で定義されます。
  • コメント:単一行コメントは//、複数行コメントは/* */を使用します。

3. 変数とデータ型

Javaは静的型付け言語です。つまり、変数の型を明示的に宣言する必要があります。

変数命名規則

  • 文字、アンダースコア_、またはドル記号$で始まる必要があります。
  • 文字、数字、アンダースコア、ドル記号を含むことができます。
  • Javaのキーワードであってはいけません。
  • キャメルケース規則に従う必要があります。

Javaのプリミティブデータ型

  • byte:8ビット符号付き整数(-128から127)
  • short:16ビット符号付き整数(-32,768から32,767)
  • int:32ビット符号付き整数(-2^31から2^31-1)
  • long:64ビット符号付き整数(-2^63から2^63-1)
  • float:32ビット浮動小数点
  • double:64ビット浮動小数点
  • boolean:trueまたはfalse
  • char:16ビットUnicode文字
public class DataTypes {
    public static void main(String[] args) {
        // 整数型
        byte age = 25;
        short year = 2024;
        int population = 1000000;
        long distance = 93000000L; // longにはLサフィックス
        
        // 浮動小数点型
        float temperature = 36.5f; // floatにはfサフィックス
        double pi = 3.14159265359;
        
        // ブール型と文字型
        boolean isActive = true;
        char grade = 'A';
        
        // 文字列(参照型)
        String name = "Alice";
        
        System.out.println("Name: " + name + ", Age: " + age);
    }
}

3.1 文字列操作

Javaの文字列はオブジェクトであり、プリミティブ型ではありません:

public class StringExample {
    public static void main(String[] args) {
        String text = "Java Programming";
        
        System.out.println("Length: " + text.length());
        System.out.println("Uppercase: " + text.toUpperCase());
        System.out.println("Lowercase: " + text.toLowerCase());
        System.out.println("Character at index 0: " + text.charAt(0));
        System.out.println("Substring: " + text.substring(0, 4));
        System.out.println("Contains 'Java': " + text.contains("Java"));
        
        // 文字列の連結
        String greeting = "Hello, " + "World!";
        System.out.println(greeting);
        
        // 文字列のフォーマット
        String formatted = String.format("Pi is approximately %.2f", 3.14159);
        System.out.println(formatted);
    }
}

4. 配列とコレクション

4.1 配列

配列は同じ型の複数の値を格納します:

public class ArrayExample {
    public static void main(String[] args) {
        // 配列の宣言と初期化
        int[] numbers = {1, 2, 3, 4, 5};
        String[] fruits = new String[3];
        fruits[0] = "apple";
        fruits[1] = "banana";
        fruits[2] = "orange";
        
        // 配列要素へのアクセス
        System.out.println("First number: " + numbers[0]);
        System.out.println("Array length: " + numbers.length);
        
        // 配列の反復処理
        for (int i = 0; i < numbers.length; i++) {
            System.out.println("Number " + i + ": " + numbers[i]);
        }
        
        // 拡張forループ(for-each)
        for (String fruit : fruits) {
            System.out.println("Fruit: " + fruit);
        }
        
        // 多次元配列
        int[][] matrix = {{1, 2}, {3, 4}, {5, 6}};
        System.out.println("Matrix element [1][1]: " + matrix[1][1]);
    }
}

4.2 コレクション

Java Collections Frameworkは動的なデータ構造を提供します:

import java.util.*;

public class CollectionsExample {
    public static void main(String[] args) {
        // ArrayList(動的配列)
        ArrayList<String> names = new ArrayList<>();
        names.add("Alice");
        names.add("Bob");
        names.add("Charlie");
        names.remove("Bob");
        System.out.println("Names: " + names);
        
        // HashMap(キーと値のペア)
        HashMap<String, Integer> ages = new HashMap<>();
        ages.put("Alice", 25);
        ages.put("Bob", 30);
        ages.put("Charlie", 35);
        System.out.println("Alice's age: " + ages.get("Alice"));
        
        // HashSet(一意の要素)
        HashSet<Integer> uniqueNumbers = new HashSet<>();
        uniqueNumbers.add(1);
        uniqueNumbers.add(2);
        uniqueNumbers.add(2); // 重複、追加されません
        uniqueNumbers.add(3);
        System.out.println("Unique numbers: " + uniqueNumbers);
        
        // コレクションの反復処理
        for (String name : names) {
            System.out.println("Name: " + name);
        }
        
        for (Map.Entry<String, Integer> entry : ages.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

5. 演算と演算子

Javaはさまざまな演算のためのさまざまな演算子を提供します:

  • 算術演算子+-*/%(剰余)、++(インクリメント)、--(デクリメント)
  • 比較演算子==!=><>=<=
  • 論理演算子&&(かつ)、||(または)、!(否定)
  • ビット演算子&|^~<<>>>>>
  • 代入演算子=+=-=*=/=%=
public class OperatorsExample {
    public static void main(String[] args) {
        int a = 10, b = 3;
        
        // 算術演算
        System.out.println("Addition: " + (a + b));
        System.out.println("Subtraction: " + (a - b));
        System.out.println("Multiplication: " + (a * b));
        System.out.println("Division: " + (a / b));
        System.out.println("Modulus: " + (a % b));
        
        // インクリメントとデクリメント
        System.out.println("Pre-increment: " + (++a));
        System.out.println("Post-decrement: " + (b--));
        
        // 比較演算
        System.out.println("Equal: " + (a == b));
        System.out.println("Not equal: " + (a != b));
        System.out.println("Greater than: " + (a > b));
        
        // 論理演算
        boolean x = true, y = false;
        System.out.println("AND: " + (x && y));
        System.out.println("OR: " + (x || y));
        System.out.println("NOT: " + (!x));
        
        // 代入演算
        int c = 5;
        c += 3; // c = c + 3
        System.out.println("After += 3: " + c);
    }
}

6. 制御フロー

6.1 条件文

public class ConditionalExample {
    public static void main(String[] args) {
        int score = 85;
        
        // if-else文
        if (score >= 90) {
            System.out.println("Grade: A");
        } else if (score >= 80) {
            System.out.println("Grade: B");
        } else if (score >= 70) {
            System.out.println("Grade: C");
        } else {
            System.out.println("Grade: F");
        }
        
        // 三項演算子
        String result = (score >= 60) ? "Pass" : "Fail";
        System.out.println("Result: " + result);
        
        // switch文
        char grade = 'B';
        switch (grade) {
            case 'A':
                System.out.println("Excellent!");
                break;
            case 'B':
                System.out.println("Good!");
                break;
            case 'C':
                System.out.println("Average");
                break;
            default:
                System.out.println("Invalid grade");
        }
    }
}

6.2 ループ

public class LoopExample {
    public static void main(String[] args) {
        // forループ
        System.out.println("For loop:");
        for (int i = 0; i < 5; i++) {
            System.out.println("Iteration: " + i);
        }
        
        // 拡張forループ(for-each)
        System.out.println("\nFor-each loop:");
        int[] numbers = {1, 2, 3, 4, 5};
        for (int num : numbers) {
            System.out.println("Number: " + num);
        }
        
        // whileループ
        System.out.println("\nWhile loop:");
        int count = 0;
        while (count < 3) {
            System.out.println("Count: " + count);
            count++;
        }
        
        // do-whileループ
        System.out.println("\nDo-while loop:");
        int x = 0;
        do {
            System.out.println("X: " + x);
            x++;
        } while (x < 3);
        
        // breakとcontinue
        System.out.println("\nBreak and continue:");
        for (int i = 0; i < 10; i++) {
            if (i == 5) {
                break; // ループを終了
            }
            if (i % 2 == 0) {
                continue; // 偶数をスキップ
            }
            System.out.println("Odd number: " + i);
        }
    }
}

7. メソッド(関数)

Javaのメソッドはクラスに属する関数です:

public class MethodExample {
    
    // パラメータなし、戻り値なしのメソッド
    public static void greet() {
        System.out.println("Hello, World!");
    }
    
    // パラメータありおよび戻り値ありのメソッド
    public static int add(int a, int b) {
        return a + b;
    }
    
    // 複数のパラメータを持つメソッド
    public static String formatName(String firstName, String lastName) {
        return firstName + " " + lastName;
    }
    
    // メソッドオーバーロード(同じ名前、異なるパラメータ)
    public static int multiply(int a, int b) {
        return a * b;
    }
    
    public static double multiply(double a, double b) {
        return a * b;
    }
    
    // 可変長引数(varargs)
    public static int sum(int... numbers) {
        int total = 0;
        for (int num : numbers) {
            total += num;
        }
        return total;
    }
    
    public static void main(String[] args) {
        greet();
        
        int result = add(5, 3);
        System.out.println("Addition result: " + result);
        
        String fullName = formatName("John", "Doe");
        System.out.println("Full name: " + fullName);
        
        System.out.println("Multiply integers: " + multiply(4, 5));
        System.out.println("Multiply doubles: " + multiply(2.5, 3.0));
        
        System.out.println("Sum of multiple numbers: " + sum(1, 2, 3, 4, 5));
    }
}

8. オブジェクト指向プログラミング

8.1 クラスとオブジェクト

public class Person {
    // インスタンス変数(フィールド)
    private String name;
    private int age;
    private String email;
    
    // コンストラクタ
    public Person(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }
    
    // デフォルトコンストラクタ
    public Person() {
        this("Unknown", 0, "");
    }
    
    // getterメソッド
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
    
    public String getEmail() {
        return email;
    }
    
    // setterメソッド
    public void setName(String name) {
        this.name = name;
    }
    
    public void setAge(int age) {
        if (age >= 0) {
            this.age = age;
        }
    }
    
    public void setEmail(String email) {
        this.email = email;
    }
    
    // インスタンスメソッド
    public void introduce() {
        System.out.println("Hi, I'm " + name + ", " + age + " years old.");
    }
    
    // ロジックを持つメソッド
    public boolean isAdult() {
        return age >= 18;
    }
    
    // toStringメソッド(ObjectのtoStringをオーバーライド)
    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + ", email='" + email + "'}";
    }
    
    public static void main(String[] args) {
        // オブジェクトの作成
        Person person1 = new Person("Alice", 25, "[email protected]");
        Person person2 = new Person();
        
        // メソッドの使用
        person1.introduce();
        System.out.println("Is adult: " + person1.isAdult());
        
        person2.setName("Bob");
        person2.setAge(17);
        person2.setEmail("[email protected]");
        
        System.out.println(person1.toString());
        System.out.println(person2.toString());
    }
}

この包括的なJavaチュートリアルは、Javaプログラミングを始めるのに必要な基本的な概念をカバーしています。言語の強い型付け、オブジェクト指向の機能、豊富な標準ライブラリにより、堅牢なアプリケーションを構築するのに強力です。これらの例を練習し、コードを実験してJavaプログラミングの概念の理解を深めてください。