「Java謎+落とし穴徹底解明」正誤表

このページは、拙書「Java謎+落とし穴徹底解明」技術評論社 ISBN4-7741-1361-1 の正誤表です。

p.213からのX-Drawのソースに関する訂正は、別ページに分けました。

日付順のインデックス
X-Drawのソースに関するバグ(2003/7/6)


p.25

「ほげを考えるページ」は、現在オリジナルが公開されていませんので、 作者の吉田さんの許可を得まして、私のページに転載させていただきました。

URLは、
http://member.nifty.ne.jp/maebashi/programmer/hoge.html(移転済み)
http://kmaebashi.com/programmer/hoge.html(移転後)
です。


p.28

Javaチュートリアルについて、英語版しかないという記述がありますが、 書籍でなら日本語版も出ています。

http://www.amazon.co.jp/exec/obidos/ASIN/4894714043/ref=sr_aps_d_1_1/249-9160691-3241928

一応補足しておきます。


p.34 Fig1.3 図中

DrawLine()などの公開された関数

drawLine()などの公開された関数


p.54

なお、コンストラクタを書かない場合、

public Circle() {}

というコンストラクタ(何もしないコンストラクタ) をコンパイラが自動的に生成します。

なお、コンストラクタを書かない場合、

Circle() {}

というコンストラクタ(何もしないコンストラクタ) をコンパイラが自動的に生成します。

この例ではクラス自体がpublicではないですから、 コンストラクタにもpublicは付きません(JLS 8.8.7)。

あと、実際にはコンパイラはデフォルトコンストラクタの中に super()の呼び出しも挿入しますが、 それは他のコンストラクタでも同じことですし、 ここで説明することではないと思うので省略します。


p.68補足 Singleton の8行目

private staticなフィールドの指す先に唯一のフィールドを 生成することにより実現します。

private staticなフィールドの指す先に唯一のオブジェクトを 生成することにより実現します。

p.80Fig2.4

図中のP1, P2はそれぞれp1, p2(小文字)です。


p.117Fig2.22

図中のX, Yはそれぞれx, y(小文字)です。


p.134オネアミスの囲みの中、10行目

そこにいること自体、誰かが必要と認める、

そこにいること自体、誰かが必要と認める、

p.155 4-6行目

for (int i = 0; i < shapes.length; i++) {
    System.out.println("shape[" + i + "].color..." + shape[i].color);
}

for (int i = 0; i < shapes.length; i++) {
    System.out.println("shapes[" + i + "].color..." + shapes[i].color);
}

p.168Table3.2の下

ちなみにですが、C++ではデフォルトの状態でオーバーライドを禁止しており

ちなみにですが、C++ではデフォルトの状態でオーバーライドは不能になっており

C++の場合、無指定のメソッドをサブクラスで再定義することはできますが、 どのメソッドが呼び出されるかはコンパイル時の型で決定します。 「禁止」と言うと、コンパイルエラーになりそうに読めますので、訂正します。

なお、これをオーバーライドと呼んでいるC++の入門書もあるようですが、 本書はJavaの本ですので、 オーバーライドと言えば実行時の型によって選択されるものを指すと思ってください。


p.2515.1.3 の5行目

しかし---たとえばこんなメソッドをPrintクラスに追加して

しかし---たとえばこんなメソッドをPrinterクラスに追加して

p.253 Fig5.1

クラスを表現する箱がふたつあって、 両方に「PrinterMain」と書いてあります。

run()とmainMethod()を含むのはPrinterクラスですから、右側の箱は 「Printer」です。


p.256

こういう事態を避けるためには、上記のような「やばいところ」 (クリティカルセッション(critical session)と呼びます)

こういう事態を避けるためには、上記のような「やばいところ」 (クリティカルセクション(critical section)と呼びます)

情けない話ですが... ずっと、critical sessionだと思い込んでいました(_o_)


p.273

  class HogePackageException {

  class HogePackageException extends Exception {

p.2785.3.2 1行目

実際には、直列化を行なうには単にObjectOutputStreamの readObject()を一発呼ぶだけではダメで、

実際には、直列化を行なうには単にObjectOutputStreamの writeObject()を一発呼ぶだけではダメで、

p.346

LabelAlignmentが直列化を前提としたクラスなら、 implements Serializableしていないと変だろう、という問題もありますが。

JDK1.2以降のJavaでは、デシリアライズで生成されるオブジェクトを制御する 手段が提供されています。詳細は「補足(いいわけ?)」コーナーの、 「7.2 列挙型を作る」についてを 参照してください。


p.352

デバッグライトでクラス名を取得するため、SecurityManagerの getStackTrace()を使う方法を紹介していますが、JDK1.4からは、 例外オブジェクトそのものからクラス名・メソッド名を取得する方法が 提供されています。詳細は補足を 参照してください。


p.3641行目
10:  public void mouseClickde(MouseEvent e) {

第3刷からは、「Clickde」の「de」のところにカケアミを入れました。


p.3821行目

「関数へのポインタ」の項について、176ページだけでなく、194ページを追加。

Cプログラマが索引を引く際、知りたい情報はむしろこちらだと思われるためです。


「Java謎+落とし穴徹底解明」のページに戻る | トップページに戻る