Java SE Bronzeの学習教材
公開済みの教材をログインせずに読めます。改訂中の教材は公開していません。
- Javaの特徴とJVMを理解する
Javaを、言語・コンパイラ・仮想マシン・標準APIの組合せとして理解します。ソースから実行までの役割を分け、移植性の条件とJava SE・EE・MEの位置付けを学びます。
- Javaの特徴とJVMのコードトレース
Javaを、言語・コンパイラ・仮想マシン・標準APIの組合せとして理解します。ソースから実行までの役割を分け、移植性の条件とJava SE・EE・MEの位置付けを学びます。
- ソースコード・コンパイル・実行の全体像
Javaを動かすには、書いた文章を保存する段階、文法や型を調べる段階、命令を実行する段階を区別します。ここでは小さなプログラムを一行ずつ追い、エラーが出たときに直す場所まで判断します。例は通常のクラス起動方式を使います。
- ソースコードを理解する
ソースコードはJavaの規則に従って書くテキストです。ファイル・クラス・メソッド・文の階層を読み、編集した内容がコンパイラへ渡されるまでを理解します。
- コンパイルを理解する
コンパイルは、ソースを検査して実行用のクラスファイルへ変換する段階です。構文・型・名前の誤りがどこで検出されるかを理解し、javacの入力・出力・版指定を使い分けます。
- 実行を理解する
実行は、生成したクラスを読み込んでmainから実際の処理を進める段階です。起動時の検索経路と引数、順次処理、実行時例外、標準出力を分けて追跡します。
- ソースコード・コンパイル・実行の違いと使い分け
ソース編集、コンパイル、クラス起動は別の作業です。生成物とコマンドとエラーが出る段階を対応付け、変更が反映されない理由や、起動に必要なファイルを具体的な事例から判断します。
- ソースコード・コンパイル・実行のコードトレース
コンパイルに成功したコードについて値の変化と出力を追い、失敗するコードでは最初に止まる段階を特定します。各断片は特記がなければ正しいpublic static void main(String[] args)の中へ置くものとし、Javaの整数と配列の基本を使います。
- mainメソッドを理解する
mainはJavaアプリケーションを開始するときの入口です。呼出し可能な宣言の形と、起動コマンドから渡された文字列配列の読み方を学びます。コンパイルが通ることと起動入口が見つかることを区別します。
- mainメソッドのコードトレース
mainはJavaアプリケーションを開始するときの入口です。呼出し可能な宣言の形と、起動コマンドから渡された文字列配列の読み方を学びます。コンパイルが通ることと起動入口が見つかることを区別します。
- 識別子と予約語を理解する
識別子は変数・クラス・メソッドなどへ付ける名前です。使える文字、予約語との区別、大文字小文字、名前を使える範囲を理解すると、コードを実行する前に見つかる命名上の誤りを判断できます。
- 識別子と予約語のコードトレース
識別子は変数・クラス・メソッドなどへ付ける名前です。使える文字、予約語との区別、大文字小文字、名前を使える範囲を理解すると、コードを実行する前に見つかる命名上の誤りを判断できます。
- コメントと文の構造を理解する
ソースは行数ではなく、文・ブロック・コメントの区切りに従って読みます。セミコロンと中括弧の役割を押さえ、コメントで無効になる範囲と実際に動く文を区別します。
- コメントと文の構造のコードトレース
ソースは行数ではなく、文・ブロック・コメントの区切りに従って読みます。セミコロンと中括弧の役割を押さえ、コメントで無効になる範囲と実際に動く文を区別します。
- プリミティブ型を理解する
プリミティブ型は、整数・小数・文字・真偽値を直接扱うための8種類の型です。変数へ入れられる値の種類と範囲を理解し、表示結果だけでなく、代入が許される理由まで追います。
- プリミティブ型のコードトレース
宣言できる値の範囲、演算途中の数値昇格、charの数値としての性質を具体的なコードで確認します。型の変換をした時点を特定し、コンパイルエラーと実行結果を区別します。
- 参照型とnullを理解する
参照型の変数はオブジェクトそのものを変数へ詰め込むのではなく、オブジェクトを参照する値を持ちます。参照のコピー、内容の変更、nullへの再代入を分けると、共有と例外の原因が見えます。
- 参照型とnullのコードトレース
参照型の変数はオブジェクトそのものを変数へ詰め込むのではなく、オブジェクトを参照する値を持ちます。参照のコピー、内容の変更、nullへの再代入を分けると、共有と例外の原因が見えます。
- 変数の宣言と初期化を理解する
変数の宣言は名前と型を決め、初期化は最初の値を与える操作です。ローカル変数には自動の初期値がないことを押さえ、代入・再代入・確定代入をコードの経路で判断します。
- 変数の宣言と初期化のコードトレース
変数の宣言は名前と型を決め、初期化は最初の値を与える操作です。ローカル変数には自動の初期値がないことを押さえ、代入・再代入・確定代入をコードの経路で判断します。
- 型変換とキャストを理解する
変数へ代入できるかを判断するには、値だけでなく式の型を見る必要があります。小さい整数同士を足した結果がintになることや、キャストで値が変わることを、コンパイル結果と表示で確かめます。この課は基本型の数値変換を中心に扱います。
- 型変換とキャストのコードトレース
集計値の平均、byteのカウンター、文字の数値を題材に、式の型と計算順序を追います。各断片は正しいmain内で一つずつ試し、コンパイル失敗と実行結果を混ぜずに記録します。
- 算術・比較・論理演算子の全体像
演算式は数値を計算する部分、値を比較する部分、複数の条件を結ぶ部分に分けると読みやすくなります。各段階の結果の型と値を確かめ、最後に代入や表示へ渡す値を求めます。
- 算術を理解する
算術演算子は値を計算する仕組みです。同じ記号でも、オペランドの型や文字列の有無により結果が変わります。商と余り、優先順位、演算中の型を順に調べて計算します。
- 比較を理解する
比較演算子は二つの値の関係を調べ、booleanのtrueまたはfalseを返します。数値の大小、境界を含むか、参照の同一性を区別し、条件として利用します。
- 論理演算子を理解する
論理演算子はbooleanの条件を組み合わせます。両方必要か、一方で十分か、否定したいかを決め、右側が実行される条件まで読み解きます。
- 算術・比較・論理演算子の違いと使い分け
演算式は数値を計算する部分、値を比較する部分、複数の条件を結ぶ部分に分けると読みやすくなります。各段階の結果の型と値を確かめ、最後に代入や表示へ渡す値を求めます。
- 算術・比較・論理演算子のコードトレース
演算式は数値を計算する部分、値を比較する部分、複数の条件を結ぶ部分に分けると読みやすくなります。各段階の結果の型と値を確かめ、最後に代入や表示へ渡す値を求めます。
- インクリメントと評価順序を理解する
++と--は変数を一つ増減する演算子です。前置と後置は更新後の変数の値だけでなく、式がその場で返す値に違いがあります。評価する順序と、演算の優先順位を分けて追います。
- インクリメントと評価順序のコードトレース
++と--は変数を一つ増減する演算子です。前置と後置は更新後の変数の値だけでなく、式がその場で返す値に違いがあります。評価する順序と、演算の優先順位を分けて追います。
- Stringの基本を理解する
Stringは文字列を扱う参照型です。文字の位置、部分文字列の範囲、数値との連結を区別して、コードがどの文字を出すかを一つずつ確かめます。例はJava 11のmain内で実行します。
- Stringの基本のコードトレース
Stringは文字列を扱う参照型です。文字の位置、部分文字列の範囲、数値との連結を区別して、コードがどの文字を出すかを一つずつ確かめます。例はJava 11のmain内で実行します。
- if・elseの全体像
条件分岐は、条件の結果によって実行する文を選ぶ仕組みです。Javaのifはbooleanの条件を使います。字下げではなく波括弧と文の構造を読み、境界値と条件の評価順を紙と実行結果で確かめます。コード断片は正しいmainの中に置くものとします。
- ifを理解する
if文はboolean条件がtrueのときに処理を実行します。波括弧で囲む範囲、elseとの対応、条件式の型を確認し、どの文が実際に実行されるか追います。
- elseを理解する
if文はboolean条件がtrueのときに処理を実行します。波括弧で囲む範囲、elseとの対応、条件式の型を確認し、どの文が実際に実行されるか追います。
- if・elseの違いと使い分け
if文はboolean条件がtrueのときに処理を実行します。波括弧で囲む範囲、elseとの対応、条件式の型を確認し、どの文が実際に実行されるか追います。
- if・elseのコードトレース
割引対象と試験合否の判定を修正します。同じ値でも条件の順番や波括弧が違えば出力が変わります。実行される条件、実行されない副作用、分岐後に残る値まで追跡します。
- switchを理解する
switch文は一つの値に対してcaseラベルから実行の開始位置を選びます。Java 11のコロン形式を使い、breakの有無、default、選べる型とcase定数の制約を理解します。
- switchのコードトレース
switch文は一つの値に対してcaseラベルから実行の開始位置を選びます。Java 11のコロン形式を使い、breakの有無、default、選べる型とcase定数の制約を理解します。
- forを理解する
forは初期化、継続条件、更新を一か所に書く繰返しです。読み方は左から一度ずつではなく、初期化の後に条件・本体・更新を繰り返します。各コードは正しいmain内で実行するものとして、表示と終了後の値を追跡します。
- forのコードトレース
配列から必要な値を集計し、逆順表示や二重ループの回数を確認します。forの開始値・条件・更新を変更したときにどの結果が変わるか、短いコードを実行して検証します。
- while・do-whileの全体像
whileは繰返しの前、do-whileは本体の後で条件を調べます。条件を変える更新がどこにあるかを確認すると、回数・合計・終了時の値を正確に追跡できます。コード断片は正しいmain内で実行します。
- whileを理解する
whileとdo-whileは条件を調べながら同じ処理を繰り返します。初期値、条件を調べる時点、本体の更新、終了後の値を一回ずつ追い、回数や合計を求めます。
- do-whileを理解する
whileとdo-whileは条件を調べながら同じ処理を繰り返します。初期値、条件を調べる時点、本体の更新、終了後の値を一回ずつ追い、回数や合計を求めます。
- while・do-whileの違いと使い分け
whileとdo-whileは条件を調べながら同じ処理を繰り返します。初期値、条件を調べる時点、本体の更新、終了後の値を一回ずつ追い、回数や合計を求めます。
- while・do-whileのコードトレース
在庫を一件ずつ減らす処理と、条件付き集計を題材に反復の誤りを見つけます。回数だけでなく終了時の値、continueが飛ばす処理、最初から条件外の入力まで検証します。
- break・continueの全体像
breakは繰返しから抜け、continueはその回の残りを省略します。似た位置に書けても、次に実行する場所が異なります。通常のJava 11のmain内の短いコードで移動先を追います。
- breakを理解する
break文はループまたはswitchの途中から抜ける制御文です。どの構文を終了するかと、終了後にどの文へ進むかを明確にし、検索や入れ子の処理を追います。
- continueを理解する
continue文は現在の反復の残りを省略して、次の反復へ進むための制御文です。for・while・do-whileで戻る位置が異なるため、更新や条件評価が実行されるかを確認します。
- break・continueの違いと使い分け
breakは対象の構文を終了し、continueは対象ループの次の反復へ進みます。同じ条件で置き換えたコードを比較し、残る表示、合計、更新後の値、入れ子の到達先を区別します。
- break・continueのコードトレース
検索の打切りと対象外データの除外をコードで比較します。二重ループでも、抜ける反復と継続する反復を正確に指定して出力を予測します。
- ネストした制御構文を理解する
入れ子の制御構文は、外側の一回の処理の中で内側の分岐や反復を実行する構造です。外側と内側の変数を別に追い、内側の初期化、合計回数、break・continueの対象を読み解きます。
- ネストした制御構文のコードトレース
入れ子の制御構文は、外側の一回の処理の中で内側の分岐や反復を実行する構造です。外側と内側の変数を別に追い、内側の初期化、合計回数、break・continueの対象を読み解きます。
- 1次元配列を理解する
一次元配列は同じ型の複数の要素を添字で扱うオブジェクトです。配列変数と配列実体を区別し、生成、読取り、書換え、繰返し処理を一つずつ学びます。
- 1次元配列のコードトレース
一次元配列は同じ型の複数の要素を添字で扱うオブジェクトです。配列変数と配列実体を区別し、生成、読取り、書換え、繰返し処理を一つずつ学びます。
- 【発展】多次元配列を理解する
Javaの多次元配列は「配列を要素として持つ配列」です。表のように使えますが、行ごとの長さが異なったり、まだ行が作られていなかったりします。一次元の添字とlengthから始め、参照の共有と二重ループまで図で結び付けます。
- 【発展】多次元配列のコードトレース
行ごとに異なる件数の点数データを集計します。外側の配列、各行、各要素を別の箱として描き、参照をコピーした後にどの値が変わるかを予測します。各コードは正しいmain内で実行するものとします。
- 配列の初期化を理解する
配列の初期化では、長さを指定して既定値の要素を作る方法と、初期化子で各要素の値を列挙する方法を使い分けます。宣言時・再代入時の構文、各型の初期値、生成時の例外まで確認します。
- 配列の初期化のコードトレース
配列の初期化では、長さを指定して既定値の要素を作る方法と、初期化子で各要素の値を列挙する方法を使い分けます。宣言時・再代入時の構文、各型の初期値、生成時の例外まで確認します。
- 配列の添字とlengthを理解する
配列のlengthは要素数を表し、添字はその中の位置を指定します。0からlength-1までという境界を基準に、範囲外・null・型不一致を区別し、安全なループと末尾参照を組み立てます。
- 配列の添字とlengthのコードトレース
配列のlengthは要素数を表し、添字はその中の位置を指定します。0からlength-1までという境界を基準に、範囲外・null・型不一致を区別し、安全なループと末尾参照を組み立てます。
- 拡張forを理解する
拡張forは配列やIterableの要素を順に取り出す書き方です。添字を自分で増やす基本forと比較し、値のコピーと参照先の変更を区別します。例はJava 11のmain内です。
- 拡張forのコードトレース
基本forと拡張forを選び分ける演習です。元の配列、各回の変数、最終出力を分けて書き、代入先がどこかを確かめます。
- クラスとインスタンスを理解する
クラスはオブジェクトの型と振舞いを定義し、newで作るインスタンスは具体的な状態を持ちます。クラスの宣言、生成、参照、フィールドへのアクセスを区別して、複数の実体の値を追います。
- クラスとインスタンスのコードトレース
クラスはオブジェクトの型と振舞いを定義し、newで作るインスタンスは具体的な状態を持ちます。クラスの宣言、生成、参照、フィールドへのアクセスを区別して、複数の実体の値を追います。
- フィールドとローカル変数を理解する
フィールドはクラスやインスタンスの状態を保持し、ローカル変数はメソッド等の処理の中で使います。宣言位置、初期値、スコープ、同名変数が現れた場合の名前解決を分けて学びます。
- フィールドとローカル変数のコードトレース
フィールドはクラスやインスタンスの状態を保持し、ローカル変数はメソッド等の処理の中で使います。宣言位置、初期値、スコープ、同名変数が現れた場合の名前解決を分けて学びます。
- メソッドと引数を理解する
メソッドは名前を付けた処理のまとまりです。引数として値を受け取り、必要なら結果を返します。呼出し元の変数と受取側の変数を区別すると、値渡しの仕組みが分かります。例のstaticメソッドはMainクラス内、呼出しはmain内に置きます。
- メソッドと引数のコードトレース
呼出しの前後で値がどう変わるかを検証します。仮引数への代入、配列への書込み、参照先の再指定を別々の列で追い、出力を予測します。
- 戻り値とvoidを理解する
戻り値はメソッドが呼出し元へ返す一つの値です。画面への表示とは別で、戻り値があるだけでは表示されません。void、return、型、正常終了する経路の関係を確かめます。
- 戻り値とvoidのコードトレース
呼出し式を大きな式へ組み合わせ、早期returnや複数経路の結果を追います。画面への出力順と返された値を別に記録します。
- コンストラクタを理解する
コンストラクタはnewで作る実体の初期状態を設定します。クラス名と同じ名前で戻り値型を書かない宣言、暗黙のデフォルトコンストラクタ、引数による選択、thisによる連鎖を学びます。
- コンストラクタのコードトレース
コンストラクタはnewで作る実体の初期状態を設定します。クラス名と同じ名前で戻り値型を書かない宣言、暗黙のデフォルトコンストラクタ、引数による選択、thisによる連鎖を学びます。
- thisを理解する
thisは現在のインスタンスを表す参照です。同名引数とフィールドを区別し、現在の実体のメソッドを呼ぶ、引数として渡す、戻り値にする使い方を確認します。this(...)のコンストラクタ呼出しとは構文の役割が異なります。
- thisのコードトレース
thisは現在のインスタンスを表す参照です。同名引数とフィールドを区別し、現在の実体のメソッドを呼ぶ、引数として渡す、戻り値にする使い方を確認します。this(...)のコンストラクタ呼出しとは構文の役割が異なります。
- staticメンバーを理解する
staticメンバーは各インスタンスではなくクラスに属します。共有カウンタや補助計算を例に、インスタンスメンバーとの格納場所・呼出し方・利用できる名前の違いを理解します。
- staticメンバーのコードトレース
staticメンバーは各インスタンスではなくクラスに属します。共有カウンタや補助計算を例に、インスタンスメンバーとの格納場所・呼出し方・利用できる名前の違いを理解します。
- オーバーロードを理解する
オーバーロードは、引数の型や個数が異なる同名メソッドを用意する仕組みです。コンパイル時に呼出し先を選びます。名前だけ、戻り値だけ、実行時のオブジェクトだけで選ぶのではありません。
- オーバーロードのコードトレース
候補となる宣言を並べ、実引数の静的な型と変換を照合します。型が違えば同じ値でも呼出し先が変わることを、具体的な出力で確認します。
- 継承・抽象クラス・インタフェースを理解する
継承は既存クラスの性質を持つ新しいクラスを定義する仕組みです。extendsで親子関係を作り、引き継げるメンバー、追加した状態、親型の参照、抽象クラスとインタフェースの役割を区別します。
- 継承・抽象クラス・インタフェースのコードトレース
継承は既存クラスの性質を持つ新しいクラスを定義する仕組みです。extendsで親子関係を作り、引き継げるメンバー、追加した状態、親型の参照、抽象クラスとインタフェースの役割を区別します。
- superを理解する
superは現在の実体から親クラス側のメンバーやコンストラクタを指定するために使います。thisとの違い、親子の初期化順、隠れたフィールドと上書きされたメソッドの呼出しを整理します。
- superのコードトレース
superは現在の実体から親クラス側のメンバーやコンストラクタを指定するために使います。thisとの違い、親子の初期化順、隠れたフィールドと上書きされたメソッドの呼出しを整理します。
- オーバーライドを理解する
オーバーライドは継承したインスタンスメソッドを子クラスで再定義する仕組みです。同じ呼出しでも実体の型に応じた処理が選ばれます。引数が異なるオーバーロード、staticメソッドの隠蔽、フィールドの隠蔽とは区別します。
- オーバーライドのコードトレース
オーバーライドは継承したインスタンスメソッドを子クラスで再定義する仕組みです。同じ呼出しでも実体の型に応じた処理が選ばれます。引数が異なるオーバーロード、staticメソッドの隠蔽、フィールドの隠蔽とは区別します。
- パッケージ・import・アクセス修飾子を理解する
アクセス修飾子はクラスやメンバーを使える場所を制御します。public/privateとパッケージアクセスを中心に、packageとimportの役割を学び、状態を公開メソッドで扱うカプセル化へつなげます。
- パッケージ・import・アクセス修飾子のコードトレース
アクセス修飾子はクラスやメンバーを使える場所を制御します。public/privateとパッケージアクセスを中心に、packageとimportの役割を学び、状態を公開メソッドで扱うカプセル化へつなげます。
- ポリモーフィズムの入口を理解する
多態性は共通の親クラスやインタフェースの型を通じて、実体ごとに異なる処理を呼ぶ仕組みです。宣言型で使える操作を検査し、実体型でオーバーライド先を選び、必要な参照型キャストを安全に判断します。
- ポリモーフィズムの入口のコードトレース
多態性は共通の親クラスやインタフェースの型を通じて、実体ごとに異なる処理を呼ぶ仕組みです。宣言型で使える操作を検査し、実体型でオーバーライド先を選び、必要な参照型キャストを安全に判断します。