JavaSE11から追加された機能
javaコマンドで.javaファイルを直接実行できる。
javac -d 出力先 ソースファイル名(.java)
クラスパス指定
javac -cp クラスパス(クラスファイルが存在するディレクトリ) ソースファイル名(.java)
java -cp クラスパス(クラスファイルが存在するディレクトリ) 完全修飾クラス名(.class)
例)カレントからtemp/temp2/test.javaを実行したい場合
java -cp ./temp/temp2 test
逆アセンブル
javap -c クラスファイル名(.class)
コンパイル時、依存するクラス(import)が存在する場合、自動的にコンパイルされる。
完全修飾クラス名で記述する場合は、import宣言は不要。
java.langパッケージはインポート不要。
String... argsは可変長引数、配列のようなもの、引数の数を可変にする
メソッドの仮引数には最後に書く、一つだけ
★不明点
String intern()
String Constant Poolについて
https://programmer-life.work/java/interning-java
https://programmer-life.work/java/post-5162
switch文のdefaultはどこに書いてもよい
switch文のcaseは変数不可、finalをつければOK
ビット演算子
& and
| or
^ xor
数値を2進数にして、それぞれの桁同士のビット演算を行い、結果を返す。
Stringはnewによるインスタンス化をしなかった場合、Stringクラスが管理しているプールに文字列 が配置される。
str.intern()を使った場合、strの文字列と等しい文字列がプールに存在した場合、その文字列を返す(参照先もその文字列になる)
★Stringは読み取り専用のクラスである
replaceなどで中身を変えても代入するまでは書き換わらない(参照先が変わらない)
StringBuilderのdeleteなどの数字はインデックス(文字数ではない)
varによる変数宣言
メソッドの引数、コンストラクタの引数、メソッド戻り型、★フィールド(メンバ変数)、catchブロックなどでは使用できない、初期値が必要
アンダースコアがある数値リテラルで8進数の0のうしろに「_」をつけることができる
例)0_777
コンパイルしないで実行する
最初のクラス名にmainメソッドがないと実行時エラーになる
同名のクラスファイルが存在すると実行時エラーになる
配列は生成した時に(new)初期化される
intは0、floatは0.0、Stringはnull、booleanはfalse、charは\u0000など
★要素数0の配列を生成できる
varの配列は生成時に型を指定する
16進数は大文字でもよい
Javaにも予約語としてgotoはあるが、使用できない
★解答するときソースと選択肢は1行ずつ丁寧に読む
★配列の宣言と初期化をおさらい
テキスト№1557
★配列のfinalは配列全体の参照は変更できないが、各要素は変更できる
論理演算子
a ^ b aとbが異なるときtrue、同じときはfalse
ビット論理演算子
| , & , ^ , ~
論理和、論理積、排他的論理和、ビットの反転
doubleからintへキャストで代入すると、小数部は切り捨て
+のように複数のオペランドを使用する演算子は型変換に注意
short hoge1 = 10;
hoge1 = hoge1 + 10;
10はint型のため、そのままでは計算できない
hoge1 = (short)(hoge1 + 10);
Boxingにおいて異なる型の暗黙の型変換は行われない
(Unboxingは変換される)
Integer fff = 10;
double ggg = fff;
if文は1文しかない場合、{}は省略できる
enum
定数をまとめて定義する
for文の式は省略できる
式1の宣言式は一つだが、カンマで複数定義はできる
到達不能コードがあるとコンパイルエラーになる
メンバ変数は自動で初期化される
オーバーロード
データ型、引数の並び、数が異なっていること
データ型が同じでも引数の並びが異なれば定義可能
戻り値の型、変数名、修飾子は関係ない
可変長引数と配列の両方があるとコンパイルエラー
オーバーロード呼び出しの優先順位
完全一致>暗黙の型変換>Boxing>可変長引数
staticイニシャライザ
static { }
mainメソッドが実行される前、またはクラスファイルがロードされる前(コンストラクタの呼び出し前)に実行される
コンストラクタのアクセス修飾子でnewできるクラスを制限できる
メソッド、参照型の引数と戻り値に注意
extendsは一つだけ
this()で自クラスの別コンストラクタを呼び出す、先頭に記述する