メソッド・戻り値・void・static...色々試してみた

2019年3月8日

オブジェクト指向のところになると、ややこしい言葉が並んで混乱してきますよね。その中でメソッド、戻り値、void、staticについてどんな動きをするのか、試してみました。

基本のプログラム:calcメソッドの呼び出し

まずは、calcメソッドを利用した簡単なプログラムを紹介します。

実行結果6

このコードでは、3行目「calc(2,4)」で6行目のcalcメソッドが呼び出されます。引数2,4が「num1」「num2」に渡され、calcメソッドの「num1+num2」で足し算がされて、「return」で戻り値が返ります。戻り値は3行目の変数「result」に代入されて、4行目「System.out.println(result);」で出力されます。

この文でメソッドの使い方、戻り値の動きがなんとなくわかりますね。

staticの呼び出しの注意点

ところで、calcメソッドの前には「static」が付いていますが、これを削除するとエラーになります。

同じクラス内では、staticメソッドから非staticメソッドは呼び出せないという決まりがあるからです。mainメソッドにはstaticがついているので、ここから同じクラス内ではstaticメソッドしか呼び出せません。ただしこの場合、メソッド内でインスタンス化をすれば呼び出すことが可能です。ここまで来るとだんだん混乱してきますが、とりあえずコードを載せておきます。

実行結果6

戻り値の型の指定

メソッドには戻り値の型を指定する必要があります。例1では「int」を戻り値の型に指定しています。これを「double」にするとどうなるでしょう。

実行結果6.0

6行目のメソッドの戻り値の型を「double」に、呼び出し元で戻り値が代入される変数resultの型も「double」に合わせます。すると実行結果は「6.0」になります。doubleは浮動小数点を表すので、小数点が現れます。

戻り値の型voidとは

では戻り値の型を「void」にしたらどうでしょう。

voidは「戻り値を返さない」という型ですので、戻り値を返せなくなってエラーとなります。戻り値を返さない場合は、例えば次のようにして直接メソッドの中から出力するようにすれば実行できます。

実行結果6

この場合、mainメソッドの中ではcalcメソッドを呼び出すだけになり、calcメソッドの「System.out.println()」の中で直接足し算をしています。

変数の有効範囲の問題

最後にcalcメソッドの中で利用している変数num1、num2の有効範囲の話です。ここまで使ってきた例ではcalcメソッドの引数の中で変数を宣言しています。そのため、有効範囲はcalcメソッドの中のみとなります。そのため、次のようにmainメソッドの中で使おうとするとコンパイルエラーになります。

この有効範囲は、私はJavaの試験問題でよく引っかかります。気をつけましょう(自分が)。

↓よろしければクリックをお願いします。
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
にほんブログ村