14.
staticメソッド
メソッドとは
メソッドとは、いくつかの処理を一つにまとめた仕組みで関数ともいいます。特にクラスで定義されたメソッドをクラスメソッドといいます。
数学の関数とプログラムの関数
関数は数学の関数のような考え方で、変数を与えて結果を返す(戻り値)といった機能のことをいいます。
$$y = x + 5\tag{関数}$$ $$x = 2\tag{変数}$$ $$y = 7\tag{戻り値}$$
関数は複数の処理を1つにまとめて記述できるメリットがあります。関数を呼び出すだけで毎回決まった処理をするのに便利です。
メソッドの構造
メソッドは引数と戻り値で構成します。引数は入力値、戻り値はメソッドで処理した値のことです。

引数や戻り値は必須ではなく、関数によっては引数や戻り値を利用しない処理をすることもできます。
メソッドの定義
メソッドは主に「メソッド名」「修飾子」「戻り値」「引数」で宣言します。データ型は戻り値にあわせます。
修飾子 データ型 メソッド名(引数の型 変数名, ...) {
処理
....
return 戻り値;
}
アクセス修飾子
アクセス修飾子は、メソッドやプロパティがどこからアクセスできるか制御するワードです。
修飾子 | アクセス |
---|---|
public | すべてのクラス |
protected | 現在のクラスとサブクラス |
private | 現在のクラスと同じパッケージのクラス |
なし | 現在のクラスのみ |
その他修飾子
修飾子 | 説明 |
---|---|
static | staticクラスやメソッド |
final | 定数宣言 |
staticメソッド
mainメソッドのように修飾子が「static」のメソッドを、staticメソッドといいます。
public static void main(String[] args) {
}
メソッドの定義
$$y = x + 5$$
の計算を、calculateメソッドを定義してみます。
public static Float calculate(Float x) {
Float y = x + 5;
return y;
}
引数と戻り値
calculate()は、引数「x」に値を入力し、戻り値「y」をreturn で結果を返します。
メソッド名(関数名)
修飾子「public」、データ型「Float」、メソッド名「calculate」で宣言します。
public static Float calculate()
メソッドの処理の部分は { } で囲みます。
public static Float calculate() {
//処理
}
引数の定義
引数は ( ) の中にデータ型を指定して定義します。
public static Float calculate(Float x) {
//処理
}
メソッドの処理
メソッドの処理は変数「y」をFloat型で宣言して引数「x」で計算します。
public static Float calculate(Float x) {
Float y = x + 5;
}
メソッドの戻り値
計算した変数「y」を、returnで返します。 return しないとメソッドの答えが返らないので注意してください。
public static Float calculate(Float x) {
Float y = x + 5;
return y;
}
メソッドの実行
定義したメソッドは、メソッド名() で実行します。
メソッド名(引き数);
メソッドの戻り値
メソッドの実行で、return の戻り値を取得できます。
データ型 戻り値 = メソッド名(値)
staticメソッドの実行
staticメソッドは、staticメソッドの中からでしか原則実行できません。 calculate()メソッドは staticメソッドなので、mainメソッドから実行できます。
public static void main(String[] args) {
Float answer = calculate(2f);
System.out.println(answer);
}
結果
7.0
staticメソッドでない場合
つぎの calculate2()メソッドは staticメソッドでない(クラスメソッド)ので、mainメソッドで実行しようとするとコンパイルエラーになります。
public static void main(String[] args) {
Float answer = calculate2(2f);
System.out.println(answer);
//コンパイルエラー
Float answer2 = calculate2(2f);
}
//クラスメソッド
public Float calculate2(Float x) {
Float y = x + 5;
return y;
}
複数の引数定義
メソッドの引数は、変数名を「 , 」(カンマ)で区切って複数定義できます。
メソッドの定義
メソッドcalculateTotalPrice()を定義して、合計金額を計算します。
public static int calculateTotalPrice(int price, int amount) {
int totalPrice = price * amount;
return totalPrice;
}
メソッドの実行
mainメソッドで、calculateTotalPrice()を実行します。
public static void main(String[] args) {
...
int totalPrice = calculateTotalPrice(200, 5);
System.out.println(totalPrice + "円");
}
結果
1000円
オーバーロード
オーバーロードとは
同じクラスの中で、同じ名前のメソッドを複数定義できるメソッドをオーバーロードといいます。引数を自由に変えたいときに便利です。
- メソッド名が同じ
- 引数やデータ型などが違う
- 同じクラスで複数定義可能
オーバーロードの例
引数が違う「greet」メソッドの場合です。
メソッド名 | 引数 |
---|---|
greet | String name |
greet | String name, String weather |
public static void main(String[] args) {
greet("東京 太郎");
greet("東京 太郎", "晴れ");
}
//引数が1つのメソッド
static void greet(String name) {
System.out.println(name + "さん、こんにちは!");
}
//引数が2つのメソッド
static void greet(String name, String weather) {
System.out.println(name + "さん。今日天気は" + weather + "です。");
}
結果
東京 太郎さん、こんにちは!
東京 太郎さん。今日天気は晴れです。
演習
問題1
つぎのsaticメソッド loginMessage() で、【1】【2】にあてはまるコードはなんですか?
public static void main(String[] args) {
String message = loginMessage("東京 太郎");
System.out.println(message);
}
static 【1】 loginMessage(String userName) {
String message = "ようこそ" + userName + "さん!";
【2】 message;
}
1)【1】void 【2】return
2)【1】String 【2】return
3)【1】void 【2】空欄
4)【1】String 【2】空欄
問題2
つぎのプログラムを実行した結果はどれですか?
public static void main(String[] args) {
int point = calculatePoint(400);
System.out.println(point + "pt");
point = calculatePoint(400, 0.05f);
System.out.println(point + "pt");
}
public static int calculatePoint(int price) {
float point = price * 0.01f;
return (int) point;
}
public static int calculatePoint(int price, float pointRate) {
float point = (float) price * pointRate;
return (int) point;
}
1)4pt 20pt
2)20pt 4pt
3)4pt 4pt
4)20pt 20pt
問題3
calculateTotalPrice() メソッド をつぎの項目で2つ定義して、メインメソッドから実行みましょう。
引数 | 計算 | 戻り値 |
---|---|---|
価格、個数 | 合計金額 = 価格 × 個数 | 合計金額 |
価格、個数、消費税率 | 合計金額 = 価格 × 個数 × 消費税率 | 合計金額 |