ホーム > Java言語プログラミングレッスン > (旧版)Java言語プログラミングレッスン | 検索 | 更新情報 |
読者の声 |
|
こちらのページは、 旧版のJava言語プログラミングレッスンのサポートページです。 最新情報は、 『改訂版Java言語プログラミングレッスン』のページをごらんください。
『Java言語プログラミングレッスン』
|
『Java言語プログラミングレッスン』
|
このページは、結城浩の書籍『Java言語プログラミングレッスン』のサポートページです。 このページで以下のことができます。
書籍中に登場したプログラムリストを以下からダウンロードできます。 ZIPファイルを展開後、readme.txtまたはindex.htmlファイルをお読み下さい。
上でダウンロードできるファイルは、 本書の読者の便宜をはかるために用意したものです。 本書と独立に、学校・会社・講習会等の資料として利用することはご遠慮ください。 もちろん本書自身をテキストや参考書としてご採用いただいている場合には 自由に利用して下さってかまいません。
なお、ZIPファイルの展開には以下のようなツールが必要です。
『Java言語プログラミングレッスン』上巻「Java言語を始めよう」では、 プログラミング言語としてのJavaを基礎の基礎から学びます。 C言語を知らなくても読むことができるように配慮されていますので、 プログラミング言語を学ぶのが初めて、という方でも安心です。
『Java言語プログラミングレッスン』下巻「オブジェクト指向を始めよう」では、 オブジェクト指向プログラミング言語としてのJavaに焦点をあてて学びます。
あなたのご意見・感想をお送りください。 あなたの一言が大きなはげみとなりますので、どんなことでもどうぞ。
書籍中の誤りのご指摘やご質問も歓迎いたします。 また、 他の読者の声もお聞き下さい。
読者から「下巻の13章のList13-1,13-2,13-3を実行しても、 著書に示されているように ": 100" の部分が表示されない」とのご指摘をいただきました。 JDK1.3で動作確認してみたところ、確かに表示されません。 表示内容がJDKのバージョンによって異なるものと思われます。
例を示します。 以下のプログラムはコンパイル時にはエラーになりませんが、 実行時には※のClassCastExceptionになります。 そういう意味です。説明がよくなかったですね。修正しておきます。 class Y { } class X extends Y { public static void main(String[] args) { X x = new X(); Y y = new Y(); X xx = (X)y; // ※ Y yy = (Y)x; } }
以下のようにしてerr.txtといったファイルに保存して、 お使いのエディタでerr.txtを表示すれば見ることができます。 (1) Windows NTの場合 javac Hello.java 2> err.txt (2-a) Windows 95/98の場合(JDK 1.2) javac -Xstdout Hello.java > err.txt (2-b) Windows 95/98の場合(JDK 1.1) javac -J-Djavac.pipe.output=true Hello.java > err.txt
ここでは、グラフィクス画面の座標系などのように Y座標は下向きに増加することを想定しています。
java Hello.class のように .class をつけてはいけません。 java Hello のようにクラスの名前だけを指定します。 JDK 1.1 の場合には、環境変数CLASSPATHの設定が必要です。 例えばWindowsの場合、 set CLASSPATH=.;C:\jdk1.1.7\lib のようにして現在のディレクトリ(.)からもクラスを探すように設定します。 JDK 1.2 (Java2)をお使いの場合にはCLASSPATHの設定は不要です。 もし設定するなら、上記のように現在のディレクトリ(.)も含めるようにしておきます。 また上巻の巻末付録に 「付録C:よく起こるエラーとその対処法」がありますのでそちらもお読みください。
Exception in thread "main" java.lang.NoClassDefFoundError: Hello これは、 「can't find classというエラー」の対処法を参照してください。
2003-06-04 : 下巻 : p.34 : 3行目(読者からの指摘。感謝します) 誤: List 11-6 正: List 11-16 2003-02-27 : 下巻 : p.176 : List 57行目(読者からの指摘。感謝します) 誤: buffer.append(i); 正: buffer.append(n); 2003-01-26 : 下巻 : p.66 : List12-10 10行目(読者からの指摘。感謝します) 誤: int setSize() { 正: void setSize() { 2002-09-12 : 下巻 : p.238 : List 18-7 11行目(読者からの指摘。感謝します) 誤: File dir = new File(args[0]); 正: File dir = new File(dirname); 2002-06-06 : 下巻 : p.181 : ページ下部(読者からの指摘。感謝します) 誤: IllegalMoniterStateException 正: IllegalMonitorStateException 2002-05-06 : 上巻 : p.60 : Table 3-1(読者からの指摘。感謝します) 誤: char 文字型 正: char 整数型(文字型) 2002-01-02 : 下巻 : p.233 : リストのキャプション(読者からの指摘。感謝します) 誤: P233 List 18-3 「ファイルを削除する」 正: 「ファイルを削除する(DeleteFile1.java)」 2002-01-02 : 下巻 : p.237 : プログラムリスト(読者からの指摘。感謝します) 誤: p237 List 18-6 11 行目 「File dir = new File(args[0]);」 正: 「File dir = new File(dirname);」 2001-11-13 : 下巻 : p.224 : バッファサイズ(読者からの指摘。感謝します) 「しかし、ここでバッファを大きくしてしまうと、リターンキーを入力しても、 reader.readLineメソッドから戻ってきてくれません」 との記述は実装の振る舞いに反しています。 実際にはバッファを1より大きくしてもreadLineメソッドから戻ってきます。 2001-10-07 : 下巻 : p.166-167 : ウェイトセット このページに書かれている 「synchronizedでロック待ちになっているスレッドはウェイトセットに入る」 という意味の記述は誤りです。 synchronizedでロック待ちになっているスレッドはウェイトセットには入りません。 ウェイトセットに入るのはwaitメソッドを実行したスレッドです。 2001-09-20 : 下巻 : p.239 : 下から8行目 : typo(読者からの指摘。感謝します) 誤: 目的ごとにパッケージに別れています 正: 目的ごとにパッケージに分かれています 2001-06-29 : 下巻 : p.53 : typo(読者からの指摘。感謝します) 誤: にはあります(1)が、NamedRectangleクラスにはないからです。 正: にはあります(2)が、NamedRectangleクラスにはないからです。 2001-03-26 : 下巻 : p.248 : typo(読者からの指摘。感謝します) 誤: それぞれの型のデータを読み込java.io.DataInputStreamのメソッドです。 正: それぞれの型のデータを読み込むjava.io.DataInputStreamのメソッドです。 2001-03-26 : 下巻 : p.232 : System.outはPrintWriterではなくPrintStream(読者からの指摘。感謝します) 誤: printlnという名前ではっと気がついた読者がいるかもしれません。 私たちがこれまでたくさんつかってきたSystem.out.printlnを思い出しませんか。 System.out.println のoutは、Systemクラスのstaticなフィールドで、 その型はまさにこのPrintWriterなのです。 System.outは標準出力をもとにして作ったPrintWriterです。 ですから、System.out.printlnの実行結果は標準出力に出力されるのです。 正: printlnという名前ではっと気がついた読者がいるかもしれません。 私たちがこれまでたくさんつかってきたSystem.out.printlnを思い出しませんか。 System.out.println のoutは、Systemクラスのstaticなフィールドで、 その型はPrintStreamです。 System.outは標準出力をもとにして作ったPrintStreamです (PrintStreamはバイト単位の出力を行い、PrintWriterは文字単位の出力を行います)。 2001-03-22 : 下巻 : p.121 : Table 14-1 : インタフェースのスーパーインタフェース(読者からの指摘。感謝します) 誤: クラスの インタフェースの スーパーインタフェースは スーパーインタフェースは 複数指定可能 1つだけ 正: クラスの インタフェースの スーパーインタフェースは スーパーインタフェースは 複数指定可能 複数指定可能 (implementsを使う) (extendsを使う) class A implements B, C { interface X extends Y, Z { ... ... } } 2000-12-07 : 下巻 : 第15章の練習問題15-2の解答(読者からの指摘。感謝します) 誤: "ティギー"(ClassA.last.friendから参照) 正: "ティギー"(ClassA.lastのインスタンス(ルーシー)の、friendフィールドから参照) (修正) 2000-09-13 : 下巻 : 第12章の練習問題12-1(8)(読者からの指摘。感謝します) 誤: 安全だが 正: エラーにはならないが 誤: 危険なことがある 正: 実行時に例外が発生する (修正) 2000-07-19 : 下巻 : p.113 : (読者からの指摘。感謝します) 誤: MyFileReader reader = new FileReader("input.txt"); 正: MyFileReader reader = new MyFileReader("input.txt"); (修正) 2000-05-01 : 上巻 : p.26 : Table1-1 : (読者からの指摘。感謝します) 誤解を招く表現があったので修正します。 誤: \octal octalの部分に8進数で1桁〜3桁までの数字を書くと その文字コードを持つ文字になる。 値の範囲は \u0000 〜 \u00ff 正: \octal octalの部分に8進数で1桁〜3桁までの数字を書くと その文字コードを持つ文字になる。 \0〜\377と表記すると、 値の範囲は \u0000 〜 \u00ff に等しくなる。 (修正) 2000-01-30 : 上巻 : p.247 : 全体 : (著者による発見) toString()があたかも(String)というキャスト時に自動的に呼ばれるような 記述がなされていますが、これは正しくありません。 toString()が暗黙のうちに呼ばれるのは文字列連結の + や += の場合です。 またSystem.out.println()の中では、明示的にtoString()を呼び出しています。 これに関連して以下のように記述を修正します。 誤: Java言語では、そのインスタンスを文字列に変換するときには、 自動的にtoStringメソッドを呼び出すという約束になっています。 ですから、 System.out.println(kokugo); という文は、自動的に、 System.out.println(kokugo.toString()); というメソッド呼び出しになるのです。 正: Java言語では、文字列連結の演算子 + によって インスタンスを文字列に変換するとき、 そのインスタンスのtoStringメソッドを自動的に呼び出すという 約束になっています。 また、System.out.println()にインスタンスを渡すと、 自動的にそのインスタンスのtoString()を使って文字列に変換してから表示してくれます。 つまり、 System.out.println(kokugo); という文は、 System.out.println(kokugo.toString()); というメソッド呼び出しと同等の動きになります。 誤: ◎しっかり覚えよう:toStringメソッド インスタンスを文字列に変換するときには、toStringメソッドが自動的に呼び出される。 正: ◎しっかり覚えよう:toStringメソッド toStringメソッドはそのクラスの標準的な文字列表現を定めている。 (修正) 2000-01-21 : 下巻 : p.277 : 9行目付近 : (読者からの指摘。感謝します) 誤:qの初期値です。 正:rの初期値です。 (修正) 2000-01-21 : 下巻 : p.277 : 11行目付近 : (読者からの指摘。感謝します) 誤:r ("ジマイマ")との違い 正:q ("ジマイマ")との違い (修正) 1999-08-27 : 上巻 : p.160 : 下から3行目 : (読者からの指摘。感謝します) 誤:s.length() 正:args.length() (第2刷で修正) 1999-08-27 : 上巻 : p.163 : 表の3枠目 : (読者からの指摘。感謝します) 誤:boolean equalsIgnoreCase(String anString) 正:boolean equalsIgnoreCase(String aString) (また、場所は表の2枠目) (第2刷で修正) 1999-08-18 : 下巻 : p.218 : 下から9行目 : (読者からの指摘。感謝します) 誤:5〜9行目は、引数が何も指定されなかったときのエラー表示です。 正:5〜9行目は、引数が何も指定されなかったとき、あるいは2個以上指定されたときのエラー表示です。 (第2刷で修正) 1999-08-18 : 下巻 : p.241 : 11行目 : (読者からの指摘。感謝します) 誤:ネイティブファイル以外で書かれたソース 正:ネイティブコード以外で書かれたソース (第2刷で修正) 1999-08-04 : 上巻 : p.285 : List A7-1 : (読者からの指摘。感謝します) System.out.println(""); の位置が誤っていました。 public class Graph2 { public static void main(String[] args) { int i = 0; while (i < 10) { int j = 0; while (j < i * i) { System.out.print("*"); j++; } System.out.println(""); i++; } } } (第2刷で修正) 1999-07-28 : 上巻 : p.112 : 10行目 : (読者からの指摘。感謝します) 誤:long型は整数ですからswitch文には使えません 正:long型は整数ですがswitch文には使えません (第2刷で修正) 1999-06-10 : 上巻 : p.9 : 下から7行目 誤:Java 正:java (第2刷で修正)