メソッドの基礎

メソッドはコードを整理する基本的な構成要素です。このレッスンでは、Javaでのメソッドの定義と使用方法を学びます。

メソッドとは

メソッドは特定のタスクを実行し、繰り返し呼び出すことができるコードブロックです。

メソッドの利点

利点 説明
コードの再利用 一度書けば、何度も呼び出し可能
明確なロジック 複雑な問題を小さなメソッドに分割
保守しやすい 変更は1箇所だけで済む

メソッドの定義

構文

JAVA
修飾子 戻り値の型 メソッド名(パラメータリスト) {
    // メソッド本体
    return 戻り値;
}

例:簡単なメソッド

JAVA
public class MethodDemo {
    // メソッドを定義
    public static void sayHello() {
        System.out.println("Hello, Java!");
    }
    
    public static void main(String[] args) {
        // メソッドを呼び出し
        sayHello();
        sayHello();  // 複数回呼び出し可能
    }
}
▶ 試してみよう

出力:

TEXT
Hello, Java!
Hello, Java!

メソッドパラメータ

パラメータにより、メソッドは外部データを受け取ることができます。

パラメータなし

JAVA
public static void printLine() {
    System.out.println("================");
}

パラメータ付き

JAVA
public static void greet(String name) {
    System.out.println("Hello, " + name + "!");
}

複数のパラメータ

JAVA
public static int add(int a, int b) {
    return a + b;
}

例:メソッドパラメータ

JAVA
public class ParamDemo {
    public static void greet(String name) {
        System.out.println("Hello, " + name + "!");
    }
    
    public static int add(int a, int b) {
        return a + b;
    }
    
    public static void printInfo(String name, int age) {
        System.out.println("名前: " + name + ", 年齢: " + age);
    }
    
    public static void main(String[] args) {
        greet("Alice");           // Hello, Alice!
        greet("Bob");             // Hello, Bob!
        
        int sum = add(3, 5);
        System.out.println("3 + 5 = " + sum);  // 8
        
        printInfo("John", 25);   // 名前: John, 年齢: 25
    }
}
▶ 試してみよう

戻り値

メソッドは呼び出し元に結果を返すことができます。

戻り値あり

JAVA
public static int max(int a, int b) {
    return (a > b) ? a : b;
}

戻り値なし(void)

JAVA
public static void printMax(int a, int b) {
    int max = (a > b) ? a : b;
    System.out.println("最大値: " + max);
}

例:戻り値

JAVA
public class ReturnDemo {
    public static int max(int a, int b) {
        return (a > b) ? a : b;
    }
    
    public static double average(int a, int b) {
        return (a + b) / 2.0;
    }
    
    public static boolean isEven(int num) {
        return num % 2 == 0;
    }
    
    public static void main(String[] args) {
        System.out.println("max(3, 5) = " + max(3, 5));       // 5
        System.out.println("avg(3, 5) = " + average(3, 5));   // 4.0
        System.out.println("isEven(4) = " + isEven(4));       // true
        System.out.println("isEven(7) = " + isEven(7));       // false
    }
}
▶ 試してみよう
⚠️ 注意: voidメソッドはreturn 値を使用できませんが、return;でメソッドを早期終了できます。

メソッドオーバーロード

メソッドオーバーロードとは、同じクラス内で同じ名前だが異なるパラメータリストを持つ複数のメソッドを持つことです。

オーバーロードルール

ルール 説明
同じメソッド名 必須
異なるパラメータ数 許可
異なるパラメータ型 許可
異なるパラメータ順序 許可
異なる戻り値の型 オーバーロードとは見なされない

例:メソッドオーバーロード

JAVA
public class OverloadDemo {
    public static int add(int a, int b) {
        return a + b;
    }
    
    public static int add(int a, int b, int c) {
        return a + b + c;
    }
    
    public static double add(double a, double b) {
        return a + b;
    }
    
    public static String add(String a, String b) {
        return a + b;
    }
    
    public static void main(String[] args) {
        System.out.println(add(1, 2));              // 3
        System.out.println(add(1, 2, 3));           // 6
        System.out.println(add(1.5, 2.5));          // 4.0
        System.out.println(add("Hello", "World"));  // HelloWorld
    }
}
▶ 試してみよう

Varargs(可変長引数)

Varargsにより、メソッドが可変数の引数を受け取ることができます。

構文

JAVA
public static int sum(int... numbers) {
    int total = 0;
    for (int num : numbers) {
        total += num;
    }
    return total;
}

例:Varargs

JAVA
public class VarargsDemo {
    public static int sum(int... numbers) {
        int total = 0;
        for (int num : numbers) {
            total += num;
        }
        return total;
    }
    
    public static void printNames(String... names) {
        for (String name : names) {
            System.out.println(name);
        }
    }
    
    public static void main(String[] args) {
        System.out.println(sum(1, 2));           // 3
        System.out.println(sum(1, 2, 3));        // 6
        System.out.println(sum(1, 2, 3, 4, 5));  // 15
        
        printNames("Alice", "Bob", "Charlie");
    }
}
▶ 試してみよう
⚠️ 注意: Varargsはメソッドの最後のパラメータでなければならず、メソッドには1つのvarargsパラメータしか持つことができません。

パラメータ渡し

Javaは「値渡し」を使用してパラメータを渡します。

プリミティブ型の渡し

JAVA
public static void changeValue(int num) {
    num = 100;  // ローカル変数のみ変更
}

public static void main(String[] args) {
    int x = 10;
    changeValue(x);
    System.out.println(x);  // 10、変更されない
}

参照型の渡し

JAVA
public static void changeArray(int[] arr) {
    arr[0] = 100;  // 配列の内容を変更
}

public static void main(String[] args) {
    int[] arr = {1, 2, 3};
    changeArray(arr);
    System.out.println(arr[0]);  // 100、変更された
}
💡 理解: プリミティブ型は値のコピーを渡します。参照型はアドレスのコピーを渡します。

メソッド呼び出しスタック

メソッドが呼び出されると、スタックメモリにスタックフレームが作成されます。

JAVA
public static void main(String[] args) {
    methodA();
}

public static void methodA() {
    methodB();
}

public static void methodB() {
    System.out.println("Hello");
}

呼び出し順序: main → methodA → methodB → 完了 → methodAに戻る → mainに戻る

❓ よくある質問

Q メソッドと関数の違いは何ですか?
A Javaでは、メソッドはクラスに属する必要があります。他の言語の関数は、Javaではクラスの静的メソッドです。
Q いつ静的メソッドを使用すべきですか?
A メソッドがオブジェクトの状態にアクセスする必要がない場合。ユーティリティクラスのメソッドは通常静的です。
Q returnを省略できますか?
A voidメソッドはreturnを省略できます(自動的に終了します)。戻り値のあるメソッドはreturn文が必要です。

📖 まとめ

📝 演習

  1. メソッド練習: 2つの数値の最大値、最小値、平均値を計算するメソッドを作成
  2. オーバーロード練習: 異なるパラメータ型をサポートする複数のprintメソッドを作成
  3. Varargs: 任意の数の値の平均値を計算するメソッドを作成

次のレッスン

次のレッスンでは、メソッドの応用を学びます — 再帰、静的メソッド、メソッド参照。

100%