Java逆引きレシピ 第2版
Java逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)
翔泳社
著者:竹添直樹、高橋和也、島本多可子、佐藤聖規
はじめに
本書の対象と構成
誌面の構成
サンプルプログラムについて
第1章 Java開発の準備
1.1 セットアップ
001 JDKのセットアップ
002 Eclipseのセットアップ
1.2 実行
003 Javaプログラムを作って実行したい
004 Javaプログラムをデバッグしたい
005 クラスパスを指定したい
006 実行時のメモリを指定したい
007 JARファイルを作りたい
008 コマンドラインでコンパイル・実行したい
第2章 Javaの基本
2.1 パッケージとインポート
009 パッケージを宣言したい
010 パッケージ、クラスをインポートしたい
011 staticメンバをインポートしたい
2.2 変数とデータ型
012 Javaのデータ型について知りたい
013 Javaのリテラルについて知りたい
014 数値の計算を行ないたい
015 ビット演算を行ないたい
016 2つの値を比較したい
017 「条件式 ? 式1 : 式2」ってなに?
018 &&、¦¦と&、¦の違いを知りたい
019 オブジェクトの型を調べたい
020 変数の型を変換したい
021 ラッパークラスってなに?
022 null ってなに?
023 Optional ってなに?
2.3 コメント
024 ソースにコメントを記述したい
025 Javadocを記述したい
026 Javadocを生成したい
2.4 制御構文
027 ifで条件分岐したい
028 switchで条件分岐したい
029 forで繰り返し処理を行ないたい
030 whileで繰り返し処理を行ないたい
031 繰り返し処理を途中で終了したい
2.5 例外処理
032 例外を処理したい
033 複数の例外をまとめてキャッチしたい
034 例外をスローしたい
035 リソースを確実にクローズしたい
036 スタックトレースの情報を取得したい
2.6 ラムダ
037 ラムダ式ってなに?
038 汎用的な関数型インターフェースを使いたい
039 独自の関数型インターフェースを定義したい
040 ラムダ式を受け取るメソッドを定義したい
041 ラムダ式の代わりにメソッドを渡したい
2.7 文字列操作
042 文字列を連結したい
043 文字列の長さを調べたい
044 文字列の一部を切り出したい
045 文字列を分割したい
046 文字列を比較したい
047 文字列を置換したい
048 特定の文字列で開始・終了しているかを調べたい
049 特定の文字列が含まれているか知りたい
050 大文字と小文字を変換したい
051 文字列の前後の空白を削除したい
052 文字列に変数を埋め込みたい
053 文字コードを変更したい
054 文字列を数値に変換したい
2.8 正規表現
055 文字列が正規表現に一致するか調べたい
056 文字列を正規表現で検索したい
057 文字列を正規表現で置換したい
2.9 数値処理
058 数値処理をしたい
059 数値を任意の形式にフォーマットしたい
060 乱数を生成したい
061 丸め誤差の発生しない計算を行ないたい
062 符号なしの整数を扱いたい
第3章 クラス・インターフェース
3.1 クラスとインターフェース
063 クラスを使いたい
064 インターフェースを使いたい
065 インターフェースにメソッドを実装したい
066 ネストしたクラスを使いたい
067 匿名クラスを使いたい
068 クラスを継承したい
069 抽象クラスを使いたい
070 メソッドをオーバーライド、オーバーロードしたい
071 staticメンバを使いたい
072 イニシャライザを使いたい
073 可変長引数を定義したい
3.2 アクセス修飾子
074 Javaのアクセス修飾子について知りたい
3.3 列挙型
075 列挙型を使いたい
076 enum定数ごとにメソッドをオーバーライドしたい
077 列挙型に効率の良いコレクションを使いたい
3.4 ジェネリクス
078 Javaのバージョンによるジェネリクスの違いを知りたい
079 ジェネリクスを定義したい
080 型パラメータに制限を付けたい
081 ワイルドカードってなにに使うの?
082 型パラメータの可変長引数を安全に使いたい
3.5 アノテーション
083 標準アノテーションを知りたい
084 独自アノテーションを作成したい
3.6 リフレクション
085 Classインスタンスを取得したい
086 リフレクションでクラスのメンバの情報を取得したい
087 リフレクションでインスタンスを生成したい
088 リフレクションでメソッドやフィールドを呼び出したい
089 リフレクションでジェネリクスの情報を取得したい
090 リフレクションでアノテーションの情報を取得したい
3.7 シリアライズ
091 インスタンスをシリアライズ・デシリアライズしたい
092 独自のシリアライズ・デシリアライズ処理をしたい
第4章 コレクション
4.1 導入
093 コレクションについて知りたい
4.2 配列
094 配列を使いたい
095 配列の長さを調べたい
096 配列の要素を繰り返し処理したい
097 配列をコピーしたい
098 配列をソートしたい
099 配列に特定の要素が含まれているか調べたい
100 配列を比較したい
4.3 List
101 Listを使いたい
102 Listに要素を追加したい
103 Listの要素を取得したい
104 Listの要素を変更したい
105 Listの要素を削除したい
106 Listの要素を繰り返し処理したい
107 Listの要素数を調べたい
108 Listをソートしたい
109 Listに特定の要素が含まれるか調べたい
110 2つのListを連結したい
111 Listと配列を相互に変換したい
4.4 Set
112 Setを使いたい
113 Setに要素を追加したい
114 Setの要素を削除したい
115 Setの要素を繰り返し処理したい
116 Setの要素数を調べたい
117 Setに特定の要素が含まれるか調べたい
118 2つのSetを連結したい
4.5 Map
119 Mapを使いたい
120 Mapに要素を追加したい
121 Mapの値を取得したい
122 Mapのキーを取得したい
123 Mapの要素を取得したい
124 Mapの要素を削除したい
125 Mapの要素数を調べたい
126 Mapに特定のキーが含まれるか調べたい
127 Mapに特定の値が含まれるか調べたい
4.6 Stream
128 Streamを使いたい
129 Streamで数値を扱いたい
130 Streamの長さを調べたい
131 Streamから重複する要素を排除したい
132 Streamの要素を繰り返し処理したい
133 Streamの要素をフィルタリングしたい
134 Streamを連結したい
135 Streamの要素を変換したい
136 Streamの要素が条件に一致しているか調べたい
137 Streamの要素を集計したい
138 Streamの要素をソートしたい
139 Streamの要素をグルーピングしたい
140 Streamをコレクションに変換したい
141 無限の長さを持つStreamを生成したい
142 Streamの要素を並列に処理したい
第5章 日付操作
5.1 導入
143 Javaでの日付操作について知りたい
144 現在の日付を取得したい
145 現在日時をUNIX時間で取得したい
146 年月日などを取得・設定したい
147 日付を文字列にフォーマットしたい
148 文字列を日付に変換したい
149 日付の計算を行ないたい
150 日付の前後関係を調べたい
151 月の最終日を調べたい
152 曜日を取得したい
5.2 Date and Time API
153 Date and Time APIで現在日時を取得したい
154 Date and Time APIで特定日時の日付を取得したい
155 Date and Time APIで日付を再設定したい
156 Date and Time APIで年月日などを取得したい
157 Date and Time APIの日時オブジェクトを相互変換したい
158 Date and Time APIの日付を文字列にフォーマットしたい
159 Date and Time APIで日時の計算を行ないたい
160 Date and Time APIで日付の前後関係を調べたい
161 Date and Time APIで月の最終日を調べたい
162 文字列をDate and Time APIのオブジェクトに変換したい
163 Date and Time APIで特定の期間を表したい
164 Date and Time APIで2つの日付の間隔を調べたい
165 DateオブジェクトをDate and Time APIの日付に変換したい
166 Date and Time APIをDateオブジェクトの日付に変換したい
第6章 ファイル・入出力
6.1 導入
167 Javaでのファイル操作について知りたい
6.2 ファイル
168 ファイルやディレクトリが存在するか調べたい
169 ファイルかディレクトリかを調べたい
170 ファイルやディレクトリを削除したい
171 ファイルを移動したい
172 ファイルのサイズを調べたい
173 ファイルの最終更新日時を調べたい
174 ファイルの属性を調べたい
175 ファイルの属性を設定したい
176 ファイルの絶対パスを取得したい
177 親ディレクトリを取得したい
178 ディレクトリ内のファイル一覧を取得したい
179 空のファイルを作成したい
180 一時ファイルを作成したい
181 ディレクトリを作成したい
6.3 パス
182 パスを絶対パスに変換したい
183 親ディレクトリのパスを取得したい
184 パスに対する相対パスを解決したい
185 パスからファイルを作成したい
186 パスからディレクトリを作成したい
187 パスからリンクを作成したい
188 パスが存在するかどうかを調べたい
189 パスが示すファイルやディレクトリを削除したい
190 パスが示すファイルやディレクトリを移動したい
191 パスが示すファイルやディレクトリをコピーしたい
192 パスから一時ファイルやディレクトリを作成したい
193 パスが示すファイルやディレクトリの属性を取得・設定したい
194 パスが示すディレクトリ内のファイル一覧を取得したい
195 ディレクトリ内のファイルを再帰的に処理したい
196 パスが示すファイルを読み込みたい
197 パスが示すファイルを1 行ずつ読み込みたい
198 パスが示すファイルに書き出したい
199 パスからストリームやチャネルを取得したい
200 ファイルやディレクトリの変更を監視したい
6.4 入出力
201 Javaでの入出力について知りたい
202 コンソールにメッセージを出力したい
203 コンソールからの入力を受け取りたい
204 ファイルの内容をバイト配列で読み込みたい
205 バイト配列をファイルに書き出したい
206 ファイルの内容を文字列で読み込みたい
207 文字列をファイルに書き出したい207
208 ファイルの任意の部分に対する入出力を行ないたい
209 クラスパスからファイルを読み込みたい
210 プロパティファイルの内容を読み込みたい
211 チャネルを使ってファイルの入出力を行ないたい
212 ファイルをロックしたい212
213 ファイルをzipファイルに圧縮・展開したい
第7章 並行プログラミング
7.1 導入
214 Javaの並行処理について知りたい
7.2 スレッド
215 スレッドで非同期処理を行ないたい
216 スレッドで発生した実行時例外をハンドリングしたい
217 マルチスレッドを排他制御したい
218 マルチスレッドで同期を取りながら実行したい
219 別スレッドが終了するまで待機したい
220 スレッドの処理を一時停止したい
221 スレッドに割り込みたい
222 マルチスレッドで1つのフィールドにアクセスしたい
7.3 タイマー
223 特定の時間に一度だけ処理を実行したい
224 一定間隔で繰り返し処理を実行したい
7.4 Concurrency Utilities
225 タスクを単一のスレッドで実行したい
226 タスクをスケジューリングして実行したい
227 スレッドプールを利用してタスクを実行したい
228 非同期処理から結果を返したい
229 呼び出し元をブロックせずに非同期処理を行ないたい
230 複数のタスクの戻り値を早く終わった順に取得したい
231 スレッドの同時実行数を制御したい
232 スレッド間で相互にデータの受け渡しをしたい
233 他の処理が完了するまでスレッドを待機したい
234 別スレッドからのデータを受け取るまで待機したい
235 別スレッドがデータを受け取るまで待機したい
236 Lockでマルチスレッドを排他制御したい
237 Lockで待ち合わせるスレッドの条件を指定したい
238 参照・更新処理をマルチスレッドで行ないたい
239 ロックを使わずにマルチスレッドでの読み取り処理を行ないたい
240 値の取得や更新をアトミックに行ないたい
7.5 Fork/Join Framework
241 Fork/Join Framework ってなに?
242 マルチコアを活用してタスクを細粒度で並列実行したい
第8章 JDBC
8.1 基本的なデータベース操作
243 データベースに接続したい
244 データベースを検索したい
245 データベースに登録・更新・削除を行ないたい
246 トランザクションを制御したい
8.2 高度なデータベース操作
247 ファイルをデータベースに格納したい
248 データベースからファイルを取得したい
249 データベースのエラーコードに応じた処理をしたい
250 ストアドプロシージャを呼び出したい
251 大量のデータをまとめて登録・更新したい
252 データベースのメタデータを取得したい
第9章 Junit
9.1 導入
253 JUnit ってなに?
254 テストを作成して実行したい
9.2 テストケース
255 プログラムの実行結果を確認したい
256 複数のassert文をまとめて処理したい
257 例外が発生することを確認したい
258 テストの前後に処理を行ないたい
259 テストクラスの実行前後に一度だけ処理を行ないたい
260 テストを一時的にスキップしたい
261 前提条件によってテストケースの実行有無を制御したい
262 OSによってテストケースの実行有無を制御したい
263 Javaのバージョンによってテストケースの実行有無を制御したい
264 システムプロパティによってテストケースの実行有無を制御したい
265 環境変数によってテストケースの実行有無を制御したい
266 テストメソッドの表示名を設定したい
267 テストメソッドをグループ化したい
268 テストメソッド名を取得したい
269 テストのタイムアウト値を設定したい
9.3 テストスイート
270 複数のテストクラスをまとめて実行したい
271 グルーピングしたテストケースを実行したい
272 実行するテストケースをパッケージで絞り込みたい
273 実行するテストケースを正規表現で指定したい
第10章 ネットワーク、システム、ユーティリティ
10.1 ネットワーク
274 URLの情報を取得したい
275 Webサーバにリクエストを送信したい
276 TCP 通信を行なうクライアントを実装したい
277 TCP 通信を行なうサーバを実装したい
278 チャネルを使ってTCP 通信を行ないたい
279 ノンブロッキングなTCPサーバを実装したい
10.2 ユーティリティ
280 メッセージを国際化したい
281 ハッシュ値を求めたい
282 暗号化したい
283 UUIDを生成したい
284 経過時間を測定したい
285 外部コマンドを実行したい
286 ログを出力したい
287 URLエンコード・デコードをしたい
288 Base64エンコード・デコードをしたい
10.3 システム
289 システムプロパティを取得したい
290 環境変数を取得したい
291 空きメモリを調べたい
292 メモリ使用状況を監視したい
293 スレッドダンプを取得したい
294 ヒープダンプを取得したい
第11章 これからのJava
11.1 リリースポリシーの変更
295 Java 9 以降の概要が知りたい
11.2 モジュールシステム
296 モジュールシステムってなに?
297 モジュールシステムの利用方法を知りたい(Eclipse)
298 モジュールシステムの利用方法を知りたい(コマンドラインツール)
11.3 新しい構文
299 ローカル変数の型推論について知りたい
300 @SafeVarargsアノテーションの新機能を知りたい
301 try-with-resources文の新機能を知りたい
302 ジェネリクスを使った匿名クラスの型パラメータを省略したい
303 インターフェースにprivateメソッドを定義したい
11.4 APIの拡張
304 @Deprecatedに追加された属性を知りたい
305 Optionalの拡張について知りたい
306 コレクションの拡張について知りたい
307 Reactive Streamsを使いたい
308 CompletableFutureの拡張について知りたい
309 HTTP/2やWebSocketに対応したHTTPクライアントAPIを使いたい
310 Process APIの改善点を知りたい
11.5 ツール
311 jshell: The Java Shell (REPL)について知りたい
11.6 その他
312 Dockerコンテナのための改善を知りたい
313 ResourceBundleのデフォルトファイルエンコーディングのを知りたい
314 SHA-3 暗号化ハッシュをサポート
315 ラッパークラスの生成方法のを知りたい
316 単一ソースファイルをjavaコマンドで直接実行したい
索引