GO HOME

「Javaトレーニングブック」追補情報


※ここは、拙著のJava入門書「Javaトレーニングブック」(ソーテック社、384頁、2380円)に関する コーナーです。現在、初版の見直し作業をしていますが、校正情報やよくある質問の答えなどをここでまとめて掲載します。


★バグ・校正情報★


※ここでは、ソースコードや内容に関する記述間違い、校正ミスなどについて整理しておきます。


※リスト番号の重複

  1. リスト番号[リスト1-6-6]〜[リスト1-6-8]が、それぞれ、[リスト1-6-1]〜[リスト1-6-3]となっています。
  2. [リスト2-3-1]の次が[リスト2-3-3]になっています。


※見出しの間違い

123ページと124ページにある「数値からStringへ」「Stringから数値へ」という見出しが、逆になっています。正しくは、123ページ末に あるのが「Stringから数値へ」、124ページ始めにあるのが「数値からStringへ」です。

※誤植関係

  1. P.24 「Javaプラグインとアプレット」2行目「このほかの携 帯の〜」→「このほかの形態の〜」
  2. P.304から、「StringTakenizer」 →「StringTokenizer」です。リストに掲載されている ものがすべて正しいと考えて下さい。本文およびイラストのほうの綴りが間違っていました。

※P.151 リスト2-2-1

mainメソッドの閉じるブレース記号}がリストから消えてしまっています。以下の赤の部分です。補ってお読みください。
public static void main(String[] args) {
・・・中略・・・
}



※もし、他に間違いが見つかりましたら、どうか御連絡下さいませ。



★追補情報★


※ここでは、本書の内容を補うための追加情報などをまとめる予定です。


※P.22 pathとclasspath について

ここで、pathとclasspathの環境変数の設定について説明していますが、通常は、 classpathを設定しなくとも動作します。classpathは、他のアプリケーションによってこの変数が設定されていたような場合にのみ必要なも のです。
 またpathも、単にJREでJavaのプログラムを実行するだけなら設定は不要です。ただし、開発をするのであれば、path設定は行っておいた方が よいでしょう。


※P.68 無限ループの問題 について

ここで挙げている例文についてご指摘がありましたので補足説明いたします。――ここでは、「for (int i = 1; i  > 0; i++)」といったforをあげ、無限ループになると説明していますが、これは、厳密には無限ループにはなりません。というのも、数値にはそれぞれ利用可 能な有効範囲があるからです。
 intの場合、有効範囲は-2147483648〜2147483647の範囲です。i++により繰り返しをするごとに数字が1ずつ増えていくと、iの 値はどんどん増えていき、やがて2147483647になります。すると、次の繰り返しではオーバーフロー(桁溢れ)を起こし、値は- 2147483648となってしまい、終了条件が成立して繰り返しを抜けるのです。
 以上のようなわけで、アルゴリズムとしては無限ループなのですが、実際の挙動としては無限ループにはなりません。ここで補足させていただきます。


※P.92 インスタンスのキャスト について

ここでは、ClassBと、これを継承したClassAを用意し、ClassAをキャストして ClassB型変数に設定したり、その逆を行っています。その説明の中で、「明示的にキャストをすればコンパイル時にエラーは発生しなくなる」と記述して います。
 が、実際には、こうしてキャストされたものが、そのキャストされたクラスのインスタンスとして動くわけではありません。ここであげている例は、ちゃんと コンパイルはできますが、実行しても例外が発生して動きません。
 ここでは「インスタンスのキャスト」について説明をしています。「明示的にキャストすれば、別のクラスとして認識する」という話なのです。これを読ん で、「こうすれば、別のクラスとして使えるんだ」とは思わないで下さい。P.94のPointにあるように、キャストにより「クラスが変わる」わけではな く、あくまで「別のクラスと認識させる」ことができる、という話です。その点、誤解のないようにしてください。



※P.156 匿名クラスを使った実装 について

ここでは「匿名クラス」というものについて説明していますが、「説明が不十分ではないか」との声が寄せ られましたので、補足させていただきます。
 ここでは例として「Abc x = new Abc() {・・・クラスの定義・・・}」というような形で匿名クラスを記述できる、としてあります。このとき、「このインスタンスxは、Abcという名前のついた クラスであって、匿名ではないのでは」と思われた方もいるかも知れません。が、その後に「これは、元のクラスのインスタンスとは明らかに別のものになりま す」とあるように、これはAbcというクラスのインスタンスではありません。これは「クラスAbcをスーパークラスに持つ、名前を持たないクラスのインス タンス」になるわけです。それで「匿名クラス」なのですね。

 ただ、匿名クラスというのを「あるクラスをスーパークラスに持つ名前のないクラスを定義するためのもの」と理解すると少し意味合いが違ってきます。単に そうしたクラスを定義するのであれば、わざわざ匿名にする必要はなく、内部クラスでよいわけです。
 匿名クラスの目的は、クラスの定義にあるのではなく「コード内に埋め込まれたオブジェクト生成」ということです。オブジェクト生成の過程で必要に応じて クラスが生成されますが、それが目的ではありません。そのあたりが内部クラスと違うところでしょう。この「内部クラスと匿名クラスの役割分け」をうまく飲 み込むことが、両者を使いこなす上で重要となるかと思います。




★FAQコーナー★


※ここでは、本書の内容についての質問にお答えします。読んでいて不明な点などありましたら、どうぞ掌田津耶乃までお問い合わせください。その場合は、必ずお使いのOSのJavaの バージョン/エディションについて明記ください。

この本は、Windowsを対象としているようですが、Mac OS Xでは使えませんか?

答え)基本的な操作部分、例えば環境変数の設定とかコマンドプロンプトの操作などは違いますが、Javaプログラミングに関する部分は Windowsに限らず、Mac OS XでもLinuxでも全く同じです。従って、Mac OS Xユーザであっても、本書でJavaの勉強はできると思います。
 実際、本書のサンプルコードの大半はMac OS Xで作成し、その後Windowsにて動作確認をしています。ですから、OSによって内容が問題となることはないはずです。


GO BACK
GO HOME