プログラミング Java

【Java入門】メソッドとは?使い方まとめ

投稿日:

概要

メソッドとは何か?
また使い方をわかり易く説明します。
 

メソッドとは?

固く言うと、一連の処理を一つにまとめたものです。
平たく言うと、何らかの処理を1つにまとめたものです。

System.out.printlnメソッドを見てみましょう。
よく使うprintlnメソッドは以下のようになっています。

これを見ると、printlnメソッドの中にもメソッドがあることがわかると思います。
・printメソッド  :引数(渡された値)を表示する
・newLineメソッド:改行
つまり、printlnメソッドは「引数の表示した後に改行する」メソッドであることがわかります。

このように、メソッドは一連の処理がひとまとめになっています。
 

引数とは?

メソッドに渡す値のことです。
引数がないメソッドもあります。
また、引数の数が可変長(引数の数が変わる)という指定方法もあります。

引数を与えることでメソッドの動作に何らかの影響を与えることができます。
引数が無い場合は、メソッド単独で動作します。

引数なしメソッド

例えば、printlnメソッドには引数がないものが用意されています。
処理は改行だけであり、引数を必要としていません。

引数あり

引き続きprintlnメソッドを例にします。
引数にString型の文字列を扱ったり、int型の数値を扱えるメソッドなどが用意されています。
これらはメソッド内で引数を扱う処理内容になっています。

引数あり(可変長)

可変長とは、長さや大きさが決まっていないという意味です。
引数で可変長という場合、引数の数が決まっていないという意味になります。
例として、Stringクラスのformatメソッドを見ていきます。

formatメソッドに引数として与えた値と、対応する型と変数名についてです。
・”%s %s %d”    :フォーマットを指定している部分(String format [第1引数])
・”1つ目”, “2つ目”, 3 :可変長な引数の部分(Object args [第2引数以降])
 ⇒「」は配列の[](角カッコ)と同じ意味です。
  つまり、第2引数以降は全てObject型配列のargsという変数名に格納されます。

このメソッドの場合、第2引数以降の3つの値が、フォーマットとして指定した「”%s %s %d”」の順番に対応した形で以下のように出力されます。

 

シグネチャとは?

シグネチャとは、メソッド名、引数の型、引数の数で構成されるひとまとまりのことです。
以下は、printlnメソッドの例です。

 

オーバーロードとは?

シグネチャがわかるとオーバーロードがわかるようになります。
オーバーロードとは、1つのクラスに同じ名前のメソッドを複数定義することです。
シグネチャの引数の型と数が異なる同名のメソッドによって、別のメソッドとして機能させることができます。
また、引数の型と数が同じでも、並び順が異なることもオーバーロードできる条件になります。

以下のようなクラスで確認していきましょう。
引数の型、数、並び順が異なるoutメソッドを複数定義します。

それぞれのメソッドを呼び出します。
実行結果をコメントで記載しておきます。

引数の型、数、並び順の違いで、実行されるメソッドが切り替わっていることがわかると思います。
オーバーロードはこのように、同名メソッドで複数の機能を実現できる仕組みになっています。

補足

シグネチャが同じで、メソッドの戻り値だけが異なる場合はオーバーロードできません。

参考資料(Google Java Style Guide)

GoogleのJavaに関するコーディング規約です。
そこにメソッドについて共有しておきたい内容があったので転載致します。
(Google翻訳をベースに少し修正しています)

3.4.2 Ordering of class contents
The order you choose for the members and initializers of your class can have a great effect on learnability. However, there’s no single correct recipe for how to do it; different classes may order their contents in different ways.

What is important is that each class uses some logical order, which its maintainer could explain if asked. For example, new methods are not just habitually added to the end of the class, as that would yield “chronological by date added” ordering, which is not a logical ordering.

3.4.2.1 Overloads: never split
When a class has multiple constructors, or multiple methods with the same name, these appear sequentially, with no other code in between (not even private members).

3.4.2クラス内の順序
クラスのメンバーと初期化子の順序は、可読性に大きな影響を与える可能性があります。ただし、それを行う方法についての正しいレシピは1つではありません。クラスが異なれば、コンテンツをさまざまな方法で並べ替えることができます。

重要なのは、各クラスが論理的な順序になっていることで、メンテナンスする人が尋ねられた場合に説明できます。たとえば、新しいメソッドはクラスの最後に習慣的に追加されてはいけません。これは「追加された日付による時系列」であり、論理的な順序ではありません。

3.4.2.1 オーバーロードされたメソッド群を分割しないこと
クラスに複数のコンストラクター、または同じ名前の複数のメソッドがある場合、これらは順番に表示され、間に他のコードはありません(プライベートメンバーも含まれません)。

要約します。
・クラスのメンバ(フィールド、メソッド)は論理的な並び順になっているべきである。
・新しいメソッドを最後に追加するのは慣習であって、論理的ではない。
・オーバーロードしたメソッドはひとまとまりにしておきなさい。

このようなことを学ぶことも良いコードを書くことにつながりますので、参考までに知っておいて頂ければと思います。
  

まとめ

  • メソッドとは、一連の処理を一つにまとめたものです。
  • 引数とは、メソッドに与える値のことです。
  • シグネチャとは、メソッド名・引数の型・引数の数で構成されるひとまとまりのことです。
  • オーバーロードは、同じメソッド名で複数の機能を持たせることができる仕組みのことです。
    メソッドの引数の型と数、並び順で決まります。

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

オブジェクト指向でじゃんけんを作ってみる

最近、プログラム自体を書いていない時間を多いので、再勉強がてら少しコードを書いてみました。 何を作ったか? テーマ:じゃんけん(1対1) 言語:Java OOPで考慮したこと ・ゲームを管理するコント …

【Java入門】Consumerの使い方まとめ

概要 Consumer<T>は消費者と呼ばれる関数型インターフェースで、acceptメソッドを持ちます。 消費者というだけあって戻り値がありません。 また、引数はT型を1つとります、   …

PHPerがJavaを学ぶ5つのメリット

PHPerである私が会社でJavaの研修担当となり、私自身も大学生以来のJavaを勉強しなおして感じたことを書いていきたいと思います。 対象読者 ・PHP初心者 ・なんとなくPHPで動くプログラムを書 …

Thymeleafで1000円単位をカンマ区切りで表示する方法

Thymeleaf(テンプレートエンジン)で金額などの数値を 1000円単位のカンマ区切りで表示する方法です。 ここでは、カンマ区切りの機能はオブジェクト側で実装し、 Tymeleaf(View)は表 …

Observerパターンってどう使うの?を考える(商品の予約)

目的 Observerパターンの使いどころとなる状況を具体例でもって理解する。   ゴール(実現すること) 商品の予約システムにおけるユーザ通知   実装する機能 ・商品を予約する …

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。