Javaの文法
「イニシャライザ」(初期化子)はフィールドのイニシャライザと同時に実行されるコードのブロックである。
これは「ネストされたインタフェース」と呼ばれる。
クラスを宣言する際は以下の修飾子を付けることができる:
abstract – インスタンス化できない。インタフェースとabstract (抽象) クラスだけがabstract (抽象) メソッドを持つことができる。抽象クラスを継承する具象 (非abstract) サブクラスは、引き継がれた全ての抽象メソッドを、abstractでないメソッドでオーバーライドしなければならない。修飾子finalと併用することはできない。
final – サブクラスを作らせない。 finalクラスのすべてのメソッドは無条件にfinalになる。 修飾子abstractと併用することはできない。
strictfp – このクラスとそこに含まれる全てのネストクラスにおいて、全ての浮動小数点演算は厳密な浮動小数点演算動作を使用する。厳密な浮動小数点演算動作は、演算結果がプラットフォームに関わりなく同一となることを保証する。
Javaのクラス定義ブロックはセミコロン;で終わらせる必要はない点に注意。この点はC++の文法と異なる。
クラスは、一つのクラスを継承できるのに加えて、implementsキーワードを用いて一つ以上のインタフェースを実装することができる。
以下の例では、Deleteableインタフェースを実装する非abstractクラスは、引数無しで戻り型がvoidであるdeleteという名前の非抽象メソッドを定義しなければならない。そのメソッドの実装と機能は各々のクラスによって決定される。
このコンセプトにはさまざまな使い道がある。例えば:
上の配列に含まれる全てのオブジェクトはdelete()メソッドを持つことが保証されるので、deleteAll()メソッドはFredオブジェクトと他の如何なるDeleteableオブジェクトをも区別する必要がない。
Javaはケースセンシティブ (大文字小文字を区別する) である。
for文
Object.equals(Object)メソッドはそのオブジェクトともう一つのオブジェクトを比較し、二つのオブジェクトが同一かどうかをboolean型の値で返す。意味的には、このメソッドはオブジェクトの内容を比較するのに対し、関係演算子"=="はオブジェクトの参照を比較する。equalsメソッドはjava.utilパッケージにあるデータ構造クラスの多くで使われる。これらのデータ構造クラスのいくつかはObject.hashCodeメソッドにも依存している - equalsとhashCodeとの間の契約の詳細について、hashCodeメソッドを参照のこと。
(ウェブブラウザではなく) スタンドアロン仮想マシンで実行されるJavaコード
mainメソッドは以下のように定義されなければならない:
0からは、補助文字をサポートするため、charは符号無し16ビットで表現可能でありBMPの範囲内に限ればコードポイントと同値となるUTF-16符号化形式のコード単位を表現するように変更され、21ビットが必要となるコードポイントの表現にはintを使用するように変更された(JSR#204)。つまりchar型は互換性の問題からあくまで符号無し16ビットのままとされており、UTF-16符号化形式を採用したことから補助文字を扱う場合はコードポイント一つにコード単位を格納したchar値のペアが対応する。これらを適切に取り扱う便宜として、StringクラスやプリミティブラッパークラスであるCharacterクラスなどの各種メソッドが利用できる。
C/C++や類似の言語と異なり、Javaではfalseの代わりに0(ゼロ)またはnullと書くことはできない
同様に、0でない値を書いてtrueの代わりとすることはできない
ブール型をブール型でない基本型へキャストすることとその逆はできない
メタアノテーション@Targetには以下のElementType列挙型を設定することができる。これは配列を使って
と複数指定することができる。ただし、同じ値を { ... } 内で複数使用するとエラーとなる。これによって型を指定することで、そのアノテーションが、どの型に対して使うことができるのかを指定できる。