Javaのメソッドについて


Javaのメソッドについての説明です。

🤔 仮引数と実引数

メソッド定義のパラメータ変数を「仮引数」、呼び出し側でメソッドに渡すパラメータを「実引数」と呼びます。

public class Book {
private int price;
void addPrice(int delta) { // deltaが仮引数
price = delta;
}
}
class Caller {
public static void main(String[] args) {
Book book = new Book();
book.addPrice(1000); // この1000が実引数
}
}

引数の型が基本形の場合、実引数の値が仮引数にコピーされるため、仮引数の処理で実引数は影響を受けません。

引数の型が参照型の場合、実引数の参照が仮引数にコピーされます。そのため、仮引数の処理で実引数の状態が変更します。

🍮 可変長引数

可変長引数は、メソッドの引数の数を自由に変えられる文法です。
引数の定義でパラメータ変数の型に...を付けます。可変長引数の実態は配列です。

public class Display {
private void printMessage(String... messages) { // String[] message と同義
for (String s :messages) {
System.out.println(s);
}
}
public static void main(String[] args) {
Display display = new Display();
String[] messages = new String[] { "hoge", "fuga" };
display.printMessage(messages);
}
}

上の実行結果は次のとおりです。

hoge
fuga

🎃 オーバーロード

オーバーロードは、1つのクラス内に同じ名前のメソッドやコンストラクタを複数定義できることです。

public class Book {
private String title;
void setTitle(String s) {
System.out.println(Argument is String);
title = s;
}
void setTitle(StringBuilder s) {
System.out.println(Argument is StringBuilder);
title = s.toString();
}
void printTitle(){
System.out.println(title);
}
public static void main(String[] args) {
Book book = new Book();
// String の引数のメソッドを呼び出し
book.setTitle(abc);
book.printTitle();
// StringBuilderの引数のメソッドを呼び出し
book.setTitle(new StringBuilder(def));
book.printTitle();
}
}

実行結果は次のとおりです。

Argument is String
abc
Argument is StringBuilder
def

オーバーロードには次のルールがあります。

  • オーバーロードされたメソッドは、別々に定義されたメソッドとして扱われます
  • 同一クラス内の同名メソッドで引数のデータ型、順番、数が異なればオーバーロードとみなします
  • メソッドの呼び出し時に指定された引数を元にコンパイラがどのメソッドを呼ぶか判断する
  • オーバーロードされたメソッドは、異なる修飾子を指定できる
  • スーパークラスから継承したメソッドに対してもオーバーロードできる

🚌 戻り値のルール

  • メソッド宣言で戻り値型の宣言は必須。戻り値がない場合はvoidを指定
  • 戻り値型がvoidであるメソッドは値を戻せない
  • 戻り値型と実際に戻す値の型は同じでなければならない

😼 staticフィールドの書き換え

staticフィールドは「クラス名.フィールド名」でも「インスタンス.フィールド名」でもアクセス可能です。

public class Sample {
static int num = 0;
}
Sample.num = 10;
System.out.println(Sample.num); // => 10
Sample new s = new Sample();
s.num += 10;
System.out.println(Sample.num); // => 20

🐝 参照リンク

📚 おすすめの書籍