- ベストアンサー
クラスやメソッドが理解できません
今javaを勉強中なのですが、クラスやメソッドで生きず待ってしまいました。 メソッドの定義は 戻り値の型 メソッド名(引数リスト) { 文; ・・・ return 式; } ですが、メソッドから返されえる値を戻り値といますよね?呼び出し元に値を返すってどういうことなのでしょうか? int getNum() { System.out.println("調べました") return num; } たとえば、上記のようなものですが。もしも、このメソッドを呼び出すと、”戻り値”が戻ってくるわけですが、これはgetNumという変数のなかに計算式が入っている?という考え方でいいのでしょうか? よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>これはgetNumという変数のなかに計算式が入っている? >という考え方でいいのでしょうか? まあ、考えやすい考え方でいいと思いますが…。 (「計算式までもが入っている」とは、あんまり考えないかも) --- ”「ソースコード上のgetNum()という記述」(つまり メソッド呼び出し)自体が「値を持つ」” と考える。 その値の大きさは、もちろん「戻り値」に等しい。 (※または、 getNum()という「変数もどき」が「一時的に」作られ、 そこに戻り値が格納されている、 というイメージでもいいかも) --- つまり、メソッド定義が int getNum(){ … <中略> … return 9; } であるメソッドgetNum()があったとすれば、 たとえばソースコード上で 「a + getNum() * b」 などと記述されていれば、それはもう 「a + 9 * b」 ということにほかなりません。 たとえばソースコード上で 「if(1>getNum())」 などと記述されていれば、それはもう 「if(1>9)」 ということにほかなりません。 たとえばソースコード上で 「System.out.println(getNum())」 などと記述されていれば、それはもう 「System.out.println(9)」 ということにほかなりません。 つまり、「戻り値は"どこに"返るのか?」といえば、 それは 「ソースコード上の「メソッド呼び出し」されている、まさにその場所」 に"返ってくる"。(←これ、説明としておおいに「アバウト」だけど^^;) --- イメージつかめたかな? 簡単でしょ? (#2さんの回答と同じ) --- >えーと戻り値は一度、変数に納入しないと、使用できないんでしょうか? そんなことはないです。 別の変数に格納したい場合は、格納しますし、 そうする必要がなければ、めんどくさいので格納しません。 (※上記のソースコード例を参照) よく、boolean型を戻り値とするメソッドを使って if(hasNext()){ … } とか while(isLoop()){ … } などという記述は、よく見かけます。シンプルでカッコイイでしょ?
その他の回答 (4)
- chuckcavaness
- ベストアンサー率53% (7/13)
以下が最も簡単な例です。 getNumメソッドを呼ぶと戻ってくる値があるので戻り値と呼びます。 public class Test { public static void main(String[] args) { // ここで戻り値をiに格納する int i = getNum(); System.out.println(i); } static int getNum(){ return 1; } }
お礼
ありがとうございます! えーと戻り値は一度、変数に納入しないと、使用できないんでしょうか?
- herencia
- ベストアンサー率56% (120/211)
このメソッドを使う側は、下記のように記述します。 (変数宣言やインスタンス生成などのコードは省略) result = testClass.getNum(); これで、そのクラスのgetNumというメソッドを実行することができます。 getNumメソッドは、処理した結果を返します。resultの値を確認すると結果がわかります。 (getNumがアクセッサである場合は単純にクラスの変数を、 機能である場合は処理結果などを返します) メソッドには、クラスが持っている機能を定義します。 クラスになにかを処理して欲しい場合に、クラスの持っているメソッドを呼び出します。 クラスを人間に例えると、 変数:年齢、性別、名前・・・ メソッド:年齢を答える、性別を答える、ご飯を食べる・・・ (オブジェクト指向では、通常カプセル化と言って、クラスが持つ変数を直接は外から見えないようにして、メソッドを通じて情報を公開します) で、メソッドの戻り値には、機能を実行した結果(成否)や情報を返します。 (呼び出し元に結果を返す必要がなければ戻り値がなくても良い:戻り値の型にvoidを指定) 上記の例だと、ある人が年齢を聞いたら、年齢を返すし、 ご飯を食べるように命令したら、食べ終わったら、全部食べたか・食べ残したかを返すなど。 抽象的な表現で返ってわかりにくくなっていたら申し訳ないです。 是非、実際にコードを実行してみて、いろいろと試しながら理解するようにしてみてください。
お礼
クラスとメソッドの考え方が分かってきました あがとうございました!
Javaはクラスとメソッドを使いやすくしたものですので、本格的にそのあたりを理解しようとすると、オブジェクト指向とかC++とか、メモリ(記憶領域)とCPUの動作とかかな~り面倒なんですが、簡単にイメージだけ説明します。(ってことでいいのかな?) あなたの例だと(少々問題ありますけど)実はgetNum()は 【1】整数(int)の値を保存する場所であり、 【2】{}の処理を行って【1】にreturnを使って値を保存します。 というものです。 つまり {}内の処理でreturnにより【1】に値を設定することで、実行する関数がその値【1】int getNum()という値を見られる。 実行する関数側にしてみれば、「返す」=「値をくれる」という意味になります。 System.out.println("調べました") の部分はユーザーに対して文字列を「返す」=「応答する」という意味になりますね。 このあたりがゴチャゴチャになったのかなぁ~
お礼
分かりやすく有難うございます! 参考になりました^^
- masterasia1919
- ベストアンサー率40% (29/72)
int getNum() { System.out.println("調べました") return num; } ?このメソッドじゃあエラーがでる。numを返り値としているようだけどnumを定義していないね。 >>呼び出し元に値を返すってどういうことなのでしょうか? その名前のとおりメソッドを呼んで値が帰ってくるってことでしょ?この場合ならint型のなにかが帰ってくる。 >>getNumという変数のなかに計算式が入っている?という考え方でいいのでしょうか? ?getNumの中になにも計算式が書いてないよ。 例えば int getNum() { int num=9; System.out.println("調べました") return num; } で、getnumを呼び出すと、このメソッドの実行結果は ”調べました”が表示されて9が返り値として取得できる。
お礼
お答え有難うございます! 参考になりました
お礼
なるほど! わかりました^^ ありがとうございます!