2018年07月10日

師匠のJava道場~第11回・finalについて学ぶのじゃ!

師匠T:さてさて、この講座も10回を超えたか。ずいぶん歩んできたのう。

弟子D:はい。俺も、Javaのプログラミングについて、いくらか詳しくなったような気がします。

師匠T:言うようになったのう、こいつめ。まぁ、それもわしの見事な教えがあったればこそじゃな。

弟子D:……。

師匠T:ごほん。さて、今回は、final修飾子とについて説明していくとするぞ。

弟子D:はい、師匠!

▽まずはfinal修飾子についてじゃ!▽

師匠T:まず弟子Dに問題じゃ。finalという英語の意味とはなんぞや。

弟子D:えぇと、最後の、という意味でしたっけ。

師匠T:うむ。Javaでのfinalもそれと同じようなものじゃ。finalをつけると、そこから拡張や変更ができなくなるのだ。
どのようになるかは、これから説明していくぞ。

弟子D:はい!

師匠T:まずは、クラスやメソッドにつけた場合じゃ。これらにfinalをつけると、それらの継承やオーバーライドができなくなる。

弟子D:ふむふむ。

師匠T:これらの特性から、メソッドであっても、コンストラクタにはfinalをつけることはできない。注意しておくのじゃ。

Java1807-01.JPG
△ コンストラクタにfinalをつけるとエラーになるぞ!

師匠T:そして基本型の変数(フィールド)にfinalをつけた場合。このとき、この変数の値は変更することはできない。

弟子D:なるほど。

師匠T:なお、Javaでは、このようにして宣言された変数を定数として扱う。その場合、変数名は大文字で書くのが慣例じゃ。

弟子D:はい、わかりました!

師匠T:うむ、いい返事じゃ。さて、続いては、基本型の引数にfinalをつけた場合じゃ。これも同じように、その引数の値を変えることはできぬ。正確に言うと、変える命令を実行することはできるが、実際に値を変更することはできぬのじゃ。ほれ、この通り。

Java1807-02.JPG
△ 色が変わっている部分に注目。引数aの値を3に変えているが……。

Java1807-03.JPG
△ aの値は2のままだ!

弟子D:なるほど。

師匠T:なお、ローカル変数につけた場合も、フィールドと同じく、その値を変更することはできぬのだ。

弟子D:ふむふむ。あ、師匠。いまさらなんですが、ローカル変数とフィールドってどう違うので?

師匠T:うむ。それを説明し忘れておったの。どちらも、値を格納したり、インスタンスと結び付けたりといった機能は同じじゃが、ローカル変数は、そのメソッドの中でのみ有効で、メソッドを抜けると消滅してしまうもの、そしてフィールドは、メソッド外で宣言されたもので、そのクラス内ならどこからでも参照できるものを指すのじゃ。基本的にフィールドとは、そのインスタンスの特性を表すために使われておるな。

弟子D:なるほど、わかりました。

師匠T:うむ。さて、では続けるぞ。フィールド、ローカル変数問わず、参照型変数にfinalをつけた場合じゃ。

弟子D:はい。

師匠T:この場合、その変数の参照先(リンク先)を変えることはできない。しようとすると、エラーになるのじゃ。

Java1807-04.JPG
△ 参照型変数に、代入(参照型変数の場合は参照先の変更)しようとすると、エラーになるぞ!

師匠T:ただし、参照先の内容を直接変えるのならOKじゃ。

弟子D:なるほど、わかりました、師匠!

師匠T:うむ。次回は、Javaにおいて、クラスと並んで重要なポイントの一つ、例外について説明していくぞ。予習復習を忘れてはならぬ!



※次の更新は、7月12日。『師匠TのチャレンジARSゲーム!』の予定です。お楽しみに!
posted by 裏編 at 07:33| Comment(0) | 師匠のJava道場 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください