【Java Silver SE11】試験対策用備忘録メモ【黒本ベース】

【Java Silver SE11】試験対策用備忘録メモ【黒本ベース】

Java Silver SE11の受験にあたって、ややこしかった点を備忘録としてまとめたメモです。個人的に分かりにくかったところをピックアップしています。

なお、内容のカテゴライズは、Java Silverの参考書である「徹底攻略Java SE 11 Silver問題集[1Z0-815]対応」(黒本)の章に準拠しています。

第1章:Javaの特徴とJavaプログラムの作成

Javaの特徴

  • Javaのデータには参照型基本データ型がある

Javaの開発環境

  • Java SE11での開発環境の変更点
    • AppletおよびWeb Startが削除された
    • 32ビットWindows版バイナリが提供されなくなった

クラスのインポート

import文
1import パッケージ名.*;
  • import文を使用してインポートが必要となるクラス
    • 自クラスとは異なるパッケージのクラス
    • java.langパッケージ以外のパッケージのクラス

パッケージ

パッケージ
1package パッケージ名;
  • パッケージの目的は、名前空間の提供アクセス制御クラスの分類の3つ
  • 他パッケージのクラスを利用する場合、import文を定義し、利用するクラスのインポートを行うこと、利用するクラスがpublicクラスであることが必要
  • パッケージ宣言されていない無名パッケージ(デフォルトパッケージ)のクラスは同じ無名パッケージのクラスからしかアクセスできない

mainメソッド

  • 処理を始めるメソッドのことをエントリーポイント(mainメソッド)という
    • 引数名以外は変更できない
    • publicstaticをつける
mainメソッド
1public static void main(String[] args) {// {String... args}も可能
2  // 処理
3}

Javaコマンド

  • Javaプログラムを実行するにはJavaコマンドを使う
Javaコマンド
1java Sample
2java Sample.java

第2章:基本データ型・文字列操作

識別子の命名規則

  • 識別子(変数名)は予約語を使えない
    • defaultifなど
  • 識別子は数字から始められない
  • 識別子で記号はアンダースコア_と通貨記号$のみ使える

整数リテラル

  • アンダースコア_は先頭と末尾と記号の前後にはつけられない
整数リテラル
1int a = 123_456; // OK
2int b = _123; // NG

int型

  • int型での10進数以外は以下の様に表す
進数接頭辞
2進数0b...
8進数0...
16進数0x...

var型

  • var型では、データ型を特定できないものはコンパイルエラーになる
    • 配列の初期化式もエラーになる
var型
1var a; // エラー
2var b = {1,2}; // エラー
  • var型はローカル変数のみ使える
    • フィールド変数や引数変数には使えない
  • var型は変数を同時に宣言できない
var型
1var a = 1, b = 2; // エラー

StringBuilderクラス

  • StringBuilderクラスのオブジェクトは参照情報になるため、比較しても同一の参照値が参照される

第3章:演算子・判定構造

型変換

  • byte型は-128~127の範囲を扱う
  • 浮動小数点数はdouble型がデフォルト
float型
1float f = 1.0; // floatだとコンパイルエラーになる

同値性と同一性

  • 同値性はインスタンスは異なるが同じ値をもっていること
    • new演算子を使う時は新しいインスタンスが作られる
  • 同一性は同じインスタンスを参照していること

switch文

  • case式の特徴
    • caseで指定できるのは定数式
    • longdoublefloatboolean型case式に使えない
    • case値final宣言された変数かリテラルを使う
    • break文がないとその下のcasedefaultも実行される

第4章:制御構造

for文

  • for文の初期化文に複数の変数を宣言するときは、同じ型でなければならない
    • 初期化文内で宣言した変数はfor文の外では使えない
  • 条件文を複数書くときは論理演算子(&&||)で記述する
    • カンマ,は使えない

do-while文

  • do-while文doの中カッコ{}を省略した場合、その下には1文しか記述できない

第5章:配列の操作

配列型変数

  • 配列型変数の宣言時の特徴
    • 大かっこ[]はデータ型の後ろだけではなく変数の後ろにも記述できる
    • 配列型変数の宣言時には要素数は指定できない

配列の初期値

  • 値を代入せずに生成すると初期値になる
変数型初期値
byte/short/int/long0
float0.0f
double0.0d
char'\u0000'(空文字)
Stringnull
booleanfalse

第6章:インスタンスとメソッド

リテラル

  • nullは変数が何も参照してないことを表す
    • 空文字""は文字数0のStringクラスのオブジェクトを表す

ガベージコレクション

  • インスタンスの参照が無くなった時点でガベージコレクションの対象になる

staticフィールド・staticメソッド

  • staticフィールドはインスタンスを生成しなくても使える
  • staticフィールドにアクセスするにはクラス名.メソッド名と書く
  • staticメソッドは、staticフィールドstaticメソッドにしかアクセスできない

オーバーロード

  • オーバーロードを行うには同一クラス内に引数の数・型・順番が異なるメソッドを定義する必要がある
    • 変数名は関係なし

可変長引数

  • 可変長引数int... numの様に記述する
  • 可変長引数は最後の引数でなければならない

return文

  • return文の後ろの処理は実行できない

コンストラクタ

  • コンストラクタのルール
    • コンストラクタには戻り値の型は記述できない
    • インスタンス生成時(new演算子)に呼び出される
    • アクセス修飾子の制限は無い
  • 初期化子{}を使うことでオーバーロードされた全てのコンストラクタで共通の処理を行える
    • 初期化子の処理が最初に実行される
    • インスタンス生成時(new演算子)に呼び出される
  • コンストラクタを省略した時はデフォルトコンストラクタが定義される
  • コンストラクタから別のコンストラクタを呼び出すときはthisを使う
    • thisで呼び出す時は最初に記述する

アクセス制御

  • アクセス修飾子は以下の4つ
修飾子内容
public全てのクラスからアクセスできる
protected同じパッケージか、継承してるサブクラスからアクセス可能
なし同じパッケージのクラスからアクセス可能
privateクラス内からアクセス可能

カプセル化

  • カプセル化はフィールドをprivate、アクセスするためのメソッドをpublicにする

第7章:クラスの継承、インターフェース、抽象クラス

継承

  • コンストラクタとprivateなフィールド・メソッドは継承しても引き継がない

スーパークラス

  • コンストラクタを呼び出してオブジェクトを生成する際には、スーパークラスのコンストラクタを呼び出す必要がある
    • コンストラクタ呼び出しが明記されてなくてもコンパイル時にsuper();の呼び出し処理が先頭行に暗追加される

インターフェース

  • インターフェースは自動的にpublicで修飾される
  • インターフェースに実装を記述するにはデフォルトメソッドを使う
    • デフォルトメソッドにはdefault修飾子を付ける
    • サブインターフェイスなどで、デフォルトメソッドの処理内容を変えたい時にはオーバーライドを使う
  • インターフェイスはインスタンス化できない

抽象クラス

  • 抽象クラスはインスタンス化できない

オーバーライド

  • メソッドの名前と引数(型・数・順番)は同じである必要がある
  • 戻り値の型は同じかサブクラス型である
  • アクセス修飾子は同じかより緩いもの

型変換

  • 型が違う時は型変換をする必要がある
型変換
1A a = new B();
2B b = (B) a;

第8章:関数インターフェース、ラムダ式

ラムダ式

  • ラムダ式の引数は関数インターフェースのメソッドの引数と一致させる必要がある

    • データ型の指定は省略できる
    • 引数を受け取らないメソッドの時は引数を省略できる
    • ローカル変数と同名の変数は引数に宣言できない
  • {}で囲まれている時は複数処理が書けるがreturn文とセミコロン;が必要

    • ()は省略できる
ラムダ式
1Algo a = (name) -> { return "ABC"; };
2Algo a = (name) -> "ABC"; 
3Algo a = name -> "ABC";
  • ラムダ式の外のローカル変数にアクセスするときには、変更されない変数(実質的にfinalな変数)である必要がある

関数型インターフェース

  • 関数型インターフェースの4種類の特徴
種類メソッド説明
Consumer<T>void accept(T)引数を受け取り処理する、結果は戻さない
Supplier<T>T get()引数を受け取らず、結果だけ返す
Predicate<T>boolean test(T)引数を受け取って、それを評価する
Function<T,R>R apply(T)引数を受け取って、指定された型の結果を返す

第9章:API

Listコレクションのメソッド

  • List.of()メソッドで作成されるリストは変更不可能となるため、要素の追加や削除を行うと例外が発生する

Mathクラスのメソッド

  • floor()メソッドでは、引数がNaN・無限大・0-0の時、引数と同じ値が返される

ArrayListクラスのメソッド 

  • ArrayListクラスの特徴
    • 要素数を自動的に増やすことができる
    • 重複した値を扱える
    • スレッドセーフではない
    • 値にnullを追加できる
  • removeメソッド実行後に読み出すと例外になる

Arraysクラスのメソッド

  • compare()メソッドは二つの配列を比較し、0(同じ時)・負(第1配列の方が小さい)・正(第2が小さい)を返す

第10章:例外処理

try-catch文

  • 例外が発生したらすぐにcatchブロックに移る
  • catch文が複数ある場合で到達不可能なコードになる時はコンパイルエラーになる

try-catch-finally文

  • finally処理は例外の有無にかかわらず実行する
  • try-catch-finallyの順番を変えることはできない(コンパイルエラーになる)

第11章:モジュールシステム

モジュールシステムの概要

  • 内部APIの想定してない使用を防げる
  • カスタムランタイムを構成できる
  • コンパイル時と実行時の両方で必要になるモジュールを認識できる
  • 厳密なカプセル化が可能

モジュール記述子

  • module-info.javaのファイル名で作成する
  • module ファイル名{}で宣言する
  • プログラムコードのルート階層に配置する

モジュール型プロジェクト

  • jdepsコマンドはクラスファイルの依存関係をパッケージレベルかクラスレベルで表示することができるアナライザ
jdepsコマンド
1jdeps --check

モジュール型アプリケーション

  • モジュール化されたアプリケーションをコンパイルするには、モジュールの検索パスを指定するオプションが必要
モジュールの検索パスを指定するオプション
1-p
2
3--module-path
  • 他にもディレクトリ配下のモジュールを一括してコンパイルするオプションがある
モジュールを一括してコンパイルするオプション
1--module-source-path

モジュールグラフ

  • 各モジュールはjava.baseモジュールには明示されていなくても暗黙的に依存する

モジュール型JDK

  • 観測可能なモジュールが検索される順番は、ルート→コンパイル→アップグレード→システム→アプリケーション