Javaのメソッドは、プログラムを整理し再利用可能なコードブロックを作成するための基本的な構造の1つ。
メソッドを定義することで、特定のタスクを1つの単位としてまとめ、プログラムの他の部分から呼び出して再利用することができるように。結果、コードの読みやすさと保守性が向上し、柔軟で効率的なプログラミングが可能になります。
メソッドを理解し、適切に活用することでより効率的で管理しやすいプログラムを作成することができます。
このページではJavaのメソッドとは何か?基本的な使い方や利用する際の注意点などを初心者向けに1からわかりやすく解説します。
関連 Javaの1stステップ:基本的な構文ルールを1分で復習!
そもそも・・・メソッドとは?
メソッドとはJavaで特定の動作や機能を実行するためのコードのまとまりのこと。似たような概念に「関数」が存在しますが、Javaには「関数」という独立した概念は存在せずすべて「メソッド」として定義されるのが特徴です。
参考)他の言語での関数とメソッド
- 関数(Function)
- 一般的なプログラミング言語(例えば、PythonやJavaScript)では、関数は独立して存在し、特定のタスクを実行する。
- メソッド(Method)
- メソッドは、オブジェクト指向プログラミング(OOP)で使われる用語で、特定のクラスに関連付けられた関数です。
ざっくり説明すれば、関数とはそれ単体で存在しそれ単体で実行することができるプログラムの部品のようなイメージ。メソッドはそれ単体で存在するというよりは、クラスの中で定義され、クラスを通して利用するものであるということ。
いずれにせよ、一旦ここではメソッドも「関数」と同じようなものと理解しておけばOK。クラスの中で定義される「関数」がメソッドだ!と覚えておきましょう。
メソッドの定義
ここからは本題のJavaでメソッドを定義するための基本的なルールを説明していきます。
メソッドの構文
メソッドを定義するための基本的な構文は以下の通り。
修飾子 戻り値の型 メソッド名(引数) { // メソッドの中の処理 return 戻り値; // 戻り値がある場合 }
- 修飾子
- メソッドのアクセスレベル。例えば、
public
はどこからでも呼び出せることを意味。
- メソッドのアクセスレベル。例えば、
- 戻り値の型
- メソッドが返すデータの型。データを返さない場合は
void
を利用。
- メソッドが返すデータの型。データを返さない場合は
- メソッド名
- メソッドを識別するための名前で分かりやすく、何をするメソッドかを表す名前にする。
- 引数
- メソッドが受け取るデータ。複数の引数がある場合は、カンマで区切る。
#いろいろ書いていますが、サンプルコードを見ていくと難しく感じることはなくなるはず。まずは素直にコードを見ながら勉強していきましょう。
早速、簡単なサンプルをご覧ください。
サンプルコード 2つの整数を加算するメソッド
public int addNumbers(int a, int b) { int sum = a + b; // 2つの引数を加算 return sum; // 合計を返す }
このコードは、整数(int
)を返すaddNumbers
というメソッドを定義しています。このメソッドは2つの整数を引数として受け取った後2つの整数を加算し、その結果を返します。
引数というのは、ザックリいえばこのメソッドに与える「インプット」のようなもので、戻り値というのはその「アウトプット」のようなもの。料理の具材を渡したら一品作ってくれるシェフのようなもので、具材にあたるのが引数、出来上がった料理が戻り値です。
戻り値がないメソッド:void
戻り値がないメソッドを定義する場合は、戻り値の型としてvoid
を指定します。例えば、戻り値のない「挨拶を表示するメソッド」であれば↓のように定義します。
public void greet(String name) { System.out.println("Hello, " + name); }
このメソッドは、name
という引数を受け取り、「Hello (名前)」を表示するだけで戻り値はありません。そのため戻り値の型には「void」を指定してます。
メソッドの呼び出し
定義したメソッドを使うためには、まずそのメソッドが属するクラスのインスタンスを作成し、メソッドを呼び出す、という2つのステップを経る必要があります。
参考 Javaのクラスの基本(オブジェクト&インスタンス化の基本)
冒頭でもご説明した通りJavaは「関数=それ単体で存在しそれ単体で実行できる」は存在せず、すべてメソッド(クラスの中で定義し、クラスを呼び出すことでメソッドを呼び出す)という概念で統一されるためです。
ステップ1 クラスのインスタンスを作成
クラス名 オブジェクト名 = new クラス名();
ステップ2 メソッドの呼び出し
オブジェクト名.メソッド名(引数);
クラスの中でメソッドを定義し、それを呼び出す具体的な例を見てみましょう。わかりやすい例として、自動車(クラス)に「エンジンをかける」(メソッド)という機能を定義し、それを呼び出す例を考えます。
日常生活でも同じですが、エンジンをかけるためには車そのものが存在しないといけません。これと同じでメソッドを呼び出すには、まず自動車のインスタンス(具体的な車)を作るステップが必要です。
public class Car { // メソッドの定義 public void startEngine() { System.out.println("エンジンがかかりました"); } } public class Main { public static void main(String[] args) { // Carクラスのインスタンスを作成 Car myCar = new Car(); // インスタンスを使ってメソッドを呼び出し myCar.startEngine(); } }
上記のように、Car
クラスのstartEngine
メソッドを使ってエンジンをかける動作を実行しています。メソッドはクラスに属しているため、クラスのインスタンスを通じて呼び出されていることが分かります。
続けて、より実践的な例として戻り値の有無や数に注目して以下のサンプルコードをご覧ください。
public class Calculator { // 戻り値があるメソッドの定義 public int addNumbers(int a, int b) { return a + b; } // 戻り値がないメソッドの定義 public void greet(String name) { System.out.println("Hello, " + name); } // 複数の戻り値を返すメソッドの定義 public Result calculate(int a, int b) { int sum = a + b; int product = a * b; return new Result(sum, product); } } public class Main { public static void main(String[] args) { // Calculatorクラスのインスタンスを作成 Calculator calc = new Calculator(); // 戻り値があるメソッドの呼び出し int result = calc.addNumbers(5, 3); System.out.println("Sum: " + result); // 戻り値がないメソッドの呼び出し calc.greet("Alice"); // 複数の戻り値を返すメソッドの呼び出し Result calcResult = calc.calculate(4, 2); System.out.println("Sum: " + calcResult.sum); System.out.println("Product: " + calcResult.product); } }
↑の例は、Calculator
クラスに3つのメソッドを定義し、Main
クラスのmain
メソッドでそれらを呼び出しています。戻り値があるメソッド、ないメソッド、複数の戻り値を返すメソッドの使い方がわかります。