Java実践講座 00:全20回の目次と学び方
Javaを初めて触る段階から、小さなアプリを設計・テスト・保存・配布できる段階へ進む全20回の講座です。各回には目的、実行例、結果の読み方、練習と解答、公式資料があります。 この講座の前提 JDK 21を基準にします。通常の例はMain.javaとして保存し、javacとjavaで動かせます。第11・12回はMaven、第17〜19回は複数ファイルのプロジェ
20 件の記事
Javaを初めて触る段階から、小さなアプリを設計・テスト・保存・配布できる段階へ進む全20回の講座です。各回には目的、実行例、結果の読み方、練習と解答、公式資料があります。 この講座の前提 JDK 21を基準にします。通常の例はMain.javaとして保存し、javacとjavaで動かせます。第11・12回はMaven、第17〜19回は複数ファイルのプロジェ
この回は新しい構文を暗記する回ではありません。第19回までの知識を使い、要求を整理して改修し、結果を検証します。 卒業課題 タスク管理CLIへ期限と絞り込みを追加してください。期限は任意の年月日、期限なしも認めます。未完了だけ、期限切れだけの一覧を表示できるようにします。「期限切れ」は、指定した基準日より期限が前で、かつ未完了のものと定義します。当日を含めな
到達点は、「手元で一度動いた」を、繰り返し確かめられる状態にすることです。前提は第17・18回です。 保存を含む契約を確かめる 次のTaskAppTest.javaを同じフォルダへ保存します。外部ライブラリなしで実行できる小さなテストです。大きく育てるなら第11回のJUnitへ移します。 コードブロック。 javac -encoding UTF-8 Task
第17回のTask.javaと同じフォルダに、次のTaskApp.javaを保存します。長い例ですが、読み込み、保存、操作の三つに分けて追ってください。 コードブロック。 javac -encoding UTF-8 Task.java TaskApp.java でコンパイルします。続いて java TaskApp tasks.tsv add "Javaを復習
ここから第19回までで、保存できるタスク管理CLIを完成させます。前提は第01〜16回です。CLIはコマンドラインから操作するプログラムです。 作るものを小さく確定する 操作はadd、list、doneの三つです。タスクは正のID、空でない題名、完了状態を持ちます。完了済みを再び完了にしても成功し、存在しないIDはエラーにします。保存ファイルがなければ空から
到達点は、勘で直す前に再現条件と証拠を集めることです。前提は第11〜15回です。 小さな再現例から始める 不具合の報告には、期待した結果、実際の結果、入力、実行手順、環境を記録します。例外のスタックトレースでは、自分のコードが最初に現れる行を確認します。必要ならIDEのブレークポイントで、入力値と変化する直前の状態を観察します。 次のMain.javaは入力
到達点は、変更が広がりにくいデータ構造と境界を選ぶことです。前提は第05・06・14回です。 変更できない値は推論しやすい 他の場所から勝手に書き換えられる値は、読む時点ごとに状態を考える必要があります。小さな値を不変にすると、比較、共有、テストが単純になります。ただしrecordを使うだけでは、内部にある可変のオブジェクトまで守れません。 コードブロック。
到達点は、並行処理の必要性と競合の原因を説明することです。前提は第08・13回です。 同時進行と同時実行 並行とは複数の作業を進める構造、並列とは複数の計算を実際に同時実行することです。ネットワーク待ちの多い処理では、待っている間に別の仕事を進める価値があります。Java 21の仮想スレッドは、このような多数の待ちを伴う仕事で候補になります。CPUそのものを
到達点は、通信の成功を複数段階で確認することです。前提は第08・10回です。 接続できたことと成功したことは違う HTTPのリクエストにはメソッド、宛先、ヘッダ、必要に応じた本文があります。レスポンスにはステータス、ヘッダ、本文があります。接続できても404や500は返ります。さらに200でも、本文が想定した形式とは限りません。 次のMain.javaは外部
到達点は、値をSQLへ安全に渡し、複数の更新をまとめることです。前提は第08・11回です。 データベースにもルールを置く テーブルは同じ項目を持つ行の集まりです。主キーは行を識別し、NOT NULLやCHECKは保存できる値を制限します。アプリ側だけの検査では、別の書き込み経路から不正な値が入る可能性があります。 実習では第11回のpom.xmlのdepen
到達点は、必要なライブラリとテスト手順をプロジェクトに記録することです。前提は第08回です。 手作業を再現可能にする ファイルが増えたら、ビルド手順を人の記憶へ置かずMavenへ渡します。Mavenはpom.xmlに依存関係やプラグインを記録し、決まったディレクトリからソースをコンパイルします。本実習はJDK 21とMaven 3.9系を前提とし、依存は教材
到達点は、外部のデータを明示的な形式で読み書きすることです。前提は第08回です。 ファイルには文字コードが必要 ファイルの実体はバイト列です。文字列へ戻す規則が文字コードです。UTF-8を明示すると、別のマシンでも意図が伝わります。Pathは場所を表し、Filesが読み書きなどの操作を提供します。 コードブロック。 Main.javaで実行すると行数は2、時
到達点は、抽出、変換、集計を分けて書くことです。前提は第07・08回です。 「どう回すか」から「何を求めるか」へ Streamはコレクションそのものではなく、要素を処理する流れです。filterで対象を絞り、mapで形を変え、sumやtoListなどの終端操作で結果を得ます。終端操作が呼ばれるまで、中間操作は原則として実行されません。 コードブロック。 Ma
到達点は、失敗の種類を分け、後始末を確実にすることです。前提は第07回です。 失敗を成功に見せない 「検索結果がない」「文字列を数値にできない」「ファイルを読めない」は違う状態です。通常の不在ならOptional、呼び出し規約の違反やI/O失敗なら例外が候補になります。例外を捕まえて空の結果を返すだけだと、障害と正常な0件を区別できなくなります。 コードブロ
到達点は、List、Set、Mapを目的に合わせて選ぶことです。前提は第06回です。 保存したい関係から選ぶ Listは順序と重複を持つ列、Setは重複しない集合、Mapはキーから値への対応です。記事を表示順に持つならList、既読IDを管理するならSet、IDから記事を探すならMapが候補です。 コードブロック。 Main.javaの出力は2、キー順でja
到達点は、実装を取り替えられる境界を作ることです。前提は第05回です。 呼ぶ側が必要とする約束 通知処理で必要なのは「メッセージを送れること」です。画面表示かメールかという実装の詳細まで、業務処理が知る必要はありません。インターフェースに操作の約束を置き、実装を外から渡します。これを依存性の注入と呼びます。大きなフレームワークは不要です。 コードブロック。
この回では、オブジェクト指向を「現実の物を何でもクラスにすること」ではなく、状態の整合性を守る方法として学びます。前提は第04回です。 不正な状態を作らせない 残高を公開変数にすると、どの場所からでも負の数へ書き換えられます。privateにして、入金という操作だけを公開すれば、検査を一か所に集められます。これがカプセル化の実用的な価値です。 コードブロック
この回では、文字列の比較、配列の範囲、参照の共有を扱います。前提は第03回です。 同じ内容と同じ物は違う プリミティブ型のintなどは値そのものを比較できます。Stringのような参照型で == を使うと、同じオブジェクトへの参照かを比較します。文字の並びを比較したければequalsを使います。たまたま同じ結果になった実験だけで判断しないことが大切です。 コ
この回では、条件を整理し、同じ処理をメソッドへ切り出します。前提は第02回です。 入力と出力を先に書く 「送料を計算する」を実装するなら、購入額が入力、送料が出力です。購入額が5000円以上なら無料、それ未満なら500円、負の金額は不正と決めます。境界の5000円を含むのかが、記号選びより先に必要な情報です。 コードブロック。 Main.javaで実行すると
この回では、値に合う型を選び、整数の割り算や桁あふれを予測します。前提は第01回です。 型は操作の約束 intは32ビット整数、longは64ビット整数です。doubleは近似的な小数、booleanは真偽、Stringは文字列です。変数には宣言した型に合う値を入れます。varは初期値から型を推論する構文であり、途中で自由に型を変える仕組みではありません。