メソッドの基礎
メソッドはコードを整理する基本的な構成要素です。このレッスンでは、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文が必要です。
📖 まとめ
- メソッドはコードを整理する基本単位で、繰り返し呼び出し可能
- メソッドにはパラメータと戻り値を設定できる
- メソッドオーバーロード:同じメソッド名、異なるパラメータリスト
- Varargsにより、メソッドが可変数の引数を受け取ることができる
- Javaは値渡しを使用
📝 演習
- メソッド練習: 2つの数値の最大値、最小値、平均値を計算するメソッドを作成
- オーバーロード練習: 異なるパラメータ型をサポートする複数のprintメソッドを作成
- Varargs: 任意の数の値の平均値を計算するメソッドを作成
次のレッスン
次のレッスンでは、メソッドの応用を学びます — 再帰、静的メソッド、メソッド参照。



