【Java初心者必見】メソッドの使い方総まとめ!呼び出し方法、引数、戻り値について徹底解説!
はじめまして、エンジニアスタイル編集部です!
コラムページでは、ITフリーランスに向けてお役立ち情報を発信します。Twitterではホットな案件を紹介してまいりますので、ぜひフォローをお願いいたします!
本記事が、皆様の参考になれば幸いです。
経験がまだ少ない方にもわかりやすく説明するために、初歩的な内容も記載しております。記事も長いので、実務経験豊富な方は、ぜひ目次から関心のある項目を選択してください。
エンジニアスタイルは、最高単価390万円、国内最大級のITフリーランス・副業案件検索サービスです。Javaのフリーランス・副業案件一覧を以下からご覧いただけますのであわせてご確認ください。
目次
はじめに
Javaを用いてこれからプログラミングを学ぼうと思っている皆さん。
Javaを使用するうえで理解が欠かせないメソッドについて勉強できていますか?
プログラミングを行う際にはメソッドを使いこなす必要がありますが、いまいち理解が難しく、行き詰まることもあるかと思います。
そんな皆さんのためにこの記事では、以下についてまとめてみました。
- そもそもメソッドとは?
- Javaのメソッドとは?
- メソッドの基本構成
- メソッドの基本的な書き方
- メソッド処理の流れと全体像
- メソッドの応用的な書き方
- メソッドを使う上で気をつけるべきポイント
この記事を読んで、あなたもメソッドを使いこなせるようになりましょう。
メソッドとは何かと聞かれて説明できますか?
はじめに、メソッドについて学んでいきます。
そもそもメソッドとは?
プログラミングにおけるメソッドとは、クラス内に書かれた処理をいくらかひとまとめにしたものです。
クラスとは、オブジェクト指向プログラミングの概念の1つであり、共通の属性や動作を持つオブジェクトの設計図となります。
内容がまとまっている処理や、反復する処理などをメソッドとしてまとめることで、同じコードを記載せずともそのメソッドをくり返し使用すればよくなります。
処理を実行するための条件は『引数』を渡し、処理の実行結果を『戻り値』として返却することです。
また、メソッドには必ず後ろに( )がついています。
メソッドは自分でその処理内容を定義して自由に作成可能で、( )のさらにうしろに{ }を書いてその中に処理内容を記載します。
メソッドについて理解できたところで、Javaのメソッドについて深堀してみましょう。
Javaのメソッドとは?
Javaのメソッドとは、特定のタスクを実行するために定義された一連のプログラムコードのブロックのことで、これは再利用可能です。
メソッドは、以下の構文を用いて宣言されます。
[アクセス修飾子] [static] [戻り値のデータ型] [メソッド名](引数リスト) {
// 処理
return 戻り値;
}
続いてはメソッドを使用するメリットを確認していきます。
メソッドを使うメリットは?
プログラムを行う際、なぜメソッドを使用するのでしょうか?
メソッドを使用するメリットは主に以下の5つあるので順に詳しく確認してみます。
- コードが読みやすくなる
- 保守性が高くなる
- プログラムを分割できる
- コードをオブジェクト化できる
- 生産性が高くなる
コードが読みやすくなる
メソッドを使用することで、コードがスリムになるので読みやすくなります。
保守性が高くなる
同じ処理を複数の場所で実行する必要がある場合でも、その処理を1つのメソッドにまとめて定義することが可能です。
そのためコードの再利用性が向上したり、コードの量が減ったり、変更が容易にできるようになったりするため、保守性が向上します。
プログラムを分割できる
メソッドを使用することで、プログラムを小さなブロックに分割することができます。
プログラムを分割すると全体が理解しやすくなり、コードが読みやすくなります。
また、プログラム全体が修正や保守のために変更される場合でも、変更が必要な箇所が明確になり、修正の効率が向上するのもメリットの1つです。
コードをオブジェクト化できる
メソッドを使用することで、プログラムのコードをオブジェクト化することが可能です。
メソッド内には、1つの機能の実装のみを行うようにすることが推奨されているため、コードが複雑になりすぎることを防ぎ、メソッドごとにコードの機能が明確になります。
生産性が高くなる
メソッドを使うことで、プログラムの実行効率を向上することが可能です。
同じ処理を複数回実行する必要がある場合でもメソッドを使うことで、処理を1回実行するだけで済み、処理の効率が向上します。
また、処理を再利用することもできる点でも生産性のupが見込めます。
以上のように、Javaでメソッドを使うことでコードの読みやすさや保守性、効率化が向上するため、プログラム開発において欠かせない要素の1つです。
ここまで見るとメソッドを使わない手はないように思いますが、メリットがある分デメリットもいくつかはあるようです。
引き続きデメリットも見てみましょう。
メソッドを使うデメリットは?
メソッドを使用するデメリットは主に以下の4つがあげられます。
- パフォーマンスが低下する
- プログラムの全体像を把握しにくくなる
- 保守性が低下する可能性がある
- オーバーフローになる可能性がある
こちらも順に詳しく確認してみましょう。
パフォーマンスが低下する
メソッドを呼び出すためにはスタックの操作やパラメータのコピーなどのオーバーヘッドが必要になるため、短い処理の場合には逆にパフォーマンスが低下する可能性があります。
プログラムの全体像を把握しにくくなる
メソッドの過剰使用は、プログラムを読みにくくする可能性があります。
プログラムが複雑になるにつれてメソッドの数が増え、プログラムの全体像を把握するのが困難にならないように気をつけましょう。
保守性が低下する可能性がある
メリットで保守性が高くなるとお伝えしましたがメリットとデメリットは紙一重です。
メソッドの引数や戻り値の型が変更された場合、そのメソッドを呼び出す箇所全てを修正する必要があるため、保守性が低下する可能性があります。
オーバーフローになる可能性がある
メソッドは再帰呼び出しを行うことができるため、無限ループやスタックオーバーフローの原因になる可能性があります。
メソッドを使用するデメリットはいくつかあるようですが、プログラムの規模や複雑さ、コードの品質などによって異なります。
メソッドを適切に使用することで、プログラムの構造化や再利用性の向上に役立つことがあるので、メリットとデメリットをよく吟味してみましょう。
次からは実際のメソッドの基本構成を見ていきます。
メソッドの基本構成
メソッドはどのようなものから成り立つのでしょうか?
メソッドを構成するものをそれぞれ見てみましょう。
アクセス修飾子
アクセス修飾子は、メソッドやクラスがどこからアクセス可能かを表すものです。
他クラスへの公開範囲を決める予約語で、メソッドに対するアクセス権限や特殊な意味を表すキーワードを指定します。
修飾子の中で最も一般的なもので、指定された要素にどこからでもアクセスできるpublic、同じクラス内でのみアクセスできるprivate、クラスレベルでの修飾子で、静的なフィールドやメソッドを定義するstaticなどがそれにあたります。
メソッド名
メソッドは一般的に、動詞で始まる命名規則に従います。
命名規則や一般的なルールは、いくつかの種類があります。
引数
引数(ひきすう)とは、「この値を使ってメソッド内で処理したい」場合に、渡す値のことです。
メソッドに渡す引数のデータ型と引数名を指定し、メソッドが受け取る引数のリストを指定して使用します。
引数がない場合は、()を記述しましょう。
また、引数には整数や文字列のみならず配列も渡すことが可能です。
戻り値の型
戻り値とは、メソッド内の処理後呼び出し元に返す値のことです。
メソッドを定義するときは、戻り値のデータの型を記述します。
返す値がない場合は、return文を省略するか、voidを指定しましょう。
メソッドはこれらから成るようです。
構成するものが理解できたら実際の書き方についても見てみましょう。
メソッドの基本的な書き方
メソッドはどのように書いたらよいのでしょう?
基本的な書き方をお教えします。
メソッドを定義する方法
メソッドを定義するには、アクセス修飾子、メソッド名、引数、戻り値の型を指定する必要があります。
アクセス修飾子などを定義したら、続いてメソッドの処理内容を記述しましょう。
これには、変数の宣言や初期化、条件分岐、繰り返し処理、ほかのメソッドの呼び出し、オブジェクトの生成などが含まれます。
必要に応じて、メソッドから返す値を指定することもあります。
メソッドの呼び出し方法
メソッドを定義すると、プログラムからメソッドを呼び出すことが可能です。
メソッドを呼び出す前には、そのメソッドが定義されているクラスをインポートする必要がありますが、インポート文はJavaファイルの先頭に記述しましょう。
ClassName objectName = new ClassName();
objectName.methodName();
メソッドの種類や戻り値を返すかどうかでメソッドの呼び出し方法は異なります。
クラス名を使用して、staticメソッドを呼び出す方法
ClassName.methodName();
インターフェースを使用して、メソッドを呼び出す方法
InterfaceName objectName = new ClassName();
objectName.methodName();
匿名オブジェクトを使用して、メソッドを呼び出す方法
new ClassName().methodName();
メソッドに引数を使って値を渡す方法
メソッドの定義時に、引数の型と引数名を指定し、メソッドを呼び出す際に、引数として渡す値を指定します。
引数を使ってメソッドに値を渡す場合は、メソッド名のあとの()内に値を指定しましょう。
また、メソッドは引数を使って値を渡すこともでき、メソッド名のあとの()の中に渡したい値を指定します。
public void methodName(int arg1) {
// 引数を使用した処理
}
メソッドの戻り値を使う方法
メソッドの戻り値を使うと、呼び出し元でメソッドの処理結果が使用可能です。
メソッドの戻り値を使う際には、変数に代入する方法と式の一部として利用する方法があります。
変数に代入する場合は、メソッドの戻り値を変数に代入することで、その値を別の場所で利用することができます。
public class Example {
public static int add(int x, int y) {
int sum = x + y;
return sum;
}
public static void main(String[] args) {
int result = add(3, 5);
System.out.println(result); // 出力結果: 8
}
}
式の一部として利用する場合は、メソッドの戻り値は式の一部として利用することができます。
ざっとメソッドの基本的な書き方を見てきましたが、なんとなくイメージできたでしょうか?
続いてはメソッドの処理の流れと全体像をお教えします。
メソッド処理の流れと全体像
ここからはメソッドの処理の流れを把握してみましょう。
全体像が分かるとイメージしやすいです。
メソッドの処理はおおむね以下の手順で行います。
- メソッドが呼び出され、引数の値が渡される
- メソッド内で宣言された変数や、引数の値を使って処理を行う
- 処理が完了すると、戻り値を返す
- 呼び出し元に戻り値が渡され、プログラムの処理が再開される
public class MyClass {
public static void main(String[] args) {
int x = 10;
int y = 5;
int result = sum(x, y); // メソッドの呼び出し
System.out.println(result);
}
public static int sum(int a, int b) { // メソッド定義
int total = a + b; // メソッド内での処理
return total; // 戻り値の返却
}
}
メソッドの応用的な書き方
ここまででメソッドの基本的な書き方や流れが理解できたことと思います。
それらが分かったところで、ここからは応用編です。
少し踏み込んで学んでみましょう。
メソッド名を取得する方法
Javaには、メソッド名を取得するための「リフレクション」と呼ばれる機能があります。
リフレクションを使うと、Javaプログラム内で定義されているクラスやメソッドについて、その情報を取得可能です。
ただし、リフレクションを使ってメソッド名を取得する場合は、Javaのセキュリティポリシーによって制限される場合があるので注意しましょう。
メソッドチェーン
メソッドチェーンとは、1つのオブジェクトにメソッドを鎖(チェーン)のようにつなげて、複数のメソッドの呼び出しを行う方法のことです。
メソッドを多く持つクラスからメソッドを呼び出す場合に、簡単に記述することができます。
StringBuilderなど、戻り値が自分自身のオブジェクトであるメソッドをチェーンすることができるクラスは、メソッドチェーンを特に効果的に使うことができます。
チェーンでつなぐメソッドは自身のオブジェクトの参照を返す必要がありますが、返されたオブジェクトからメソッドを呼び出すことで連結していきます。
staticメソッド
staticメソッドとは、オブジェクトを作成せずにクラスから直接呼び出すことができるメソッドのことです。
staticメソッドを定義する際には、メソッド名の前に「static」をつけましょう。
staticメソッドは、インスタンス変数やインスタンスメソッドにアクセスできないため、メソッド内でインスタンス変数やインスタンスメソッドを使用することはできません。
代わりに、引数としてインスタンス変数やインスタンスメソッドを受け取るか、staticメソッド内でのみ利用可能なstatic変数を使用することができます。
なお、staticメソッドはインスタンスメソッドと異なり、オブジェクトの状態を変更することができないため、複数スレッドから同時に呼び出されても安全です。
メソッド参照
メソッド参照とは、Java 8から導入されたラムダ式の一種であり、メソッドを参照するための方法です。
メソッド参照は、ラムダ式と同様に関数型インターフェースを使用して、Javaの関数型プログラミングをサポートします。
なお、メソッドの参照は以下の3つがあります。
- インスタンスメソッドを参照する場合に使用しする「オブジェクトのメソッド参照」
- 静的メソッドを参照する場合に使用する「クラスの静的メソッド参照」
- 任意のオブジェクトのインスタンスメソッドを参照する場合に使用する「クラスの任意のオブジェクトのメソッド参照」
メソッドを使いこなすにはこれらの応用編まで理解できるとなおよいでしょう。
最終的にはここまでできるよう、知識を深めていってください。
ここまでメソッドの使い方を確認してきましたが、最後にメソッドを使用する際に気を付けるべきポイントも確認しておきましょう。
メソッドを使う上で気をつけるべきポイント
メソッドを使う上で気をつけるべきポイントは2つあります。
順に見ていきましょう。
引数の値渡しと参照渡しの違いについて
値渡しは、引数に渡された値をコピーしてメソッド内で使用する方法です。つまり、メソッド内で引数の値を変更しても、元の変数の値は変わりません。
値渡しを使用すると、引数として渡した値が変更されることがないため、コードの予測性が向上し、不要な副作用を防止することができます。
参照渡しは、引数に渡されたオブジェクトへの参照を使用する方法です。こちらはメソッド内で引数の参照先を変更すると、元の変数の値も変わります。
参照渡しを使用するとコードが簡潔になり、オブジェクトの状態を変更することが簡単になります。
Javaにおいては、プリミティブ型(int、doubleなど)は値渡し、オブジェクト型(String、Listなど)は参照渡しとなります。
値渡しと参照渡しの違いは、引数がメソッド内で変更されたときに影響するかどうかにあります。
値渡しでは影響がなく参照渡しでは影響があるため、どちらを使用するか状況に応じて適切に判断する能力が必要です。
メソッド名の命名規則
Javaのメソッド名の命名規則は、以下のようなものがあります。
キャメルケース(CamelCase)を使う
メソッド名は最初の単語の最初の文字を小文字にし、以降の単語の最初の文字を大文字にします。
例えば、「calculateAverage」といった形式です。
開始する単語はそのメソッドが何をするかを表す名詞にする
メソッド名の最初の単語は、そのメソッドが何をするかを表す名詞にすることが一般的です。「getUserName」や「setAge」といった形式がそれにあたります。
メソッド名はわかりやすく簡潔にする
メソッド名はわかりやすく簡潔にすることが重要です。
適切な名前を選ぶことで、コードがより読みやすくなります。
ただし、あまりにも短すぎたり意味不明な名前を付けることは避けましょう
メソッドの戻り値の型を示す
メソッド名には、戻り値の型を示すことが一般的です。
「int」、「double」、「String」といった形式がそれにあたります。
アクションを表すメソッドには、動詞を使う
メソッドが何かを実行する場合は、動詞を使うことが一般的です。
「calculate」、「print」、「sort」といったものを使用しましょう。
まとめ
プログラムを行う上でメソッドとは重要な要素であることが理解できたでしょうか?
- メソッドを使用するデメリットもあるが基本的にはメリットが上回る
- メソッドの基本的な書き方を習得できたら応用編にも挑戦する
- メソッドを使う際には引数の値渡しと参照渡し、メソッド名の命名規則に注意する
初心者のうちは、理解が難しい部分もあるかと思いますが、とにかく触って慣れていくことが習得への近道です。
これからも一緒にJavaのメソッドを勉強していきましょう。
- CATEGORY
- 学習
- TAGS
-
-
-
-
-
-
-
【リモート/Java/Kotlin/AWS】テックリードの 求人・案件
- 900,000 円/月〜
-
その他
- Java Kotlin
-
【フルリモート/Java】決済システムの新規機能追加_サーバーサイドエンジニアの 求人・案件
- 1,000,000 円/月〜
-
その他
- Java Python Kotlin SQL その他
-
【フルリモート】【Kotlin】保険APIサーバー_バックエンドエンジニアの 求人・案件
- 650,000 円/月〜
-
その他
- Kotlin Java Scala その他
-
【週4〜/フルリモート可】ソフトウェアエンジニアの 求人・案件
- 1,000,000 円/月〜
-
その他
- Ruby Java その他 TypeScript
-
【Java】B2B向けSaaSサービスの開発支援 のエンジニア求人・案件の 求人・案件
- 960,000 円/月〜
-
その他
- Java
-
【Java】メール配信システム開発支援(ベンダー側SE)のエンジニア求人・案件の 求人・案件
- 750,000 円/月〜
-
渋谷
- Java
-
【Java/JavaScript/基本リモート】自動車会社向け会計システム開発案件の 求人・案件
- 600,000 円/月〜
-
その他
- Java JavaScript
-
【Java/フルリモート】エネルギー事業向けシステム開発案件の 求人・案件
- 550,000 円/月〜
-
その他
- Java SQL
-
【Java】システム保守開発案件の 求人・案件
- 730,000 円/月〜
-
その他
- Java JavaScript
-
【C#/VB.NET/Java】金融系システム開発案件の 求人・案件
- 600,000 円/月〜
-
その他
- Java VB.NET C#
-
【PM】通信向け決済関連システム開発案件の 求人・案件
- 要相談
-
赤坂・溜池山王
- Java PHP C#
-
【Java】銀行向け次期アーキテクチャ支援案件の 求人・案件
- 650,000 円/月〜
-
その他
- Java
-
【Java】不動産向け会計システム開発案件の 求人・案件
- 670,000 円/月〜
-
その他
- Java
-
【Java/PM/一部リモート】製造業向け生産システム構築案件の 求人・案件
- 800,000 円/月〜
-
その他
- Java
-
【Java/一部リモート】Javaシステム開発案件の 求人・案件
- 600,000 円/月〜
-
その他
- Java
-
【Java】生保向け銀行窓販システム開発案件の 求人・案件
- 700,000 円/月〜
-
その他
- Java SQL
-
【Java】スマホマルチ決済システム開発案件の 求人・案件
- 800,000 円/月〜
-
その他
- Java SQL
-
【Java】大手スポーツクラブ基幹システム改修案件の 求人・案件
- 750,000 円/月〜
-
その他
- Java
-
【リモート/TypeScript/Python/Flutter/Vue.js/Node.js/GCP/AWS】技術本部/R&D部Head of AIの 求人・案件
- 1,000,000 円/月〜
-
その他
- Python JavaScript TypeScript Nodejs SQL
-
大手製造小売業向け販売領域システム開発支援のエンジニア求人・案件の 求人・案件
- 1,000,000 円/月〜
-
その他
-
【PM】通信向け決済関連システム開発案件の 求人・案件
- 要相談
-
赤坂・溜池山王
- Java PHP C#
-
【Python】自動仕訳エンジン製品PostgreSQL対応案件の 求人・案件
- 850,000 円/月〜
-
その他
- Python SQL Go言語
-
【DTP】販促物デザインデータチェック案件の 求人・案件
- 350,000 円/月〜
-
その他
-
【PM】ファッション向けEC開発案件の 求人・案件
- 1,050,000 円/月〜
-
その他
- Java
-
【PM/フルリモート】プロジェクトマネージャー案件の 求人・案件
- 650,000 円/月〜
-
その他
-
【フロントエンド(React/TypeScript)】ブライダル業界向けDX総合プラットフォーム案件の 求人・案件
- 700,000 円/月〜
-
五反田・大崎・目黒
- TypeScript
-
【フルリモート/TypeScript】技術本部/プロダクト開発部モバイルアプリケーションエンジニア(PM)の 求人・案件
- 1,100,000 円/月〜
-
その他
- TypeScript Python JavaScript Nodejs
-
【C#】POSレジ導入事業者向けヘルプデスク業務 リーダー及びメンバー募集の 求人・案件
- 650,000 円/月〜
-
五反田・大崎・目黒
- C# SQL
-
【Ruby/Vue.js】店舗運営システムバージョンアップ開発案件の 求人・案件
- 900,000 円/月〜
-
渋谷
- Ruby JavaScript
-
【Java/React】オンライン学習サービス開発案件の 求人・案件
- 900,000 円/月〜
-
番町・麹町・永田町
- Java
-
【Ruby/フルリモート】スマホ開発エンジニア案件の 求人・案件
- 700,000 円/月〜
-
その他
- Ruby Python JavaScript Nodejs HTML その他 TypeScript Shell
-
【PM】金融プロジェクト支援案件の 求人・案件
- 1,050,000 円/月〜
-
その他
-
【PM】メガバンク向け情報管理システム支援案件の 求人・案件
- 800,000 円/月〜
-
その他
-
【C#.NET】電力会社向けECサイト構築案件の 求人・案件
- 650,000 円/月〜
-
その他
- C#.NET
-
【WindowsServer】DaaS環境構築案件の 求人・案件
- 550,000 円/月〜
-
その他
-
【PM】システム推進作業補佐支援案件の 求人・案件
- 1,250,000 円/月〜
-
秋葉原・神田