goo blog サービス終了のお知らせ 

コンピュータ・プログラミング日誌

記録をつけていきます。

と言うか本当このJavaの本は分かりづらい

2019-11-17 00:57:17 | Java
昭和情報プロセス株式会社発行の JavaプログラマGoldSE8(山本道子著)を読んでいる。

この212ページから213ページを読んでいるが、本当分かりづらい。

自分の知識を単に記述するのではなく、まだ知識として理解するに至ってない読者が、どのように理解するのかという歩きやすい道程を考えて記載しているとは考えられない。

なので、前記事において私なりにまとめなおした。


Throwable、Exception、RuntimeException(RTE)、Error

2019-11-17 00:17:26 | Java
と言うことで一旦整理。

1.
参考)
http://daisuke-m.hatenablog.com/entry/20081202/1228221927
Throwable
 Error
 Exception
  RuntimeException

と言う構造。

他参考)
https://freelance-jak.com/technology/java/1157/

2.
Throwable
は、何か発生したから投げますよ、投げられるものを宣言しますよ、と言うこと。
日本語で造語するなら「投告」か「可投告」かな。何か発生したので、一旦処理を中断してメッセージを送りまっせ、それをできるようにそれができるような構文を宣言しておきまっせ、と言うこと。

3.
Error
JVMより下の層で起きたJVM以上でなんとかできない、コンピュータハードに近いエラー。
ファイル破損やメモリ不足など。

・StackOverflowError(スタック領域のオーバーフロー)
・OutOfMemoryError(メモリの不足)
・InternalError(内部エラー)
・ClassFormatError(クラスファイルの破損、解釈できない)
・UnknownError(未知の重大なエラー)

例えばトラックなどの自動車で走っていたら、本当は燃料切れやらエンジン故障やらオーバーヒートやらの車両の不備だとかを検知するのがトラックでの不具合検知の役割だとしたら、それ以前に渡るべき橋が壊れただとか、目の前の道に増水した川が流れていて渡れないなどのことが起きたと言うような感じ。

一応エラーは投げられるっぽいが、JVMより下で起きていることがあるので、そもそもJVMが機動できているのか? あるいは機能できるのか? キャッチできるのか? と言う疑念有り。


4.
Exception
例外。Error以外のThrowable(投告)。つまりはJVM以上で何とかできますよという例外。


5.
検査例外。checked exception。チェック例外とも書くっぽい。

正しいプログラムを書いていても避けられない例外。

・読み込むファイルが壊れていて読めない。
・DB障害でDBにアクセスできない。

他、コーディングミスじゃなく、一応Javaのルール的には「記述は許されている」けど「動作は許さない」と言うレベルのもの? 

・IOException(入出力関係の例外)
・SQLException(DB系の例外)
・ClassNotFoundException(クラスが見つからない)
・InstantiationException(インスタンス化不可のクラスをnewした時)
・InterruptedException(スレッドへの割り込み)
・NoSuchFieldException(クラスに要求したフィールドがない)
・NoSuchMethodException(クラスに要求したメソッドがない)

6.非検査例外。unchecked exception。非チェック例外とも書くっぽい。

Javaのルール的には「記述が許されていない」し、「動作もそもそも許さない」と言う。
いわゆるコーディングミスの類。

・NullPointerException(ぬるぽ)
・ArrayIndexOutOfBoundsException(配列で存在しない要素へのアクセス)
・IllegalArgumentException(不正な引数をメソッドに渡した)
・ArithmeticException(算術例外)
・ClassCastException(継承関係のないクラスへのキャスト)
・NegativeArraySizeException(負の値を配列のサイズに指定)
・SecurityException(セキュリティ違反)
・TypeNotPresentException(型定義が未存在)
・UnsupportedOperationException(サポートされていないような操作)

7.
ややこしいのが、上記のことから単純に

Throwable
 Error
 Exception(検査例外)
  RuntimeException(非検査例外)

としてくれればいいのに、実際は、

Throwable
 Error(非検査例外)
 Exception(検査例外)
  RuntimeException(非検査例外)

と分類していること。ややこしい。

非検査例外は、コーディングミスでのJVMで非対応だからこれはやめろという警告のエラーの他、JVMで非対応なのは、JVMより下の階層で起きたことも対応できないからErrorなどもそうでしょ、と言う扱いであるという。

8.
検査例外は実装必須。
非検査例外は実装は任意。


誤字発見

2019-11-09 17:33:58 | Java
昭和情報プロセス株式会社 JavaプログラマGold SE 8 山本道子 第3版
P155下段

「これはIntToDoubleFunction や IntToDoubleFunctionなど、ここで紹介している関数型インターフェースは」

何2回繰り返しとんねん。


<T><E><V><K>などの型パラメータリスト

2019-11-04 23:53:37 | Java
メモ。

<T><E><V><K>などが定義に表現されるが、これは型パラメータリストと呼ばれる。
これがつくオブジェクト内ではこういう要素のパラメータを扱っていますよ、と言うことである。

それは引数であったり、変数であったり、返り値であったりする。


E ・・・ Element(要素)
K ・・・ Key(キー)
V ・・・ Value(値)
T ・・・ Type(タイプ)
N ・・・ Number(数値)
S,U ・・・ 2,3番目


HashSet,TreeSet,LinkedHashSetでのSetインターフェースの違い

2019-11-04 21:11:35 | Java
HashSet:
ソートなし、順序付けなし、ハッシュ管理、高速。
同期性なし。

TreeSet:
ソートあり、順序付けあり、ツリー管理、低速。
同期性なし。

LinkedHashSet:
ソートなし、順序付けなし(HashSetと同じ)、挿入順管理。
入れられた全てのデータ要素項目に対して、二重のリンクリスト機能をHashSetに加えた。
同期性なし。