質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.61%

メソッドについて質問です。

解決済

回答 8

投稿

  • 評価
  • クリップ 0
  • VIEW 1,517

score 47

Java初心者です。
Javaのメソッドについて勉強していたら疑問に思ったので
よろしければ、ご回答お願いします。

だいたいのメソッドの使い方などを勉強したのですが、
①戻り値も引数もないメソッド。
②戻り値だけがあり、引数はないメソッド。
この2つのメソッド使いドコロがイマイチわかりません。

引数ありのメソッドは、引数を代入して、返したり、メソッド内で処理したりするのは
わかるのですが、引数がない場合はどのような使い方をするのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 8

checkベストアンサー

+3

簡単な例を示します。
下記はカウントアップするクラスです。

class Counter{
 int num;
 public void countUp(){
   num++;
 }
 public int getCount(){
    return num;
 }
}

①戻り値も引数もないメソッド。 

countUpメソッドはnumをインクリメントするメソッドです。これは呼び出し元から情報を与える必要もなく、戻り値を確認する必要もなさそうです。
このようにインスタンス内部の状態を変更するが、インスタンス外部の情報が不要な場合等に使います。

②戻り値だけがあり、引数はないメソッド。

getCountメソッドは現在のnumを戻り値にしています。やはり、呼び出し元からの情報は不要です。
このようにインスタンス内部の情報を取得する場合等に使います。

ただ、このようなシグネチャの決め方はケースバイケースなので、一概に何に使うかは言えないですね。
重要なことはカプセル化を破壊しないようなシグネチャを付けることでしょう。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

「戻り値も引数もないメソッド」は、インスタンスの状態を変化させるメソッドと考えればいいんじゃないでしょうか。「ポケット」クラスに「叩く」というメソッドがあり、それを実行すると、中に入っているビスケットが 2 倍になる、とか。
「戻り値だけがあり、引数はないメソッド」は、たとえばインスタンスの状態を知るためのメソッドなどがあります。たとえば、「ポケット」クラスに「ビスケットを取り出す」や「中のビスケットの数を返す」というメソッドがある、とか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

①の場合は何かしらの初期処理をするときとかですかね。
そのクラスの初期設定を行いたいなど、例えばDBやテーブルの初期設定を走らせたい
初期設定なので、別段戻り値は必要ないですから。
※しっかりと初期設定されたから確かめたいなら、戻り値を指定するといいとは思います

public void init_table(){
 // sql文など
}

②の例

class test(){
private int hoge = 0;

public void set_hoge(){
 hoge++;
}

public int get_hoge(){
 return hoge;
}
}

class main(){
 public static void main(){
  test test_class = new test();
  test.set_hoge();
 
 main_test();
 }

 private main_test(){
  System.out.println("hoge="+test.get_hoge());
 }
}


※久々に書いたから、構文は間違っているかもしれない

のように、privateで保持したい値などを別のクラスから変更するときや取得するときに利用します。
いわゆる、getter/setterです。

一つのメソッドに書けばいいですが、一つのメソッドに大量に処理を書くと段々と分かりづらいソースになってしまうのと、同じような処理ならまとめてしまうっていのも大事です。
※メンテナンスしやすくなるといったのも有ります

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

外部からの情報を必要としない、マクロ的な処理は引数も戻り値もないメソッドになります。
引数なし、戻り値ありのメソッドは、オブジェクトのprivateなフィールドを取得するためのゲッターとして使われます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

既に他の回答者様が回答されているものと一部かぶりますが、思いついたものを挙げてみます。

①戻り値も引数もないメソッド。

  • 入力を必要としないけれど複数の箇所から呼ばれるひとまとまりの処理、古い言い方だとサブルーチン的なもの
  • 直接フィールドの読み書きをするメソッド

②戻り値だけがあり、引数はないメソッド。 

  • getterメソッド
  • 特定のシステム値やプロパティーやファイルの内容を返すメソッド(例:System.currentTimeMillis()
  • ①の1つ目に書いたひとまとまりの処理に、処理の結果が必要な場合、戻り値を持たせることがあります

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

自分の作成したプログラムのソースを眺めてみました。
あくまで一例です。

(1)戻り値も引数もないメソッド。 

SQLiteOpenHelperを継承したクラスの中で、
”Create Table"文の実行など
→必要材料がメンバなどに全て揃っていて、結果を返す必要がない場合

(2)戻り値だけがあり、引数はないメソッド。 

Get/Set プロパティのGetメソッドとして
→クラスメンバをカプセル化し、結果だけを通知したい場合

以上、参考になりますでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

①戻り値も引数もないメソッド。 
②戻り値だけがあり、引数はないメソッド。

Array クラスにも上記のようなメソッドがいくつもあります。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/ArrayList.html

...
void    clear()
    このリストからすべての要素を削除します。
Object    clone()
    このArrayListインスタンスのシャロー・コピーを返します。
...

メソッドの動作や意味により、引数の有無や戻り値の有無が決まってきます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-1

もう少し勉強すればわかってきますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/18 23:29

    回答ではない

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る