パッケージ宣言・インポート宣言・クラス/インターフェース宣言の順に記述
それぞれ複数書くことが許される
予約語は使用できない assertは別扱い
英字・$・_・数字を使用できるが、数字を先頭にはできない
大文字と小文字は区別される
public / protected / / private
public / abstract / final
フィールド・コンストラクタ・メソッド・静的初期化子が定義される
finalと同時に指定できない
インターフェースを実装するためには、implements
抽象クラスとサブインターフェースを実装するためには、extends
インターフェースは複数実装することができる
抽象メソッドはデフォルトでpublicとなり、フィールドはpublic final staticとなる
finalのついたフィールドは、定数となり再定義ができない
finalのついたメソッドは、継承によりオーバーライドできない
finalのついたクラスは、サブクラスが作れない
ただし、参照型変数の場合、変数の指すオブジェクトのデータ自体には変更を加えれる
staticのつかないフィールドは、インスタンス変数と呼ばれオブジェクト毎に関連付けられる
staticのつくフィールドは、クラス変数と呼ばれ参照されるクラス毎に関連付けられる
this / superはコンストラクタ本体の先頭に書く
superの呼び出しを明示指定しないと、先頭にsuper();が挿入される
同名で同じシグネチャの異なるメソッドを一つのクラスに宣言できる
同じシグネチャで戻り値が異なるメソッドは定義できない
サブクラスにおいて、スーパークラスと同名で同じシグネチャ・同じ戻り値のメソッドを再定義すること
スーパークラスの制限より緩和された修飾子をつけることができない
スーパークラスの変数で全ての全てのサブクラスのオブジェクトを扱えること
public / abstract
final / static / transient (non-serializable) / volatile (non-tuned up)
abstract / final / native (depends on the platform code) / static / synchronized
スコープを外れた一時変数は自動的に対象になる
System.gc(); Runtime.getRuntime().gc(); でガベージコレクションを促すことができる
finalizeメソッドは、メモリ以外のリソースの回収を行う
例外をスローする手段の一つであるtry構造において、例外の有無・return文の有無に関わらず実行される文を列挙
Arithmetic / ArrayStore / ClassCast / IndexOutOfBounds / NullPointer などは非検査例外であるため、コンパイルエラーがなくスローする必要もない
publicメソッド内の引数チェック・本来評価すべきboolean式の使用(無効化の場合への対処)・エンドユーザの入力処理
メソッド内で記述したインタークラス(非static)は、メソッド内のfinalなフィールド・finalな引数と外部の全てのフィールドにアクセス可能
一つのプログラム中の複数の実行経路
startメソッドにより、runメソッド内に記述された内容が実行runメソッドを直接実行してもスレッド化されない
setPriorityメソッドで優先度を指定する MIN / MAX / NORM_PRIORITY値で指定
優先度の解釈はシステムに依存しており、予測できない
スレッドスケジューラがスレッドの実行を制御
スレッドスケジューラの機能は環境に依存
スレッドの状態には、実行中・実行可能・実行不可能・デッド(再実行不可能)の4つがある
yield / sleep は static メソッド join は、非static メソッドである
waitメソッドは、synchronizedなメソッドやブロック内で実行できる
スレッド内にstaticな変数がある場合、データの不整合がおきうる
synchronizedメソッドである場合や、waitしている状態でnotify / notifyAllが実行されたときにロック探索状態となる