Java

【Java】java言語におけるメソッド引数の参照渡し、メソッドの呼び出し、メソッド戻り値、オーバーロードについて徹底解説!

Javaの世界でディープダイブ: メソッド引数、メソッド呼び出し、戻り値の全てを解明

Javaというプログラミング言語の世界は、多くのエンジニアにとって無限の可能性と楽しさを秘めています。

特に、メソッドに焦点を当てた時、その魅力はいかんなく発揮されます。メソッドとは、特定の操作をまとめたものであり、適切に使用することでコードの再利用性や可読性を高めることができます。

サルモリ
メソッド、めちゃくちゃ便利だよね!ちょっとした処理をひとまとめにして、何度でも使えるなんて!

セクション1: メソッド引数とは何か?

まず最初に「メソッド引数」について探求していきましょう。

メソッド引数とは、メソッドが外部から情報を受け取るための「箱」のようなものです。メソッドを呼び出す際に、この「箱」に情報(値)を入れて、メソッドに渡すことができます。メソッドは、この受け取った情報をもとに処理を行います。

サルモリ
「箱」にいろんなものを入れて、メソッドに渡すのが引数かぁ。引数なしでもメソッドは作れるけど、引数があるともっと色んな処理ができるんだね!

サンプルコード1: メソッド引数の基本

ソースコード例

 出力結果
Hello, World! 

上記のサンプルコードでは、"World"という文字列を引数としてgreetingメソッドに渡しています。

そして、greetingメソッドでは、受け取った引数("World")を使用して、"Hello, World!"と出力しています。

サルモリ
引数を使ってメソッドに情報を渡すと、そのメソッドはもっとパワーアップするんだね!

セクション2: Javaでメソッドを呼び出す際のポイント

次に、「メソッドの呼び出し」にフォーカスを当てていきます。

メソッドを呼び出す、とは、定義したメソッドを実行することを意味します。メソッド名の後に()(括弧)をつけることで、メソッドを呼び出すことができ、引数が必要な場合は括弧の中に値を指定します。

サルモリ
括弧を忘れずにね!
Java言語のStreamAPIを徹底的に学びたい方は画像をクリックしてご覧ください!
KindleUnlimited会員であれば、全ての本をご覧頂けます。 StreamAPIを理解すれば、Javaの世界が変わる 第1版

サンプルコード2: メソッド呼び出しの例

ソースコード例

 出力結果
Hello, Java! 

このコードのcreateGreetingメソッドはString型の引数を1つ取り、String型の値を返します。

そして、mainメソッド内でcreateGreetingメソッドを呼び出し、返り値を変数messageに代入しています。最後に、messageを出力しています。

サルモリ
メソッドの返り値って、そのメソッドが終わったあとに出てくる値のことだよね!

セクション3: メソッド戻り値の利用法

さて、メソッドの「戻り値」について見ていきましょう。

戻り値は、メソッドが計算や処理をした結果を呼び出し元に返すためのものです。returnキーワードを使用して、メソッドから値を返すことができます。

サルモリ
returnで値を返せるんだね。でも、戻り値がないメソッドもあるんだよね?

サンプルコード3: 戻り値がvoidのメソッド

ソースコード例

 出力結果
Hello, Java! 

こちらの例では、displayGreetingメソッドは何も返さないため、戻り値の型としてvoidを指定しています。

ただし、このメソッドは副作用(ここではコンソールへの出力)を持っています。

サルモリ
出力するだけのメソッドも、それはそれで役に立つんだね!

セクション4: さまざまな戻り値の型

Javaでは、メソッドの戻り値の型にさまざまなデータ型を指定することができます。このセクションでは、基本的なデータ型や複雑なデータ構造まで、さまざまな戻り値の型の例を見ていきます。

1. int型の戻り値

 出力結果
15 

2. String型の戻り値

 出力結果
Hello, Java! 

3. 配列の戻り値

 出力結果
1 2 3 4 5 

4. リストの戻り値

 出力結果
Apple Banana Cherry 

これらの例からわかるように、Javaではメソッドの戻り値としてさまざまなデータ型やデータ構造を使用することができます。戻り値の型に合わせて、適切なデータ構造や型を返すように設計することで、効率的なプログラミングが可能となります。

セクション5: メソッドのオーバーロード

Javaでは、同じ名前のメソッドをクラス内に複数定義することができます。これをメソッドのオーバーロードと呼びます。メソッドをオーバーロードするには、メソッド名は同じである必要がありますが、パラメータの型や数が異なる必要があります。

1. パラメータの数が異なる場合のオーバーロード

 出力結果
8 10 

2. パラメータの型が異なる場合のオーバーロード

 出力結果
15 15.0 

オーバーロードを用いることで、同じ動作のロジックでも異なる型やパラメータ数に対応することができ、プログラムの可読性と再利用性を高めることができます。ただし、メソッドのオーバーロードが過多になるとコードの管理が複雑になるため、利用の際は適度なバランスを考慮しましょう。

セクション6: メソッドのスコープと可視性

Javaプログラムでは、メソッドが定義される場所によってその「スコープ」(メソッドが呼び出せる範囲)と「可視性」(他のクラスから見えるかどうか)が決まります。

ここでは、メソッドのスコープと可視性に関する基本的な原則について、ソースコード例を交えながら詳しく解説していきます。

1. ローカル変数のスコープ

メソッド内で定義される変数(ローカル変数)のスコープは、その変数が定義されたブロック内です。

すなわち、変数はそのブロックを抜けるとアクセスできなくなります。

ソースコード例

2. メソッドの可視性

メソッドの可視性は、アクセス修飾子によって制御されます。public, private, protected, または デフォルト(アクセス修飾子を指定しない)が利用できます。

  • public: どこからでもアクセス可能
  • private: 同じクラス内からのみアクセス可能
  • protected: 同じパッケージまたはサブクラスからアクセス可能
  • デフォルト: 同じパッケージからアクセス可能

こちらもソースコードを通じて、それぞれのアクセス修飾子の違いを確認していきましょう。

この節は理解するのが少し難しいかもしれませんが、実際にコードを書いて実行してみると理解が深まるでしょう。

サルモリ
サルモリさん:「コードをいじるのって、実は楽しいよね!私もよくコードを書いて遊んでいるんだ!」

 セクション7:メソッド引数: 値渡し vs. 参照渡し

Javaではメソッド引数は値渡しであり、これはプリミティブ型とオブジェクト参照の両方に適用されます。では詳しく見ていきましょう。

プリミティブ型の引数

プリミティブ型(int, char, float, etc.)の引数は、その値がメソッドにコピーされます。これは、メソッド内でパラメータの値を変更しても、メソッド呼び出し元の値には影響しないことを意味します。

上記の例では、modifyPrimitiveメソッド内でnumberの値を変更しても、numの値は変わりません。

オブジェクト参照の引数

オブジェクト参照を引数として渡す場合、その参照(またはポインタ)が値としてコピーされます。しかし、ここで注意が必要なのは、参照がコピーされるのはあくまで「参照」であり、オブジェクト自体はコピーされない点です。

この例では、modifyObjectReferenceメソッドにstringBufferの参照が渡され、メソッド内でそのオブジェクトを変更しています。したがって、メソッド呼び出し元のstringBufferも変更されます。

参照自体の変更は反映されない

オブジェクト参照を変更しても、その変更はメソッド呼び出し元には影響しません。

上記では、modifyReferenceメソッド内でbufferを新しいオブジェクトに設定していますが、stringBufferの内容は変更されません。なぜなら、メソッド内で参照が新しいオブジェクトに変わっただけで、呼び出し元の参照(stringBuffer)は変わらないからです。

まとめ

この記事では、Javaのメソッドに関連する基本的な操作、つまり引数の渡し方、メソッドの呼び出し方、および戻り値の取り扱い方について概観しました。これらの基本を理解することで、Javaプログラミングの様々な側面に対応することができます。

-Java

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock