[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 12740] 議事録「 Java 言語仕様第 3 版を読む会(第 7 回)」



高橋(徹)です。議事録を送付します。

今回は宿題が多いので皆様ご協力をお願いします。

------
Java読書会「Java言語仕様 第3版」を読む会

出席者:高橋(智)、根本、山内、村山、遠藤、岩室、松永、高橋(徹)
読み手:全員(書記を除く)

本日は、p.281から

12.4 クラスやインタフェースの初期化
「クラスが実装しているインタフェースは初期化されない」、とあるが、なぜか。

Singletonで、本当にオンデマンドにするには内部クラスを使う
→ 【宿題】サンプル提示してね
→ Effective Javaにあるらしい

ロードはされるがリンクはされないことがあるのか?
→ロードとリンクはVM仕様でも明示的に分けられているのでありかと
→javaの-verbose:classオプションでロードされたクラスがログ出力される

【宿題】p.283のインタフェースのサンプルプログラムをバイトコードで見る

【宿題】p.287 下2行目「C++とは異なり、…代替規則を規定していない」
のC++の代替規則とはなにか?
 →p.288のサンプルコードのC++版を作って試してみよう

誤植 p.289 下から11行目
「言語と特殊なやり取りを行うを行うAPI」
                            ^^^^^^
【宿題】WeakReferenceとSoftReferenceの存在意義(違い)について解説をMLに投
稿せよ
 なぜこれらのクラスが導入されたか?
 どんなケースで役立つのか?

p.290
「finalizeをオーバーライドしたサブクラスが明示的にsuper.finalizeを呼び出
していない場合であっても、super.finalizeが強制的に呼び出されるようになる」
とはどういう意味か?
→Fooのサブクラスがfinalizeをオーバーライドしてsuper.finalizeを呼び忘れて
いても、 FooのfinalizedGuardianに記述することでFooのfinalize処理を記述す
ることができる
→Effective Javaを見よ(§6)

p.292 11行目
「Xを参照を観測するdiの後にあるすべての読み込みは、」
   ^^
→「の」かな? 原文参照のうえ、訳者へレポート

12.6
【宿題】System.gc()を無効にするJavaVMオプションは?

finalizerでリソース解放を記述するのはよくない(明示的に終了処理を呼ぶべ
き)が、セーフティネットとしてfinalizerにリソース解放する方法はある。
→ finalizeの呼び出し順序は不定なので、うかつに呼ぶと危険かも

13.1

【宿題】アノテーションを付けた要素(クラス、フィールド、メソッド)について
バイナリ表現(クラス形式)にどう属性として保存されるか?
→応用)デバッグコンパイルするとローカル変数名も保存されるが、どこに格納さ
れるか?
(雑談)昔のJDKはダウンロードできるの?
→Sunにアーカイブサイトがあって、マイナーバージョンもすべて揃っているらしい

13.4.6
例) 古いJDBCのインタフェースを実装したクラスを、新しいJDBC(JDK)の環境で
動かすことはできるが、コンパイルはエラーとなる(新しいJDBCでインタフェー
スにメソッドが追加されている)

13.4.11 transient
どうしてSwingはSerializableなのか?
→ JavaBean仕様だから
→ なぜBean仕様、なにが目的?
  → GUIビルダーで設計したGUI部品をシリアライズして保存するのが目的
  → 画面をネットワーク越しに渡せる(Jiniでそういう例があった)

13.4.13
「型パラメータの最初の境界」とは?
→ T extends A, B and C の場合、Aが最初の境界
   TはAとして扱われ、必要に応じてB,Cが参照される

13.4.15
結果型とは?
→ 15.12.2.6を参照

13.4.17
classメソッドでfinalとする意味は?
→サブクラスで同名のメソッドを定義できない

13.4.18 nativeメソッド
「既存のnativeメソッドに対する型の変更による影響は、」とは?

13.4.21
【宿題】チェック例外を追加して既存バイナリと組合せて動作を試す

p.321
サンプルの、
class Cyclic extends Cyclic {}; // 循環定義
は、後の文でコンパイルエラーになると記述されている
class Cyclic extends Cyclic {}; // 循環定義、コンパイル時のエラー
と明記した方が分かりやすいのでは?

p.325
同一ブロックでのローカル変数は、ローカル変数によってシャドーイングされない


次回、p.329 14.7から