標準プログラマーズ ライブラリシリーズJava+落とし穴 徹底解明

[表紙]Java謎+落とし穴 徹底解明

紙版発売

B5変形判/384ページ

定価2,618円(本体2,380円+税10%)

ISBN 4-7741-1361-1

ただいま弊社在庫はございません。

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

Javaの理解を妨げる謎な仕様,わかりにくい機能に鋭く切り込み,ではどう実践的に使っていけばよいのかを徹底的に解説しています。Javaに挫折した人,今ひとつ理解があいまいな人にお勧めします。

こんな方におすすめ

  • Javaプログラミングに一度挫折した方
  • Javaを深く理解したいJava初心者の方

目次

第0章 イントロダクション

  • 0.1 対象読者と構成
    • 0.1.1 本書の構成
  • 0.2 Javaについて―誤解と過剰な期待
    • 0.2.1 Javaのメリットは?
    • 0.2.2 Javaは簡単か?
    • 0.2.3 Javaは洗練されているのか?
  • 0.3 オブジェクト指向にまつわる誤解
    • 0.3.1 銀の弾はない
    • 0.3.2 オブジェクト指向にも「正解」はない
    • 0.3.3 オブジェクト指向のメリットは何か?
  • 0.4 予習編
    • 0.4.1 コンパイルエラーを逃がさないためには
    • 0.4.2 Javaコンソールを見るべし
    • 0.4.3 例外を捨てるな
    • 0.4.4 参考URL

第1章 再挑戦! オブジェクト指向 ―もったいぶらずに説明すると

  • 1.1 オブジェクト指向への道[モジュール編
    • 1.1.1 グラフィックモジュールの仕様を考える
    • 1.1.2 非オブジェクト指向で考える
    • 1.1.3 モジュールと情報隠蔽
    • 1.1.4 マルチウィンドウ化
    • 1.1.5 「オブジェクト指向」にしてみる
    • 1.1.6 クラスの宣言
    • 1.1.7 クラスとインスタンス
    • 1.1.8 隠れた引数 ―this
    • 1.1.9 「オブジェクトに仕事をさせる」という発想
  • 1.2 オブジェクト指向への道[構造体編]
    • 1.2.1 構造体の問題点
    • 1.2.2 コンストラクタ
    • 1.2.3 アクセサによる整合性の保持
  • 1.3 static―オブジェクト指向からの「抜け穴」
    • 1.3.1 普通の関数の作り方
    • 1.3.2 グローバル変数の作り方
    • 1.3.3 名前付き定数の作り方
    • 1.3.4 staticとの付き合い方
    • 1.3.5 mainの位置付け

第2章 Javaはポインタの言語だ ―Javaにはポインタ「しか」ない

  • 2.1 オブジェクトとポインタ
    • 2.1.1 オブジェクトの生成
    • 2.1.2 C/C++のポインタとJavaのポインタとの違い
    • 2.1.3 プリミティブ型と参照型
    • 2.1.4 null
    • 2.1.5 オブジェクトのコピー
    • 2.1.6 オブジェクトの比較
    • 2.1.7 参照型のフィールド
    • 2.1.8 ポインタとカプセル化
    • 2.1.9 続・オブジェクトのコピー
    • 2.1.10 immutableオブジェクト
  • 2.2 配列とポインタ
    • 2.2.1 プリミティブ型の配列
    • 2.2.2 finalと配列
    • 2.2.3 クラス型の配列
    • 2.2.4 多次元配列
  • 2.3 引数渡し
    • 2.3.1 値渡し
    • 2.3.2 ポインタを渡す
    • 2.3.3 Javaではswap()は作れない
    • 2.3.4 メソッドから複数の値を返したければ
  • 2.4 Javaのメモリモデル
    • 2.4.1 スタック,ヒープ,static
    • 2.4.2 オブジェクトとヒープとポインタ
    • 2.4.3 ガベージコレクタ
    • 2.4.4 ファイナライザ
    • 2.4.5 なぜ変数へのポインタを取ることができないのか?
  • 2.5 なぜJavaはポインタの言語なのか?
    • 2.5.1 コンストラクタの引数の問題
    • 2.5.2 代入演算子とコピーコンストラクタの問題
    • 2.5.3 継承の問題
    • 2.5.4 とりあえず,ポインタさえあれば困らない
  • 2.6 まとめ―結局Javaにはポインタは「ある」のか「ない」のか

第3章 続・オブジェクト指向 ―継承とインターフェース

  • 3.1 継承
    • 3.1.1 ドローツールのデータモデルを考える
    • 3.1.2 継承する
    • 3.1.3 継承とコンストラクタ
  • 3.2 メソッドオーバーライド
    • 3.2.1 メソッドオーバーライドを使わない場合
    • 3.2.2 ダウンキャスト
    • 3.2.3 instanceofによる方法の問題点
    • 3.2.4 メソッドオーバーライドによる解決
    • 3.2.5 abstract/無指定/finalのメソッド
    • 3.2.6 abstract/無指定/finalのクラス
    • 3.2.7 Objectクラス
  • 3.3 寄り道―Cで継承を実現してみる
    • 3.3.1 無理矢理サブクラス
    • 3.3.2 無理矢理メソッドオーバーライド
    • 3.3.3 無理矢理リフレクション
    • 3.3.4 Classクラス
  • 3.4 インターフェース
    • 3.4.1 インターフェースは多重継承の代用品か?
    • 3.4.2 グラフィックモジュールをインターフェース化する
    • 3.4.3 複数のインターフェースを実装する
  • 3.5 継承をどう使うか? どこまで使えるか?
    • 3.5.1 実装の再利用としての継承
    • 3.5.2 ケーススタディ―Point2Dに機能追加
    • 3.5.3 is a と has a
    • 3.5.4 ケーススタディ―配列とスタック
    • 3.5.5 ケーススタディ―学生と社会人
    • 3.5.6 コンポジションと委譲
    • 3.5.7 ケーススタディ―円と楕円
    • 3.5.8 abstractクラスとインターフェース
  • 3.6 X-Draw
    • 3.6.1 全ソース
    • 3.6.2 使い方とApplet周辺
    • 3.6.3 Shape周辺
    • 3.6.4 描画周辺
    • 3.6.5 CanvasとCommand
    • 3.6.6 図形を追加する場合には
    • 3.6.7 本当にdraw()をShapeに入れてよいのか?

第4章 パッケージとアクセス制御 ―謎な仕様を完全解説

  • 4.1 パッケージ
    • 4.1.1 パッケージは「階層構造」か?
    • 4.1.2 クラスの完全限定名
    • 4.1.3 importとは何か
    • 4.1.4 クラスパスとディレクトリ
  • 4.2 アクセス制御
    • 4.2.1 メンバーのアクセス制御
    • 4.2.2 メンバーのアクセス制御は「クラス単位」だ
    • 4.2.3 クラスのアクセス制御
    • 4.2.4 インターフェースのメンバーの場合

第5章 押さえておきたいその他の機能 ―それにしてもややこしいけど

  • 5.1 スレッド
    • 5.1.1 スレッドとは何か
    • 5.1.2 オブジェクトを独立したスレッドで動かす
    • 5.1.3 スレッドはオブジェクトとは直交した概念だ
    • 5.1.4 ThreadとRunnableの関係
    • 5.1.5 synchronized
    • 5.1.6 そして,オブジェクトに戻る
  • 5.2 例外処理
    • 5.2.1 従来の方法の欠点
    • 5.2.2 Javaの例外処理機
    • 5.2.3 3種類の例外
    • 5.2.4 例外処理をどう使うか? どこまで使えるか?
  • 5.3 直列化
    • 5.3.1 直列化とは何か
    • 5.3.2 Serializable
    • 5.3.3 transientフィールド
    • 5.3.4 transientフィールドの復元
  • 5.4 コレクションクラスライブラリ
    • 5.4.1 コレクションクラスとは
    • 5.4.2 genericityがない―Javaの最大の欠陥
    • 5.4.3 Wrapperクラス
    • 5.4.4 イテレータ
  • 5.5 ネストしたクラス
    • 5.5.1 ネストしたクラスの例
    • 5.5.2 内部クラスは「親」への参照を持っている
    • 5.5.3 static指定のネストしたクラス
    • 5.5.4 ローカル内部クラスと無名クラス

第6章 混乱の元 ―これでも「Javaはシンプル」か?

  • 6.1 メソッドオーバーロード
    • 6.1.1 メソッドオーバーロードとは何か
    • 6.1.2 オーバーロードは「静的」だ
    • 6.1.3 まぎらわしいケース
  • 6.2 継承・オーバーライド・隠蔽
    • 6.2.1 サブクラスで同名のメンバーを宣言する
    • 6.2.2 インスタンスフィールドはコンパイル時に選択される
    • 6.2.3 staticメンバーをインスタンスから参照する
    • 6.2.4 staticメンバーもコンパイル時に選択される
    • 6.2.5 まとめると
    • 6.2.6 staticメンバーをインスタンス経由で参照するのはやめよう
    • 6.2.7 super
  • 6.3 継承に関する諸問題
    • 6.3.1 オーバーライドとアクセス制御
    • 6.3.2 オーバーライドと例外
    • 6.3.3 コンストラクタでオーバーライドされたメソッドを呼ぶと
  • 6.4 配列に関する諸問題
    • 6.4.1 継承関係のあるクラスの配列は継承関係にある
    • 6.4.2 ArrayStoreException
    • 6.4.3 配列は自分の型を知っている
    • 6.4.4 例:コレクションから配列を取得する場合
  • 6.5 clone()とCloneable
    • 6.5.1 clone()
    • 6.5.2 clone()はprotectedだ
    • 6.5.3 Cloneableインターフェース

第7章 テクニック ―Javaの機能の適用事例

  • 7.1 大規模開発でインターフェースを分離する
    • 7.1.1 インターフェース分離の必要性
    • 7.1.2 具体的な方法
    • 7.1.3 引数の問題
  • 7.2 列挙型を作る
    • 7.2.1 なぜ列挙型が必要なのか
    • 7.2.2 列挙型を作るには
  • 7.3 グラフ構造のコピーに直列化を使う
    • 7.3.1 clone()の限界
    • 7.3.2 直列化を使う
  • 7.4 デバッグライト
    • 7.4.1 デバッグライトをコンパイル時に抹殺するには
    • 7.4.2 クラスによるON/OFF
  • 7.5 コレクションクラスを実用的に使う
    • 7.5.1 コンポジションを使う
    • 7.5.2 実装例

第8章 落とし穴 ― Javaの言語仕様は「甘い」!!

  • 8.1 メソッド名をミスタイプした
  • 8.2 仮引数をミスタイプした
  • 8.3 コンストラクタにvoidを付けた
  • 8.4 クラスからインターフェースへの型変換
  • 8.5 Cから持ち込んだ欠点

著者プロフィール

前橋和弥(まえばしかずや)

1969年,愛知県生まれ。名古屋市内の某ソフト会社で俸禄を食んでいるプログラマー。著書に『C言語 ポインタ完全制覇』,『C言語 体当たり学習徹底入門』,『Java謎+落とし穴徹底解明』,『センス・オブ・プログラミング!』がある。

言語作りは昔から趣味で細々とやっていた。これがなければCの本を書いたりすることもなかったと思う。

著者ホームページ:http://kmaebashi.com