Java入門 #11 - メソッドの定義と呼び出し

入門 | 10分 で読める | 2026.05.02

公式ドキュメント

この記事の要点

メソッドは処理をまとめて名前を付けたもの
• 宣言は 戻り値型 メソッド名(引数) { ... }
return で値を返す。戻り値がない場合は void

このシリーズについて

「Java入門」は1本1テーマで進む全15回のシリーズです。本記事はその第11回として、メソッドの定義と呼び出しを扱います。

前提条件: Java 21 がインストール済み。変数、配列、for文の基本を理解していること。

メソッドとは

メソッド(Method) は処理をまとめて名前を付けたものです。他の言語では「関数」と呼ばれることもあります。

メソッドを使う理由説明
再利用同じ処理を何度も書かずに済む
可読性処理に名前が付くので、コードが読みやすくなる
保守性修正が1箇所で済む

例えば「2つの数の合計を計算」という処理を何度も書くと冗長です。

int a = 5, b = 10;
int sum1 = a + b;

int c = 20, d = 30;
int sum2 = c + d;

メソッドにまとめると簡潔になります。

int sum1 = add(5, 10);
int sum2 = add(20, 30);

メソッドの宣言

アクセス修飾子 戻り値型 メソッド名(引数型 引数名, ...) {
    // 処理
    return 戻り値;
}
要素説明
アクセス修飾子メソッドの公開範囲public, private など
戻り値型返す値の型int, String, void(戻り値なし)
メソッド名処理を表す名前add, calculateSum など
引数受け取る値int a, int b

基本例: 戻り値があるメソッド

// Java 21
public class MethodExample {
    public static void main(String[] args) {
        int result = add(5, 10);
        System.out.println("5 + 10 = " + result);  // → 5 + 10 = 15
        
        result = add(20, 30);
        System.out.println("20 + 30 = " + result);  // → 20 + 30 = 50
    }
    
    // メソッド定義
    public static int add(int a, int b) {
        return a + b;
    }
}
部分説明
public staticクラスメソッド(後述)。現時点では「おまじない」として付ける
int戻り値の型(整数を返す)
addメソッド名
int a, int b引数(2つの整数を受け取る)
return a + b;計算結果を返す

ポイント: static は「クラスメソッド」を意味します。main から直接呼び出すメソッドには static が必要です。詳細は次回のクラスで扱います。

void: 戻り値がないメソッド

戻り値が不要な場合は void を使います。

// Java 21
public class VoidExample {
    public static void main(String[] args) {
        greet("Alice");
        greet("Bob");
    }
    
    public static void greet(String name) {
        System.out.println("こんにちは、" + name + "さん!");
        // return は書かない(または return; だけ)
    }
}

出力:

こんにちは、Aliceさん!
こんにちは、Bobさん!
戻り値型用途
int, String など計算結果や値を返す
void画面表示、ファイル書き込みなど、値を返さない処理

補足: void メソッドでも途中で抜けたい場合は return;(値なし)を使えます。

引数の渡し方

Javaは値渡しです。メソッド内で引数を変更しても、呼び出し元の変数には影響しません。

プリミティブ型の場合

// Java 21
public class PassByValue {
    public static void main(String[] args) {
        int x = 10;
        increment(x);
        System.out.println(x);  // → 10(変わらない)
    }
    
    public static void increment(int n) {
        n = n + 1;  // コピーを変更しているだけ
    }
}

配列・オブジェクトの場合

参照型(配列、オブジェクト)の場合、参照が値渡しされます。中身は変更できます。

// Java 21
public class ArrayParameter {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        modifyArray(arr);
        System.out.println(arr[0]);  // → 100(変更される)
    }
    
    public static void modifyArray(int[] array) {
        array[0] = 100;  // 参照先の中身を変更
    }
}
引数の扱い
プリミティブ型コピーが渡される。元の変数には影響しない
参照型(配列、オブジェクト)参照が渡される。中身は変更できる

注意: 配列やオブジェクトをメソッドに渡すと、中身を変更できてしまいます。意図しない副作用を避けるため、メソッドの役割を明確にしましょう。

オーバーロード(多重定義)

同じ名前引数の型や個数が異なるメソッドを複数定義できます。

// Java 21
public class OverloadExample {
    public static void main(String[] args) {
        System.out.println(add(5, 10));           // → 15
        System.out.println(add(5.5, 10.5));       // → 16.0
        System.out.println(add(5, 10, 15));       // → 30
    }
    
    // int 2つ
    public static int add(int a, int b) {
        return a + b;
    }
    
    // double 2つ
    public static double add(double a, double b) {
        return a + b;
    }
    
    // int 3つ
    public static int add(int a, int b, int c) {
        return a + b + c;
    }
}
区別される要素区別されない要素
引数の戻り値の型
引数の個数引数の名前
引数の順序

ポイント: 戻り値の型が違うだけではオーバーロードとして認識されません。必ず引数の型・個数・順序のいずれかが異なる必要があります。

アクセス修飾子

メソッドの公開範囲を制御します。

修飾子同じクラス同じパッケージサブクラスどこからでも
public
protected×
(なし = default)××
private×××

現時点では以下の使い分けだけ覚えてください。

修飾子用途
public外部から呼び出したいメソッド
privateクラス内部でのみ使うメソッド
// Java 21
public class AccessExample {
    public static void main(String[] args) {
        printMessage();  // public なので呼び出せる
        // privateMethod();  // エラー: private なので main から呼べない
    }
    
    public static void printMessage() {
        System.out.println("Public method");
        privateMethod();  // 同じクラス内なので呼び出せる
    }
    
    private static void privateMethod() {
        System.out.println("Private method");
    }
}

補足: protected と default(修飾子なし)の違いは継承を扱う際に重要です。現時点では publicprivate を使い分けられれば十分です。

実践例: 配列の最大値を返すメソッド

// Java 21
public class ArrayMax {
    public static void main(String[] args) {
        int[] scores = {85, 90, 78, 92, 88};
        int max = findMax(scores);
        System.out.println("最大値: " + max);  // → 最大値: 92
    }
    
    public static int findMax(int[] array) {
        int max = array[0];
        
        for (int i = 1; i < array.length; i++) {
            if (array[i] > max) {
                max = array[i];
            }
        }
        
        return max;
    }
}

ポイント: 「配列の最大値を探す」という処理をメソッドにすることで、他の場所でも再利用できます。

よくあるミス

1. return を書き忘れる

public static int add(int a, int b) {
    int sum = a + b;
    // return を書き忘れ → コンパイルエラー
}

正しくは:

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

2. void メソッドで値を返そうとする

public static void greet(String name) {
    return "Hello";  // エラー: void は値を返せない
}

正しくは:

public static String greet(String name) {
    return "Hello, " + name;
}

3. 引数の型が一致しない

int result = add("5", "10");  // エラー: add は int を受け取る

正しくは:

int result = add(5, 10);

まとめ

項目内容
宣言戻り値型 メソッド名(引数) { return 値; }
void戻り値がない場合に使う
引数プリミティブ型はコピー、参照型は参照が渡される
オーバーロード引数の型・個数・順序が異なれば同名可
修飾子public(外部公開)、private(内部専用)
  • メソッドは処理を再利用・整理するための基本単位
  • return で値を返す(void なら不要)
  • static は現時点では「おまじない」として付ける(次回詳細解説)

次のステップ

Java入門 #12 - クラスとオブジェクト でオブジェクト指向の基本となるクラスを学びます。

参考リソース

この技術を体系的に学びたいですか?

未来学では東証プライム上場企業のITエンジニアが24時間サポート。月額24,800円から、退会金0円のオンラインIT塾です。

メールで無料相談する
← 一覧に戻る