Java SE 17 Programmer I(Silver)の学習教材
公開済みの教材をログインせずに読めます。改訂中の教材は公開していません。
- ソースファイル構成とmainを理解する
Javaのソースファイルにはクラス本体だけでなく、所属先を表すpackageや型名を短く書くimportもあります。ファイルの場所、クラスの完全修飾名、起動時の検索ルートを一つの例で結び付け、mainの宣言と引数の結果まで確認します。Java SE 17を前提とします。
- ソースファイル構成とmainのコードトレース
パッケージを持つRunnerを実際のコマンドで起動する事例です。コンパイルの出力先、クラスパス、mainの宣言、引数配列を一続きで追います。Java SE 17の通常のclass起動を使い、プレビュー機能やソースファイル起動は使いません。
- varによるローカル変数型推論を理解する
varは初期化式からローカル変数の型をコンパイラに決めさせる記法です。動的に型が変わる仕組みではありません。数値、配列、参照型の例から、推論される型と後から許される操作を区別します。
- varによるローカル変数型推論のコードトレース
初期化式に演算やメソッド呼出しを含めたとき、推論される型は何かを追跡します。小さな値だからbyteになる、実体が文字列だから全メソッドを呼べる、といった誤解を実行結果で解きます。
- プリミティブ型とラッパークラスを理解する
intなどは値そのものを扱うプリミティブ型、Integerなどは値を包む参照型です。自動変換、数値解析、等値比較、nullの危険を順に学びます。Java 17の結果として、値が等しいことと同じオブジェクトであることを区別します。
- プリミティブ型とラッパークラスのコードトレース
値の取り出しが起きる場所を、代入・比較・増分・コレクションから探します。nullを安全に比較できる場合と例外になる場合、数値の型を揃える必要がある場合を具体的なコードで解きます。
- 型変換・キャスト・数値昇格の全体像
変数へ代入できるかを判断するには、値だけでなく式の型を見る必要があります。小さい整数同士を足した結果がintになることや、キャストで値が変わることを、コンパイル結果と表示で確かめます。この課は基本型の数値変換を中心に扱います。
- 型変換・キャスト・数値昇格のコードトレース
集計値の平均、byteのカウンター、文字の数値を題材に、式の型と計算順序を追います。各断片は正しいmain内で一つずつ試し、コンパイル失敗と実行結果を混ぜずに記録します。
- Stringの不変性を理解する
Stringの不変性は、変数を書き換えられないという意味ではありません。文字列オブジェクトの内容、参照を保持する変数、メソッドが返す値を分けると、連結や置換後に何が残るかを説明できます。
- Stringの不変性のコードトレース
基礎教材で学んだ「Stringの内容は変わらない」を使い、代入・戻り値の破棄・別名参照が混在するコードを一行ずつ追います。まず出力を予想し、その後で参照先と値の対応を確認してください。ここではJava SE 17の構文とAPIを使います。
- StringBuilderを理解する
StringBuilderは文字の並びを編集できるオブジェクトです。追記、挿入、削除のたびに内容が変わるので、同じオブジェクトを指す参照と、toStringで得たStringを区別して追跡します。
- StringBuilderのコードトレース
StringBuilderは文字の並びを編集できるオブジェクトです。追記、挿入、削除のたびに内容が変わるので、同じオブジェクトを指す参照と、toStringで得たStringを区別して追跡します。
- 文字列比較とequalsを理解する
表示が同じでも同じオブジェクトとは限りません。Stringのequalsは文字の並び、==は参照の同一性を調べます。リテラル、new、定数式、nullを組み合わせて比較の意味を確かめます。
- 文字列比較とequalsのコードトレース
表示が同じでも同じオブジェクトとは限りません。Stringのequalsは文字の並び、==は参照の同一性を調べます。リテラル、new、定数式、nullを組み合わせて比較の意味を確かめます。
- 1次元・多次元配列の全体像
Javaの多次元配列は「配列を要素として持つ配列」です。表のように使えますが、行ごとの長さが異なったり、まだ行が作られていなかったりします。一次元の添字とlengthから始め、参照の共有と二重ループまで図で結び付けます。
- 1次元・多次元配列のコードトレース
行ごとに異なる件数の点数データを集計します。外側の配列、各行、各要素を別の箱として描き、参照をコピーした後にどの値が変わるかを予測します。各コードは正しいmain内で実行するものとします。
- 短絡評価を理解する
&&と||は、左の条件だけで結果が決まれば右を実行しません。nullや添字を先に確認する安全な条件式を組み立て、&や|に置き換えると何が変わるかを追います。
- 短絡評価のコードトレース
複数のガード、増分を含む条件、Booleanのnullを組み合わせて、左からどこまで実行されるかを追跡します。括弧による結合の変更と、例外によって評価自体が止まる場合も比較します。
- 三項演算子を理解する
条件演算子 ? : は、条件に応じて二つの式の一方から値を選びます。選んだ枝だけを実行する規則と、両方の枝から式の型を決める規則を分け、数値変換やnullの取り出しを追います。
- 三項演算子のコードトレース
条件演算子の枝にchar、ラッパー、null、代入を置いた例を比較します。条件が定数でも両枝の型検査は残ることを確認し、式の型・実行された枝・最後の値の三段階で解きます。
- if・elseの全体像
条件分岐は、条件の結果によって実行する文を選ぶ仕組みです。Javaのifはbooleanの条件を使います。字下げではなく波括弧と文の構造を読み、境界値と条件の評価順を紙と実行結果で確かめます。コード断片は正しいmainの中に置くものとします。
- if・elseのコードトレース
割引対象と試験合否の判定を修正します。同じ値でも条件の順番や波括弧が違えば出力が変わります。実行される条件、実行されない副作用、分岐後に残る値まで追跡します。
- for・拡張forの全体像
拡張forは配列やIterableの要素を順に取り出す書き方です。添字を自分で増やす基本forと比較し、値のコピーと参照先の変更を区別します。例はJava 17のmain内です。
- for・拡張forのコードトレース
基本forと拡張forを選び分ける演習です。元の配列、各回の変数、最終出力を分けて書き、代入先がどこかを確かめます。
- while・do-whileの全体像
whileは繰返しの前、do-whileは本体の後で条件を調べます。条件を変える更新がどこにあるかを確認すると、回数・合計・終了時の値を正確に追跡できます。コード断片は正しいmain内で実行します。
- while・do-whileのコードトレース
在庫を一件ずつ減らす処理と、条件付き集計を題材に反復の誤りを見つけます。回数だけでなく終了時の値、continueが飛ばす処理、最初から条件外の入力まで検証します。
- break・continueとラベルの全体像
breakは繰返しから抜け、continueはその回の残りを省略します。似た位置に書けても、次に実行する場所が異なります。通常のJava 17のmain内の短いコードで移動先を追います。 Silverではさらにラベルで外側の反復やブロックを指定する場合を扱います。
- break・continueとラベルのコードトレース
検索の打切りと対象外データの除外をコードで比較します。二重ループでも、抜ける反復と継続する反復を正確に指定して出力を予測します。 Silverではさらにラベルで外側の反復やブロックを指定する場合を扱います。
- メソッド宣言と可変長引数を理解する
可変長引数は、呼出し時に0個以上の値を並べて渡せる宣言です。メソッド本体では配列として扱います。メソッド宣言の基本に加え、配列を直接渡す場合とnull、オーバーロードとの関係を学びます。
- メソッド宣言と可変長引数のコードトレース
可変長引数を集計やオーバーロードと組み合わせます。渡された値の個数と、既存配列を直接渡したときの共有を実行結果で確認します。
- オーバーロードを理解する
オーバーロードは、引数の型や個数が異なる同名メソッドを用意する仕組みです。コンパイル時に呼出し先を選びます。名前だけ、戻り値だけ、実行時のオブジェクトだけで選ぶのではありません。
- オーバーロードのコードトレース
候補となる宣言を並べ、実引数の静的な型と変換を照合します。型が違えば同じ値でも呼出し先が変わることを、具体的な出力で確認します。