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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

4128閲覧

final修飾子を使うべき時はいつなのか

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/08/13 11:43

final修飾子を使うべき時はいつなのでしょうか?
http://java-code.jp/128 を見て勉強しているのですが、
絶対変更しない値を代入する時でしょうか?

Swiftで変数(var)と定数(let)がありますがfinal修飾子は定数のようなものなのでしょうか?
final修飾子を使うとどういうメリットがあるのでしょうか?

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

メリットとしてはデバッグ時にバグの原因を絞り込みやすくなるといった管理上の利点があります。が、仰る通り、finalは実際には使いどころが難しいです。将来的に変更を絶対しない。と断言できることなど、なかなか存在しないです。

**他者との共同作業においては有効だ・・・**とは言いますが、一介のコーダが作業の全体像を見渡すことはなかなかできず、なんだかんだいって、仕様変更で定数を変数に変更せざるを得ないこともありえます。

投稿2017/08/13 14:41

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

http://java-code.jp/128 には、3つのことが書いてあったと思います。

  1. メソッドであればサブクラスでのオーバーライドを禁止します
  2. フィールドであれば値の再代入を禁止します
  3. クラスであればextends句による継承を禁止します

そもそもクラスを作るという時、始めのうちはmainメソッドを含んだクラスだけを作ると思いますが、コード量が多くなると、クラス分けというものがしたくなります。すると、mainメソッドを含まないクラスを作ることになります。それは、mainメソッド(エントリーポイント)を含むクラスから見ると、ライブラリのような外見をしています。つまり、JavaのAPIにおけるStringクラスやArrayクラスといったようなものです。

ですから、自作クラスを作るときは、是非JavaのAPIクラスについてある程度勉強して、使ってみることが重要です。JavaのAPIのクラスのなかにもfinalが付いているメソッドやクラスが散見されるかと思いますが、それは、何らかの理由があってfinalが付いていたり、ついていなかったりします。それには一定のルールがあるのですが、以下の書籍が参考になると思います。

EFFECTIVE JAVA 第2版 (The Java Series)

JavaのAPIにおいても、100%の仕事というのはなくて、あのAPIは素晴らしい、あのAPIはダメだな、というのがインターネットの掲示板でも議論されていると思います。Joel on Softwareのなかでは、一見ダメなAPI仕様だと思われているものでも、何かしらの理由があってそうなっていることもあると忠告しています。なので、finalをつけるかどうかについては、メソッドとクラスの場合は非常に選択が難しいということです。

ただし、誰かと共同で作業をするというのでなければ、基本的にfinalメソッドは不要です。また、フィールドは基本的に他のクラスに公開するものではないので、「基本的には」finalフィールドは定数という考え方でよろしいかと思います。

投稿2017/08/13 12:40

anndonut

総合スコア667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問