スッキリわかるJava入門 実践編 第2版

スッキリわかるJava入門 実践編 第2版

¥2,800+税

品種名
書籍
発売日
2014/9/22
ページ数
628
サイズ
A5判
著者
中山 清喬 著
ISBN
978-4-8443-3677-8

開発現場の知識が着実に身に付く、Javaプロフェッショナル養成書の決定版!

ラムダ式や日付APIなどJava8の注目機能の解説を増補し、アジャイル関連やデザインパターンについての解説も徹底強化した改訂版登場! 姉妹書の『Java入門』と同じく、「なぜ?」にしっかりと答えながら解説が進んでいきますので、正規表現やコレクション、データベース連携、リファクタリング、並列処理など、Javaを仕事で使いこなすために必須の知識が、スッキリ、楽しく、グングン身に付きます。基本文法やオブジェクト指向の概念はわかった、さらにステップアップしたい、という方にお勧めです。

「読者アンケートに答える」「読者プレゼントに応募」の場合もこちらをご利用ください。

アンケートに答える

書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。

詳細

■著者からのメッセージ

 これまでさまざまな開発現場をお手伝いする中で、研修を終えたばかりの若手の方が現場ならではの難しさに苦悩する姿に数多く出会いました。座学による言語学習と現場における実践との間に横たわる溝を埋めるための一冊を、との想いで筆を進めたのが本書です。執筆に際しては、特に以下の2点を意識しました。

1. Javaの実践に必要な周辺スキルを、まんべんなく届けること

 開発や設計手法、ツールについての最低限の知識がないために、チームに迷惑をかけてしまったり、作業の進め方や設計の拙さを指摘されても問題点や改善方法がわからず悩んだりする人も少なくありません。
 そこで本書では各種APIに加え、開発現場で求められる内容についても幅広く紹介しました。「これを渡しておけば若手が現場でとまどわない一冊」として、現場の先輩方にも活用いただけることをめざしています。

2. 本格的な技術やそのおもしろさと出会うきっかけを提供すること

 Javaの世界では、さらに効率よく創造的に開発を進めるための技術や技法が日々生まれ進化しています。しかし、忙しい実務の傍ら各分野の高度な書籍を購入して学ぶことは容易ではありません。

 そこで本書には、各専門分野から抽出した本格技術のエッセンスを入門者向けにわかりやすくアレンジして収めました。より高度な技術者たちと楽しく協働する世界への架け橋となれば幸いです。
 この第2版では、Java8で追加となったラムダ式や日付APIに加え、アジャイル関連やデザインパターンについても増補しました。
 本当に楽しいこと、本当におもしろいことは実践の場にこそあります。本書の柔らかい解説を楽しく読み進めていただき、読者の皆様が更なる高みへと進まれる姿を見送れたら、これに勝る歓びはありません。

 


 

■著者プロフィール

中山清喬(なかやま・きよたか)

株式会社フレアリンク代表取締役。IBM内の先進技術部隊に所属しシステム構築現場を数多く支援。退職後も研究開発・技術適用支援・教育研修・執筆講演・コンサルティング等を通じ、「技術を味方につける経営」を支援。現役プログラマ。講義スタイルは「ふんわりスパルタ」。著書に『スッキリわかるJava入門 第2版』『スッキリわかるSQL入門 ドリル215問付き』。

 


 

■ページイメージ

 

 

目次

まえがき
「dokojava」の使い方
本書の見方

第0章 Javaを使いこなす技術者をめざそう
0.1 ようこそ、Java実践の世界へ

第Ⅰ部 さまざまな基本機能

第1章 文字列の操作
 1.1 文字列処理とは
 1.2 基本的な文字列操作
 1.3 文字列の連結
 1.4 正規表現の活用
 1.5 文字列の書式整形
 1.6 この章のまとめ
 1.7 練習問題
 1.8 練習問題の解答

第2章 日付と時間の取り扱い
 2.1 日付取り扱いの基本
 2.2 従来型APIが抱える課題
 2.3 Time API
 2.4 この章のまとめ
 2.5 練習問題
 2.6 練習問題の解答

第3章 コレクション
 3.1 コレクションとは
 3.2 ArrayListの使い方
 3.3 その他のリスト
 3.4 さまざまなコレクションクラス
 3.5 Mapの使い方
 3.6 コレクションの応用
 3.7 この章のまとめ
 3.8 練習問題
 3.9 練習問題の解答

第4章 インスタンスの基本操作
 4.1 インスタンスの5大基本操作
 4.2 インスタンスの文字列表現
 4.3 インスタンスの等価判定
 4.4 インスタンスの要約
 4.5 インスタンスの順序づけ
 4.6 インスタンスの複製
 4.7 この章のまとめ
 4.8 練習問題
 4.9 練習問題の解答

第5章 さまざまな種類のクラス
 5.1 型安全という価値
 5.2 ジェネリクス
 5.3 列挙型
 5.4 インナークラス
 5.5 この章のまとめ
 5.6 練習問題
 5.7 練習問題の解答

第6章 ラムダ式と関数オブジェクト
 6.1 関数オブジェクト
 6.2 ラムダ式
 6.3 Streamによる関数の活用
 6.4 この章のまとめ
 6.5 練習問題
 6.6 練習問題の解答

第7章 JVM制御とリフレクション
 7.1 JVMへのアクセス
 7.2 JVMの終了
 7.3 外部プログラムの実行
 7.4 システムプロパティの利用
 7.5 メモリに関する状態の取得
 7.6 リフレクション
 7.7 この章のまとめ
 7.8 練習問題
 7.9 練習問題の解答

第8章 非標準ライブラリの活用
 8.1 ライブラリとは
 8.2 クラスパスのおさらい
 8.3 commons-langを使ってみよう
 8.4 ログ出力ライブラリ
 8.5 オープンソースとライセンス
 8.6 この章のまとめ
 8.7 練習問題
 8.8 練習問題の解答

第Ⅱ部 外部資源へのアクセス

第9章 ファイルの操作
 9.1 ファイル操作の前提知識
 9.2 テキストファイルの読み書き
 9.3 バイナリファイルの読み書き
 9.4 ファイル操作の落とし穴
 9.5 ストリームの概念
 9.6 フィルタの活用
 9.7 ファイルシステムの操作
 9.8 この章のまとめ
 9.9 練習問題
 9.10 練習問題の解答

第10章 さまざまなファイル形式
 10.1 データフォーマット
 10.2 CSV形式
 10.3 プロパティファイル形式
 10.4 XML形式
 10.5 オブジェクトの直列化
 10.6 この章のまとめ
 10.7 練習問題
 10.8 練習問題の解答

第11章 ネットワーク通信
 11.1 URLを用いた高水準アクセス
 11.2 Socketを用いた低水準アクセス
 11.3 ServerSocketを使ってサーバーを作る
 11.4 この章のまとめ
 11.5 練習問題
 11.6 練習問題の解答

第12章 データベースアクセス
 12.1 データベースとは
 12.2 データベースの基本操作
 12.3 データベースの接続と切断
 12.4 更新系SQLの送信
 12.5 検索系SQLの送信
 12.6 結果表の処理
 12.7 トランザクション処理
 12.8 この章のまとめ
 12.9 練習問題
 12.10 練習問題の解答

第Ⅲ部 効率的な開発の実現

第13章 基本的な開発ツール
 13.1 Javaが備える基本ツール
 13.2 javadoc─仕様書の自動生成
 13.3 javac─コンパイル
 13.4 native2ascii─文字コードの変換
 13.5 jar─アーカイブの操作
 13.6 java─JVMの起動と実行
 13.7 統合開発環境
 13.8 この章のまとめ
 13.9 練習問題
 13.10 練習問題の解答

第14章 単体テストとアサーション
 14.1 不具合に対するアプローチ
 14.2 単体テストのやりかた
 14.3 JUnitを用いたテスト
 14.4 アサーション
 14.5 この章のまとめ
 14.6 練習問題
 14.7 練習問題の解答

第15章 メトリクスとリファクタリング
 15.1 品質の「見える化」
 15.2 さまざまなメトリクス
 15.3 リファクタリング
 15.4 コードの静的解析
 15.5 この章のまとめ
 15.6 練習問題
 15.7 練習問題の解答

第16章 コードとタスクの共有
 16.1 チームによる開発
 16.2 コードの共有
 16.3 SCMを用いた開発
 16.4 競合の発生と回避
 16.5 タスクの共有
 16.6 この章のまとめ
 16.7 練習問題
 16.8 練習問題の解答

第17章 アジャイルな開発
 17.1 チーム開発の基盤
 17.2 共通の言葉
 17.3 共通の手順
 17.4 アジャイルという価値観
 17.5 エクストリーム・プログラミング(XP)
 17.6 スクラム(Scrum)
 17.7 ビルドの自動化
 17.8 この章のまとめ
 17.9 練習問題
 17.10 練習問題の解答

第Ⅳ部 より高度な設計をめざして

第18章 設計の原則とデザインパターン
 18.1 優れた設計の原則
 18.2 コード記述全般に関する原則
 18.3 クラスの設計に関する原則
 18.4 クラスの関係に関する原則
 18.5 デザインパターン
 18.6 Facade 内部を隠してシンプルに
 18.7 Singleton 唯一無二の存在
 18.8 Strategy プラグインの切り替え
 18.9 TemplateMethod 大まかなシナリオ
 18.10 この章のまとめ
 18.11 練習問題
 18.12 練習問題の解答

第19章 スレッドによる並列処理
 19.1 処理効率の追求
 19.2 Javaにおける並列処理
 19.3 スレッドセーフな設計
 19.4 Concurrency Utilitiesの利用
 19.5 並列処理の影響と可能性
 19.6 この章のまとめ
 19.7 練習問題
 19.8 練習問題の解答

付録 エラー解決・虎の巻

あとがき&参考文献一覧

索引

COLUMN
・メソッドチェーン
・String・char配列・byte配列の相互変換
・可変長引数
・APIの改訂と普及の速度
・和暦を扱うAPI
・Java7以前でも便利な日時APIを利用するには
・ダイヤモンド演算子の省略記法
・Collectionインタフェース
・古参のコレクションクラス
・CollectionクラスとArraysクラス
・equals()オーバーライドが不要なクラス
・ハッシュ計算に登場する整数たち
・オーバーライドによるアクセス修飾の拡大
・静的型付けと動的型付け
・利用できる実型引数を制限する
・減りゆくインナークラス活躍の場
・配列に対してStream処理を行うには
・膨大なデータを分散高速処理するアプローチ
・OS環境変数の取得
・コンパイル時にもクラスパス指定は必要
・ログレベルの利用基準は明確に
・デュアルライセンスとは
・Creative Commonsライセンス
・ランダムアクセス用のAPI
・文字コード体系の別称
・Java7における便利な記法
・ディレクトリの指定方法
・標準出力の接続先をファイルに変更する
・分業インタフェースとしてのデータフォーマット
・プロパティファイルの注意点
・クラスパスからファイルを読み込む
・JSON-Webで活躍するデータフォーマット
・ファイナライザで後片付けしない
・DatagramSocketを使ったUDP通信
・RFCを読もう
・JVM内部でプログラムと同居するDBMS
・DriverManager以外の方法によるConnectionの取得
・クラスロード時に動作するstaticブロック
・RDBMS以外のストレージ
・DTOとDAO
・JVM上で動作するJava以外の言語
・2種類の「単体テスト」
・目的の違いによるテストの分類方法
・優れたテストケースを見つけるための方法論
・JUnit3の場合
・テストメソッド名に日本語を使う
・契約による設計
・計測できないものは制御できない
・さまざまな環境から起動できるツールたち
・より高度なバージョン管理システムの活用
・プロジェクトの状態を共有するための資料
・アジャイル開発のメリットを活かしにくい状況
・振る舞い駆動開発(BDD)
・日本に関係が深い「アジャイル開発」
・XPとスクラムの併用
・mavenによる高水準ビルド自動化
・想像以上に重要な「名前」
・SOLID原則
・Singletonパターンの抜け道に注意
・Runnableの利用
・並列実行性のために「状態」を排除する

関連書籍

好評発売中

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

新Javaの使い方を一挙に解説!Java 8/7をキャッチアップ

好評発売中

スッキリわかるJava入門 第2版

Javaの「どうして?」「なぜそうなる?」が必ずわかる入門書の決定版!

好評発売中

APIデザインの極意 Java/NetBeansアーキテクト探究ノート

NetBeans開発プロジェクト10年超の蓄積! API設計の経験や考察をまとめた一冊

好評発売中

スッキリわかるサーブレット&JSP入門

Webアプリ開発のスキルを習得して、ワンランク上のJavaエンジニアになろう!

ダウンロード

お詫びと訂正

誤記のためにご迷惑をおかけし、誠に申し訳ございません。

  • 0ページ ソースコードのダウンロードページURLについて
    • [誤]書籍内で案内している、ソースコードダウンロードページのURLが、サイトリニューアルにともないアクセスできなくなりました。今後は本ページ内(上部)にある、「ダウンロード」コーナーをご利用ください。
    • [正]
  • 28ページ リスト1-3の5行目
    • [誤]// a Pro
    • [正]// a pro
    • 【 第4刷にて修正 】
  • 31ページ ページ下のコラム内、下のソースコード1行目
    • [誤]String Buffer sb = new StringBuffer();
    • [正]StringBuilder sb = new StringBuilder();
    • 【 第3刷にて修正 】
  • 35ページ コラム内のソースコード3行目
    • [誤]byte[] data3 = str.getBytes(java.nio.Charset.forName("utf-8");
    • [正]byte[] data3 = str.getBytes("utf-8");
    • 【 第3刷にて修正 】
  • 73ページ 図3-2
    • [誤]LinkedHasMap
    • [正]LinkedHashMap
    • 備考:

      ※次刷(6刷)で対応予定

  • 92ページ 図3-16内、「LinkedHashSet」と「LinkedHashMap」の下の文字
    • [誤]インタフェース
    • [正]クラス
    • 【 第4刷にて修正 】
  • 99ページ 表3-5内、メソッド「remove(●)」の戻り値
    • [誤]boolean
    • [正]
    • 【 第4刷にて修正 】
  • 125ページ 1行目
    • [誤]第2章のコラムで紹介したCollectionクラス
    • [正]第3章のコラムで紹介したCollectionクラス
    • 【 第5刷にて修正 】
  • 137ページ 「練習4-1の解答」中
    • [誤]3行目(public class Book implements~)と4行目(public int hashCode() {)の間に、以下の3行を挿入する
    • [正]private String title;

      private Date publishDate;

      private String comment;
    • 【 第2刷にて修正 】
  • 150ページ 図5-5、キャプション
    • [誤]Pocket<E>から、Pocket<Integer>やPocket<Hero>が作られる
    • [正]Pocket<E>から、Pocket<String>やPocket<Hero>が作られる
    • 備考:

      ※次刷(6刷)で対応予定

  • 155ページ リスト5−9の右上にあるソースファイル名
    • [誤]Account.java
    • [正]AccountType.java
    • 【 第3刷にて修正 】
  • 156ページ 本文下から3行目から
    • [誤]たとえばソースコードの先頭で「import static System.*」という
    • [正]たとえばソースコードの先頭で「import static java.lang.System.*」という
    • 【 第5刷にて修正 】
  • 158ページ 本文 下から2行目の文章(~しれません。)の最後の読点の 直前に、括弧書きを追加
    • [誤]~かもしれません。
    • [正]~かもしれません(厳密には、static付きのものは言語仕様上インナークラスの範囲には含まれないことになっています)。
    • 【 第5刷にて修正 】
  • 160ページ 中段青い囲みの2行明
    • [誤]Outer.Inner = o.new Inner();
    • [正]Outer.Inner oi = o.new Inner();
    • 【 第5刷にて修正 】
  • 169ページ 練習5-2の解答、24行目
    • [誤]if (count < 100000) return null;
    • [正]if (count < 1000000) return null;
    • 備考:

      ※次刷(6刷)で対応予定

  • 169ページ 5.7、練習5-2の解答中、13-22行目
    • [誤]switch(this.keyType) {

      case PADLOCK:

      if(count < 1024) return null;

      case BUTTON:

      if(count < 10000) return null;

      case DIAL:

      if(count < 30000) return null;

      case FINGER:

      if(count < 100000) return null;

      }
    • [正]switch(this.keyType) {

      case PADLOCK:

      if(count < 1024) return null;

      break;

      case BUTTON:

      if(count < 10000) return null;

      break;

      case DIAL:

      if(count < 30000) return null;

      break;

      case FINGER:

      if(count < 100000) return null;

      break;

      }
    • 備考:

      「break;」を4ヶ所挿入する

    • 【 第3刷にて修正 】
  • 181ページ 湊君の吹き出し会話の内容
    • [誤]じゃぁどうしてリスト16-2では、IntBinaryOperator型に
    • [正]じゃぁどうしてリスト6-2では、IntBinaryOperator型に
    • 【 第5刷にて修正 】
  • 184ページ リスト6-4、5行目の右端の演算子
    • [誤]{ return a ? b; };
    • [正]{ return a - b; };
    • 【 第2刷にて修正 】
  • 205ページ ページ一番下のコード
    • [誤]long f = System.getRuntime().freeMemory() / 1024 / 1024;
    • [正]long f = Runtime.getRuntime().freeMemory() / 1024 /1024;
    • 【 第4刷にて修正 】
  • 212ページ Main.javaの9, 10, 11行目
    • [誤]pub
    • [正]times
    • 【 第4刷にて修正 】
  • 215ページ 練習7-1 項目2.
    • [誤]2. 現在のメモリ使用率(最大地にはtotalMemoryを利用)を表示する。
    • [正]2. 現在のメモリ使用量を表示する。
    • 【 第4刷にて修正 】
  • 215ページ 練習7-1 項目3.
    • [誤]すべてのstaticメソッド
    • [正]すべてのメソッド
    • 【 第4刷にて修正 】
  • 215ページ 練習7-1 項目4.
    • [誤]文字列配列の引数を持つstaticメソッド
    • [正]文字列配列の引数を持つpublicメソッド
    • 【 第4刷にて修正 】
  • 250ページ コラム「ランダムアクセス用のAPI」内ソースコード最終行
    • [誤]f.writeByre(b);
    • [正]f.writeByte(b);
    • 【 第3刷にて修正 】
  • 263ページ リスト9-4
    • [誤]15行目、17行目を削除する
    • [正]
    • 【 第3刷にて修正 】
  • 273ページ 特徴(2)の本文3行目に追加
    • [誤]「~コンストラクタで指定して生成します。」の後ろに、次の文を追加。
    • [正]なお、コード内に登場する変数algoには、暗号化方式等の指定が格納されているものとします。
    • 【 第3刷にて修正 】
  • 273ページ 特徴(2)のソースコード4行目
    • [誤]備考参照
    • [正]
    • 備考:

      【誤】CipherOutputStream cos = new CipherOutputStream(fos);
      【正】CipherOutputStream cos = new CipherOutputStream(fos, algo);

    • 【 第3刷にて修正 】
  • 273ページ 特徴(1)の本文3行目
    • [誤]java.io.CipherOutputStreamは
    • [正]javax.crypto.CipherOutputStreamは
    • 【 第4刷にて修正 】
  • 274ページ 特徴(3)のソースコード4行目
    • [誤]備考参照
    • [正]
    • 備考:

      【誤】CipherOutputStream cos = new CipherOutputStream(fos);
      【正】CipherOutputStream cos = new CipherOutputStream(fos, algo);

    • 【 第3刷にて修正 】
  • 274ページ 特徴(3)のソースコード、最後の4行
    • [誤]// STEP3: さらに文字バイト変換をするストリームwosを接続

      WriterOutputStream wos = new WriterOutputStream(cos);

      // STEP4: wosに文字書き込めば、バイト変換&暗号化されファイルに流れていく

      wos.write("AB");
    • [正]// STEP3: さらに文字バイト変換をするストリームoswを接続

      OutputStreamWriter osw = new OutputStreamWriter(cos);

      // STEP4: oswに文字書き込めば、バイト変換&暗号化されファイルに流れていく

      osw.write("AB");

    • 【 第3刷にて修正 】
  • 274ページ 図9-14
    • [誤]図中右上にある「wos」

      図中右端にある「wos.write("AB");」

      図中下端にある「WriterOutputStream」
    • [正]それぞれ上から

      「osw」

      「osw.write("AB");」

      「OutputStreamWriter」

      となる
    • 【 第3刷にて修正 】
  • 274ページ 原の吹き出し文1行目
    • [誤]wos.close()を実行すれば、
    • [正]osw.close()を実行すれば、
    • 【 第3刷にて修正 】
  • 274ページ 特徴(3)のソース断片コメント
    • [誤]// STEP4:wosに文字書き込めば、バイト変換&暗号化されファイルに流れていく
    • [正]// STEP4:oswに文字を書き込めば、バイト変換&暗号化されファイルに流れていく
    • 【 第4刷にて修正 】
  • 278ページ 本文下から3行目(コード囲み除く)
    • [誤]java.nio.Pathsクラス
    • [正]java.nio.file.Pathsクラス
    • 備考:

      ※次刷(6刷)で対応予定

  • 383ページ ページ上部、大江のセリフ内
    • [誤]第6章を参照
    • [正]10.5.5項を参照
    • 【 第5刷にて修正 】
  • 435ページ 「練習14-1の解答」中、15行目
    • [誤]} catch(IllegalArgumentException e) {

    • [正]} catch(NullPointerException e) {
    • 【 第3刷にて修正 】
  • 592ページ 練習19-1の解答のコード 3行目
    • [誤]for(int i = 0; i < 50; i++) {
    • [正]for(int i = 0; i <= 50; i++) {
    • 【 第5刷にて修正 】