Javaの文法
アクセス修飾子に加えて、データフィールドは以下の修飾子によって宣言される:
final – このフィールドの中身は変更できない。ただ一度のみ値を設定(初期化)できる。イニシャライザ (初期化子) がないfinalフィールドを「ブランクfinal」フィールドと呼ぶ。staticなブランクfinalフィールドは最終的にスタティックイニシャライザによって初期化されなければならない。staticでないブランクfinalフィールドはコンストラクタの実行中に必ず初期化されなければならない。volatileにはなれない。
static – クラスのインスタンスではなくクラスに属する。
transient – オブジェクトの中でも永続的 (persistent) にできないフィールドである。このフィールドの中身を待避または復元してはならないことをコンパイラに知らせる。
volatile – そのフィールドが他スレッドによって非同期にアクセスされる可能性があることをコンパイラに知らせる。finalにはなれない。
Object.finalize()メソッドはガベージコレクタがオブジェクトのメモリを解放する前に必ず一度だけ呼び出される。オブジェクトが消滅する前に実行しなければならない何らかの後処理がある場合、各クラスはfinalizeをオーバーライドすることができる。とはいえほとんどのオブジェクトはfinalizeをわざわざオーバーライドする必要はない。
finalizeメソッドがいつ呼ばれるかは保証されない。複数のオブジェクトのfinalizeがどのような順番で呼ばれるかも不定である。もしJVMがガベージコレクションを実行せずに終了するならば、OSがオブジェクトを解放する可能性があり、その場合finalizeメソッドは呼ばれない。
finalizeメソッドは、他のクラスから呼ばれるのを防ぐために、常にprotectedとして宣言されるべきである。
switch文
expr 値の型はbyte/short/int/charあるいはそれらのプリミティブラッパークラスでなければならない。 J2SE 5.0以降では列挙型 (Enumのサブクラス) を、JavaSE 7以降ではString型を使用することもできる。caseラベルの値にnullは使用できない。
各々のcaseラベルの値はユニークなリテラル、あるいはコンパイル時に値が定まる定数式 (constant expression) でなければならず、変数を書くことはできない。
コンストラクタはオブジェクトが割り当てられた後すぐに呼び出され、オブジェクトの初期処理を行う。コンストラクタは典型的にはnewキーワードを使用して呼び出されるが、リフレクションを使用して呼ぶこともできる。リフレクション機能はjava.lang.reflectパッケージより提供される。
コンストラクタを宣言する際に使える修飾子はアクセス修飾子のみである。
可能ならば、オブジェクトはひとたびコンストラクタを呼ばれた以後は直ちに有効かつ有意味なオブジェクトとなるべきである。分割された複数の初期化用メソッドを使わなければ初期処理が完了しないというような設計は好ましくない。
慣習として、引数としてそのオブジェクト自身の型を受け取ってデータメンバを複写するようなコンストラクタを「コピーコンストラクタ」と呼ぶ。
コンストラクタが明示的に定義されていない場合、コンパイラは暗黙のうちに内容が空で引数を取らないデフォルトのコンストラクタを生成する。
コンストラクタはオーバーロードできる。
コンストラクタ内の最初の文は親クラスのコンストラクタ:super(...);または同じクラス内の別のコンストラクタ:this(...);を呼び出せる。
もし、super(...) または this(...)に対する明示的な呼び出しがないならば、コンストラクタ本体が実行される前に、親クラスのデフォルトコンストラクタsuper();が呼ばれる。
プリミティブラッパークラス
Byte
Short
Integer
Long
Float
Double
Boolean
Character
@Deprecated – 対象となるクラスやメソッドが非推奨であることを情報として付加する。
@Override – そのメソッドがスーパークラスのメソッドをオーバーライドしていることを示す。
@SuppressWarnings – 引数で指定した特定の警告メッセージをJavaコンパイラに与えず無視する。
@Target – 定義したいアノテーションがどこに適用されるべきかを指し示すメタアノテーション。
@Retention – アノテーションの配置方法を設定するメタアノテーション。
メタアノテーションを使ってアノテーションを定義するには、以下のように記述する。
このとき、@Retentionは、新たにアノテーション NewAnnotation を作るとき、このアノテーション情報はソースコードのみにしか保存されないことを意味する。@Targetはこのアノテーションをどの型に使うことができるかを指定している。この場合、ANNOTATION_TYPE と METHOD を指定しているのでこのアノテーションはアノテーション型とメソッドにしか使うことができない。つまり、この NewAnnotation もまた、メソッドだけでなくアノテーションにも保存できるため、メタアノテーションとしても使えることを示している。