手を動かして学ぶ Java入門 (クラス・メソッド)
環境構築不要! ブラウザから直接コードを実行できます。
本記事では、Java のクラス・メソッドについて学びます。
15分くらいで、さくっと終わる記事をめざしています。
(今回はいつもより少し長めです)
シリーズ一覧
- シリーズ
- 手を動かして学ぶ Java入門 (Hello world 編)
- 手を動かして学ぶ Java入門 (数値と演算)
- 手を動かして学ぶ Java入門 (数値と変数)
- 手を動かして学ぶ Java入門 (コメントの書き方)
- 手を動かして学ぶ Java入門 (文と式の違い)
- 手を動かして学ぶ Java入門 (if文)
- 手を動かして学ぶ Java入門 (if-else文、if-elseif文)
- 手を動かして学ぶ Java入門 (文字列の連結)
- 手を動かして学ぶ Java入門 (while文)
- 手を動かして学ぶ Java入門 (break文)
- 手を動かして学ぶ Java入門 (continue文)
- 手を動かして学ぶ Java入門 (for文)
- 手を動かして学ぶ Java入門 (クラスの超基本)
- 手を動かして学ぶ Java入門 (クラス・メソッド)
- 手を動かして学ぶ Java入門 (クラス・フィールド)
- 手を動かして学ぶ Java入門 (クラス・コンストラクタ)
- 手を動かして学ぶ Java入門 (文字列クラス)
- 手を動かして学ぶ Java入門 (静的メソッド)
- 手を動かして学ぶ Java入門 (静的フィールド)
- 手を動かして学ぶ Java入門 (定数の定義)
- 手を動かして学ぶ Java入門 (クラス継承の超基本)
- 手を動かして学ぶ Java入門 (メソッドのオーバーライド)
- 手を動かして学ぶ Java入門 (メソッドのオーバーロード)
続きは近日公開予定!
はじめに
この記事は paiza.IO の「Online Java compiler」を利用しています。
2024/12/17 現在、上記環境の Java バージョンは 18 です。(paiza.IO利用ガイド)
実行したコードは paiza.IO で保存および公開されることがあります。
そのため、個人情報などの機密性の高い情報は、コードとして入力しないようにご注意ください。
詳細は paiza.IO の利用規約およびプライバシーポリシーをご確認ください。
クラスのおさらい
クラスとは、本当に簡単にいうと…
- フィールド (変数)
- メソッド (関数)
この2つが集まったものです。
今回は、このうちの メソッド については学んでいきます。
メソッド
メソッドとは、プログラムの実際の処理をまとめたものです。
例えば、足し算や引き算などの計算をしたり、その結果を画面に出力したり、などなどです。
Java 以外の言語では「メンバ関数」と呼ぶこともあります。
それでは、Human クラスを例に メソッド を見ていきましょう。
Human は 人間 という意味ですね。
public class Human {
public void say() {
System.out.println("こんにちは!");
}
}
この例では say というメソッドを作りました。
話す という意味のメソッドです。
実際にこのクラスを動かしてみましょう。
コードは変更せずに、そのまま「実行(Ctrl-Enter)」ボタンを押してください。
注意:コードは2ファイルあります。上部のタブで切り替え可能です。
(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)
いかがでしたでしょうか? 「出力」のところに
こんにちは!
と表示されたら成功です。
呼び出し
public class Human {
public void say() {
System.out.println("こんにちは!");
}
}
メソッドを呼び出すには、まず Human クラスの インスタンス を作成します。
インスタンスの生成には new 演算子を使います。
そして、そのインスタンスを使って say メソッドを呼び出します。
Human human = new Human();
human.say();
このプログラムを実行すると「出力」には次のように表示されます。
こんにちは!
無事に say メソッドが実行されたのがわかりますね。
メソッド呼び出しの基本は、
- インスタンス変数名 + ドット + メソッド名 + カッコ
になります。
human.say();
^^^^^ <--- インスタンス変数名
human.say();
^ <--- ドット
human.say();
^^^ <--- メソッド名
human.say();
^^ <--- カッコ
アクセス修飾子
say メソッドをもう少し詳しく見ていきましょう。
public class Human {
public void say() {
System.out.println("こんにちは!");
}
}
最初の public は、メソッドのアクセス修飾子です。
public (公開) の他に private (非公開) もよく使います。
public void say()
^^^^^^ <--- メソッドのアクセス修飾子
メソッドのアクセス修飾子は、簡単に説明すると…
- public : クラスの外からメソッドを呼び出せる
- private : クラスの外からメソッドを呼び出せない
という違いがあります。
private メソッドの例も見てみましょう。
Human クラスに whisper(ささやく) メソッドを追加します。
public class Human {
public void say() {
whisper();
}
private void whisper() {
System.out.println("こんにちは…");
}
}
それぞれのメソッドのアクセス修飾子は、
- say : public (公開)
- whisper : private (非公開)
ですね。
まず public の say メソッドを呼び出してみます。
実際にプログラムで確認してみましょう。
結果がどうなるか予想してから「実行(Ctrl-Enter)」ボタンを押してください。
注意:コードは2ファイルあります。上部のタブで切り替え可能です。
(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)
いかがでしたでしょうか? 「出力」のところに
こんにちは…
と表示されたら成功です。
whisper メソッドは private です。
しかし、Human クラスの内部(sayメソッド) からは呼び出すことができました。
public class Human {
public void say() {
whisper();
^^^^^^^^^^ <--- クラス内部からは呼び出しOK!
}
private void whisper() {
...
}
}
それでは、whisper メソッドをクラスの外から呼び出してみます。
先ほどのコードを書き換えて、実際にエラーになることを確認してみましょう。
Main クラスの
Human human = new Human();
human.say();
これを…
Human human = new Human();
human.whisper();
に書き換えてから「実行(Ctrl-Enter)」ボタンを押してください。
注意:コードは2ファイルあります。上部のタブで切り替え可能です。
(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)
下記のようなコンパイルエラーが出たら成功です。
Main.java:5: error: whisper() has private access in Human
human.whisper();
^
1 error
"whisper() has private access in Human" とは、意訳すると
- whisper メソッドは Human クラスの private メソッドです。(よって外からはアクセスできません)
という感じです。
このように、private なメソッドは、そのクラスの外からはアクセスできなくなります。
さて、private のアクセス修飾子についてどう感じましたでしょうか?
不便だな、と感じるかたもいらっしゃるかもしれません。
しかし、private は無くてはならないアクセス修飾子です。
一般的には、必要最低限のメソッドだけを public にして、それ以外は private にします。
ただ、このあたりはクラス設計の話になってくるので、ちょっと難しいかもです。
慣れるまでは、public をメインで使ってもよいかもしれません。
また、メソッドのアクセス修飾子には public や private 以外にもあります。
もし興味がありましたら、下記の記事もご参照ください。
- 関連:アクセス修飾子の基本
戻り値
アクセス修飾子の次にくるのは 戻り値の型 です。
public class Human {
public void say() {
System.out.println("こんにちは!");
}
}
public void say()
^^^^ <--- 戻り値の型
今回の say メソッドは戻り値がありません。
戻り値がない場合は void とします。読み方は「ボイド」です。
void は「中身がない、空っぽの」という意味ですね。
それでは戻り値のある例も見てみましょう。
Human クラスに、年齢を取得する getAge メソッドを持たせます。
public class Human {
public int getAge() {
return 20;
}
}
戻り値の型は int 型にします。
public int getAge() {
^^^ <--- 戻り値の型
}
そして、年齢として 20 を返すようにします。
戻り値を返すには return 文を使います。
public int getAge() {
return 20;
^^^^^^ <--- 戻り値を返す
}
実際にプログラムを動かして確認してみましょう。
結果がどうなるか予想してから「実行(Ctrl-Enter)」ボタンを押してください。
注意:コードは2ファイルあります。上部のタブで切り替え可能です。
(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)
いかがでしたでしょうか? 「出力」のところに
年齢 = 20
と表示されたら成功です。
メソッドが返す値は変数に代入できる、というのがポイントですね。
int age = human.getAge();
^^^^^^^ <--- 変数 age に、getAge メソッドの戻り値を代入する
パラメータ
パラメータとは、メソッドに渡す値のことです。
Java 以外の言語では「引数(ひきすう)」と呼ぶこともあります。
それでは、say メソッドに
- 相手の名前を受け取るための yourName パラメータ
を追加してみましょう。
yourName パラメータは String型 にします。
(String型は 文字列 を扱うクラスです)
public class Human {
public void say(String yourName) {
System.out.println("こんにちは、" + yourName + "さん!");
}
}
パラメータの基本は次のようになります。
- メソッド名 + ( + パラメータの型 + パラメータ名 + )
public void say(String yourName)
^^^^^^ <--- パラメータの型
public void say(String yourName)
^^^^^^^^ <--- 任意のパラメータ名
それでは、パラメータを指定して say メソッドを呼び出してみましょう。
パラメータは String型 なので文字列の "アリス" を指定します。
結果がどうなるか予想してから「実行(Ctrl-Enter)」ボタンを押してください。
注意:コードは2ファイルあります。上部のタブで切り替え可能です。
(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)
いかがでしたでしょうか? 「出力」のところに
こんにちは、アリスさん!
と表示されたら成功です。
さて、パラメータはいくつでも指定できます。
複数指定するには、カンマ(,) で区切ります。
public class Human {
public void walk(String place, int minutes) {
System.out.println(place + "まで " + minutes + "分、歩きました。");
}
}
Human human = new Human();
human.walk("公園", 30);
このプログラムを実行すると、次のように表示されます。
公園まで 30分、歩きました。
応用問題
【問題】
まずは、下記のプログラムをそのまま「実行(Ctrl-Enter)」してみましょう。
結果はコンパイルエラーになったはずです。
Calculator クラスには、足し算をするための add メソッドがないからですね。
ちなみに Calculator は「計算機」という意味になります。
さて、そこで問題です。
Calculator クラスに add メソッドを追加してください。
そして、プログラムを実行すると、
1 + 2 = 3
30 + 40 = 70
500 + 600 = 1100
と「出力」に表示するようにしてください。
【ヒント】
- add メソッドは「パラメータ2つ」「戻り値あり」です。
それでは、Calculator クラスに add メソッドを書き加えて「実行(Ctrl-Enter)」してみましょう。
注意:コードは2ファイルあります。上部のタブで切り替え可能です。
(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)
無事に、
1 + 2 = 3
30 + 40 = 70
500 + 600 = 1100
と出力されましたでしょうか?
もし解けなかった場合は、下記の回答例をご参照ください。
回答例
【コード】
public class Calculator {
// ここに add メソッドを追加
public int add(int value1, int value2) {
return value1 + value2;
}
}
【出力】
1 + 2 = 3
30 + 40 = 70
500 + 600 = 1100
まとめ
メソッドとは、プログラムの実際の処理をまとめたものです。
例えば、足し算や引き算などの計算をしたり、その結果を画面に出力したり、などなどです。
クラスにはなくてはならない要素の1つですね。
次回は「手を動かして学ぶ Java入門 (クラス・フィールド)」になります。
関連記事
- シリーズ
- 手を動かして学ぶ Java入門 (Hello world 編)
- 手を動かして学ぶ Java入門 (数値と演算)
- 手を動かして学ぶ Java入門 (数値と変数)
- 手を動かして学ぶ Java入門 (コメントの書き方)
- 手を動かして学ぶ Java入門 (文と式の違い)
- 手を動かして学ぶ Java入門 (if文)
- 手を動かして学ぶ Java入門 (if-else文、if-elseif文)
- 手を動かして学ぶ Java入門 (文字列の連結)
- 手を動かして学ぶ Java入門 (while文)
- 手を動かして学ぶ Java入門 (break文)
- 手を動かして学ぶ Java入門 (continue文)
- 手を動かして学ぶ Java入門 (for文)
- 手を動かして学ぶ Java入門 (クラスの超基本)
- 手を動かして学ぶ Java入門 (クラス・メソッド)
- 手を動かして学ぶ Java入門 (クラス・フィールド)
- 手を動かして学ぶ Java入門 (クラス・コンストラクタ)
- 手を動かして学ぶ Java入門 (文字列クラス)
- 手を動かして学ぶ Java入門 (静的メソッド)
- 手を動かして学ぶ Java入門 (静的フィールド)
- 手を動かして学ぶ Java入門 (定数の定義)
- 手を動かして学ぶ Java入門 (クラス継承の超基本)
- 手を動かして学ぶ Java入門 (メソッドのオーバーライド)
- 手を動かして学ぶ Java入門 (メソッドのオーバーロード)