Java SE 11 Programmer I (1Z0-815-JPN) 試験ポイント

・main 引数String[]とString…は同じ
・Java11からJREは配布せずJDK
・Javaファイルの実行はclassが存在するとできない
・staticメソッドでthisは使えない
・プリミティブ型との参照型ラッパークラス(int→Integer)
・リテラル、0b(2進数)、0(8進数)、0x(16進数)
・アンダースコアつきリテラル(見た目だけコンパイルで外れる)
・LocalVariableTypeInterface推論型(ローカル変数だけ右辺で判断、なので初期化子やnullやラムダには使えない、キーワードではないので変数名にvar var = 1は使える)
・StringBuilderとStringのreplaceは少し違う、StringBuilderは開始終了位置の内容を全部書き換え
・x | y(論理和)論理演算
・ArrayIndexOutOfBoundsException
・ループのcontinueとcaseのbreak
・staticメソッドからインスタンス変数やインスタンスメソッドにアクセスできないコンパイルエラー
・カプセル化(getter/setter)
・public > protected > なし(packege private) > private
・サブクラスのコンストラクタでスーパーのコンストラクタを呼び出してない場合は自動でsuper()を呼び出す
・キャスト>オートボクシング(型が近いものから順)
・インターフェースで定義されている変数は定数(public static final)
・インターフェースで定義されているメソッドはpublic abstract(オーバーライドしない場合はそのクラスはabstractで宣言)
・abstractクラスにabstractメソッドはあってもなくてもいいが、abstractメソッドがある場合はabstractクラスにしかなれない
・チェック例外(検査例外)Exception例外処理必要、非チェック例外(非検査例外)RuntimeExceptionなど例外処理はどちらでもいい(NullPointerException)、エラークラス(OutOfMemory)
・try-with-resources
・catchはサブクラスから記述する、到達できないcatchブロックがある場合はコンパイルエラー
・multi-catch(} catch(例外1 | 例外2)継承関係があると不到達が発生するのでないもののみ
・ラムダ式(StreamAPI)
・replaceAll(関数型インターフェースUnaryOperator)、removeIf(関数型インターフェースPredicate)、forEach(関数型インターフェースConsumer)
・モジュールシステム(Jigsaw)

Java SE 11 Programmer I (1Z0-815-JPN) 試験用のメモ

<1章>
・package宣言、Public
・java.langパッケージ
・Java –source 11
・ソースファイルモードではclass名<>ファイル名でも可
<2章>
・_はリテラルの先頭と末尾、記号の前後は×
・char ‘a’、’\u30A2’、65
・var は右辺からコンパイル時に推論、未初期化やnullやラムダ式や初期化子はエラー、ローカルしか使えない
・replace()でも全部、replaceAll()は正規表現を使いたい場合
・StringBuilderは16文字分バッファ
<3章>
・大きな範囲の値を小さな変数に代入するにはcastが必要、型が異なる計算では小さいほうの型は大きいほうの型に自動変換される
・同一(==)、同値
・コンスタントプール(==)、intern
・中括弧は省略可
・caseはlong、double、float、booleanは使えない、nullはだめ、定数かコンパイル時に値が決まること
<4章>
・whileやdo-whileは中括弧を省略できるが対象は1つの文だけしかだめ
・for(初期化文;条件文;更新文)、初期化文は同じ型なら複数可、更新文も複数可
<5章>
・配列のインスタンス生成時は整数のint型で要素数の指定が必要、2次元の場合に1次元目は省略できない、生成と同時は初期化子を使用する、[]と{}を使用する場合は[]に要素数は指定できない
<6章>
・staticからstaticでないフィールドやメソッドにはアクセスできない
・64ビットの浮動小数点doubleと32ビットの浮動小数点floatは互換性がある
・可変長引数は最後の引数のみ、型の後ろに…をつける
・オーバーロードでdoubleとintのように暗黙の型変換の曖昧な場合はコンパイルエラー、アクセス修飾子が異なってるだけだとオーバーロードにはならない
・コンストラクタを1つも定義しなかった場合はデフォルトのコンストラクタが生成される
・初期化子でコンストラクタが実行される前の前処理を書ける
・staticクラス変数は初期化子やコンストラクタでもインスタンス化の前に初期化できない、その場合はstatic初期化子を使う
・thisはオーバーロードされた別のコンストラクタを呼び出す時とインスタンスそのものを表す2つがある
・コンストラクタからオーバーロードされた別のコンストラクタを呼び出すにはthisを使うが最初に記述する必要がある
・publicすべてのクラス、protected同じパッケージか継承しているサブクラスから、なし(デフォルト)同じパッケージのクラス、privateクラス内のみ
<7章>
・インターフェースはpublicとなる、クラスの多重継承はだめ、インターフェースは可能、メソッド{}は記述できない、final、staticのフィールドは可
・default修飾子でインターフェースに実装を書ける、publicとなる
・java.lang.Objectクラスのメソッドをインターフェースでオーバーライドするとコンパイルエラー
・多重継承で同じメソッドの場合はどちらかを指定しないとエラーなる
・オーバーライドは共変戻り値(同じ型かそのサブクラスなら可)NumberのサブクラスのIntegerは可、アクセス修飾子は同じかより緩いもの
<8章>
・ラムダ式ではデータ型は関数型インターフェースの型から推論できるのでデータ型は省略可、引数を受け取らない場合は変数も省略可
・関数型インターフェースの型 変数名 = (引数) -> {処理};だが引数が1つの場合は()も省略可、実行したい処理も1つの場合は{}も省略可、{}があればreturnは必要、なければ書けない
・メソッド内のローカル変数と同じ名前のラムダ式引数は使えない
・ラムダ式外の変数を使用する場合、その変数は変更してはいけない(実質的にfinal)
・Consumer、Supplier、Predicate、Function
<9章>
・pow累乗、sqrt平方根
・Comparator xy→-1
・プリミティブ型に対応したクラスint→Integer、double→Double、boolean→Boolean
・javatime.LocalDateは1から始まり不変なオブジェクト(変更しようとしても新しいインスタンスで元のは変わらない)、日付指定はofメソッド、現在日付はnowメソッド
・Arraylistはnull、重複可でスレッドセーフではないコレクション(java.util.Vectorはスレッドセーフ)、他のスレッドがremoveするとConcurrentModificationException
・Arraylistで固定長のリストを作成するのはasListメソッドやofメソッド、増減しようとするとUnsupportedOperationException
・ラムダ(str) -> System.out.println(str)、forEach.Main::test;(クラス名/インスタンス名::括弧不要のメソッド名)
<10章>
・try-catch-finally順番は変えたり到達しないものがあったりtryやfinallyが複数あればエラー、finallyは例外の発生有無やcatchのreturnにかかわらず必ず実行
・try-with-resourcesはリソースの開放、catch、finallyの順
・エラーError(OutOfMemoryError、NoClassFoundError、StackOverflowError)、例外(検査例外Exceptionと非検査例外RuntimeException)、非検査例外はtry-catchやthrows句はなくてもよい
<11章>
・モジュールシステム(どのパッケージを公開するか、ほかのどのモジュールを使うか)module-info.java
・javac -d クラスファイルの出力先ディレクトリ コンパイルするファイルのパス
・java –module-path モジュールのルートディレクトリ(モジュールよりも1つ上のディレクトリ) -m 実行したいモジュールのクラス(モジュール名/実行したいクラスの完全修飾クラス名、jarの場合モジュール名)
・jar –create –file=jarファイル名 main-class=エントリーポイントを持つクラス -C jarファイルに含めるファイルがあるディレクトリ
・javacコマンドで利用するmodule-info.javaでexportsで公開するパッケージ名(記述しなければ非公開)、他のモジュールで利用する場合requiresでモジュール名
・必要とするモジュールを伝搬させるrequiresにtransitiveをつける
・プラットフォームモジュールjava.baseモジュールはrequiresをつけなくても自動的に読み込まれる(java.lang、java.util、java.ioは標準クラスライブラリ)
・module-info.java以外でモジュールの情報確認はjavaコマンドの–describe-moduleオプションかjmodコマンドのdescribeモード
・javaコマンドの–show-module-resolutionオプションでプログラム実行時に依存するモジュールがどのように探されているかを表示
・jdepsコマンドはクラスやメソッド、JARファイル、モジュールの依存関係を調べる
・javacコマンドの–add-exportsオプション(対象のモジュール/公開するパッケージ=利用するモジュール)で緊急避難用にパッケージ公開できる

Struts(バージョン1系)とSturts2(バージョン2系)の違い

Struts(バージョン1系)
・サポートは停止済
・Jakarutaプロジェクトが作成
・struts-config.xmlで構成
・ActionFormを使用

Sturts2(バージョン2系)
・「WebWork2」という別フレームワークからStruts1系の考え方を取り込み作成
・Struts(バージョン1系)とは根本的に異なる物
・struts-config.xmlを分割して利用するstruts.xmlで構成
・ActionFormは無くなりsetter,getterは、Actionクラスに移動
・JSPのタグが全然違う(s:ではじまるタグ、s:forms等)

JavaのJRE、JDK、SE、EEの違い

JDK(Java Development Kit)
Java開発キット(環境)JREが含まれる

JRE(Java Runtime Environment)
Java実行環境
→Antの実行やnative2asciiでプロパティファイルをUnicodeコード変換などでもJDKが必要

JavaSE(Java Platform, Standard Edition)
標準的な機能がまとめられたAPIの集合体

JavaEE(Java Platform, Enterprise Edition)
JavaSEにサーバ関係のライブラリなどを追加したもの