問題一覧
Java 17 Silver ラボ の練習問題です。問題を開くと、選択肢と正解・解説が見られます。 記録を残しながら続けて解くときは 学習の画面 へ。
1. Java の概要と簡単な Java プログラムの作成
main メソッドを持つ実行可能な Java プログラムの作成
コマンドラインでの Java プログラムのコンパイルと実行
- javac と java のコマンド
- javac で作られるファイル
- ソースファイルを直接実行する
- コマンドライン引数の数え方
- 引数なしで実行したときの args
- パッケージに入ったクラスの実行
- クラスファイルの出力先
パッケージの使用 (パッケージ宣言とインポート)
2. Java の基本データ型と文字列の操作
変数の宣言および初期化と変数のスコープ
- 進数リテラル
- 代入できるリテラル
- キャストで範囲を超える
- byte 同士の計算結果
- 初期化していないローカル変数
- フィールドの初期値
- ブロックの中で宣言した変数
- 同じスコープで同じ名前を宣言
- for 文の変数のスコープ
ローカル変数型推論 (var)
文字列の作成と操作 (テキスト・ブロックを含む)
- リテラルと new String
- コンパイル時の文字列連結
- String は不変
- substring と indexOf
- charAt の範囲外
- null を連結する
- 空白に関するメソッド
- StringBuilder のメソッドチェーン
- StringBuilder の delete と length
- StringBuilder の比較
- テキストブロックの行末の \
- テキストブロックを1行で書く
- テキストブロックのインデント
配列 (一次元配列、二次元配列) の宣言、インスタンス化、初期化および使用
- 配列の宣言と生成
- 配列の要素の初期値
- 配列の長さ
- 範囲外の添字
- 2つ目の要素数を省略した2次元配列
- 長さがそろっていない2次元配列
- 1行で宣言した配列の次元
- 配列の代入は参照のコピー
- 拡張 for 文で要素を書き換える
- 配列の型と ArrayStoreException
ArrayList の使用
3. 演算子と制御構造
分岐文 (if、if/else、switch) の使用
- 前置・後置インクリメントと if
- 短絡評価 (&&) と (&)
- if の条件に代入を書く
- else はどの if に付く?
- { } を省略した if の範囲
- else if の判定の順番
- switch 文のフォールスルー
- default が先頭にある switch
- switch に使える型
- case に変数を書く
- String の switch は大文字・小文字を区別
繰り返し文 (do/while、while、for 文および拡張 for 文) の使用
- while は 0 回のこともある
- do-while は必ず 1 回
- while の条件で後置インクリメント
- for 文で2つの変数を使う
- for 文の省略
- 入れ子のループの回数
- 2次元配列の拡張 for
- String を拡張 for で回す
- while の後ろのセミコロン
break、continue を使用した制御
- break と continue
- ラベル付き continue
- ラベル付き break
- ループの中の switch で break
- break の後ろに文を書く
- do-while の中の continue
- ループの外で break
switch 式の使用
4. クラスの定義とインスタンスの使用
Java クラスの定義とインスタンス化とオブジェクトのライフサイクル
- インスタンスごとのフィールド
- 参照をコピーしたとき
- null の参照でメソッドを呼ぶ
- GC の対象になるオブジェクトの数
- GC の対象になるタイミング
- System.gc() の働き
- 同じ内容の2つのインスタンス
メソッドとコンストラクタの作成
- デフォルトコンストラクタが無くなる
- this() で別のコンストラクタを呼ぶ
- this() を2行目に書く
- this を付け忘れたコンストラクタ
- 戻り値の型を書いた「コンストラクタ」
- return が足りないメソッド
- 引数は値渡し
- 可変長引数
- this を返すメソッドチェーン
メソッドのオーバーロード
- byte を渡したときに選ばれるメソッド
- 可変長引数は最後の候補
- 戻り値だけ違うメソッド
- null を渡したときのオーバーロード
- どちらとも決まらない null
- Integer を渡したときのオーバーロード
- 引数の順番が違うオーバーロード
static 変数と static メソッド
- static 変数は全インスタンスで共有
- static メソッドからインスタンス変数を使う
- インスタンスから static メソッドを呼ぶ
- null の変数から static 変数を使う
- static 初期化子の実行タイミング
- static メソッドからインスタンスメソッドを呼ぶ
アクセス修飾子の使用
- 別のクラスの private フィールド
- 同じクラスの別インスタンスの private
- 同じパッケージから protected を使う
- private なコンストラクタ
- カプセル化
- public クラスとファイル名
instanceof のパターン・マッチング
レコード・クラスの作成と使用
5. 継承とインタフェースの使用
スーパークラスとサブクラスの作成と使用
抽象クラスの作成と継承
メソッドのオーバーライド
- オーバーライドしたメソッドの呼び出し
- アクセスを狭めるオーバーライド
- 戻り値の型を変えるオーバーライド
- @Override の付いたメソッド
- private メソッドはオーバーライドされない
- 親のコンストラクタからオーバーライドしたメソッドを呼ぶ
- static メソッドは隠蔽
参照型のキャストとポリモーフィックなメソッド呼び出し
final クラスの作成と使用
- final クラスを継承する
- final メソッドをオーバーライドする
- final クラスのインスタンス
- final 変数への再代入
- final な参照が指すオブジェクト
- abstract と final を同時に付ける
インタフェースの作成と実装
- インタフェースを実装する
- 実装メソッドの public を忘れる
- インタフェースのフィールド
- インタフェースを new する
- 複数のインタフェースを実装する
- インタフェースの static メソッド
- インタフェースを継承するインタフェース
デフォルト・メソッドとプライベート・メソッドの使用
- default メソッド
- default メソッドの衝突
- default メソッドの衝突を放置する
- クラスのメソッドが優先
- インタフェースの private メソッド
- 実装クラスからインタフェースの private メソッドを呼ぶ
- static な private メソッド
- Object のメソッドを default で定義する
シール・クラスの作成と使用
6. 例外処理
例外処理の仕組みとチェック例外、非チェック例外、エラーの違い
- チェック例外を処理しない
- 非チェック例外は throws 不要
- Exception では Error を捕まえられない
- チェック例外の見分け方
- 0 で割ったとき
- 起こりえないチェック例外の catch
- 例外が呼び出し元に伝わる
try-catch 文による例外処理
- 例外が起きたときの流れ
- return があっても finally は実行される
- finally の中の return
- return の値はその時点で決まる
- catch の順番
- catch の中で例外を投げる
- 入れ子の try
- catch も finally も無い try
try-with-resources 文による例外処理
カスタム例外の作成
- RuntimeException を継承した例外
- Exception を継承した例外を投げる
- チェック例外を宣言して投げる
- 独自の例外の継承関係で catch する
- Throwable でないクラスを throw
- 原因の例外を持たせる