<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
<9章>
・pow累乗、sqrt平方根
・Comparator x
・プリミティブ型に対応したクラス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オプション(対象のモジュール/公開するパッケージ=利用するモジュール)で緊急避難用にパッケージ公開できる