キーワード (Java)

この項目ではJavaにおけるキーワード（予約語の記事を参照）に関して説明する。全部で50個ある。
この項目は、プログラムの細かい説明には立ち入らず、他の言語と比較できるような説明を目的としている。
プリミティブ型.
型名.
プリミティブ型の名前である。C言語およびC++と共通するものが多い。ただし内部表現は処理系依存ではなく、言語仕様によって厳密に定められている。
値.
以下はキーワードと同様に扱われるが、定義では論理値リテラル、またはnullリテラルというリテラルである。
制御構造.
C言語およびC++と共通のキーワードを使用している。
クラス、パッケージ.
例:
SampleClass s = new SampleClass();
修飾子.
クラス、メンバの宣言に付けられる修飾子である。
例1:
public class SampleClass {
 final int constantValue = 5;
例2:
public class SampleClass {
 final int constantValue; // 初期化なし
 // コンストラクタ
 public SampleClass() {
 constantValue = 5; // 1回だけ代入できる。
記述例:
class SampleClass {
 static String shared = "shared";
 static final String STR = "constant";
例:
class Sample1 {
 // static なメソッド
class Sample2 {
 void proc() {
 Sample1.method(); // インスタンスを生成せず直接実行できる。
例:
class StaticInitSampleClass {
 private static final List<String> list;
 static {
 final List<String> tempList = new ArrayList<>();
 tempList.add("Hello,");
 tempList.add("World.");
 StaticInitSampleClass.list = Collections.unmodifiableList(tempList);
内部クラス
例:
class OuterClass {
 static int outerStaticField = 0;
 int outerField = 0;
 class InnerClass {
 void setOuterField(int value) {
 outerField = value; // 暗黙参照可能。
 outerStaticField = value; // OK。
 static class StaticClass {
 void setOuterField(int value) {
 //outerField = value; // コンパイルエラー。
 outerStaticField = value; // OK。
 public OuterClass() {
 new InnerClass().setOuterField(100);
 new StaticClass().setOuterField(-100);
 public static void test() {
 final OuterClass outer = new OuterClass();
 System.out.println("OuterField = " + outer.outerField);
 System.out.println("OuterStaticField = " + outerStaticField);
クラスまたはメソッドに付けられる修飾子である。finalと併用することはできない。Javaでは、実装されないメソッドがあるクラスを作成することができる。抽象クラス自身のインスタンスを作成することはできない。似たものとしてインタフェースがあるが、abstract class は以下の点においてインタフェースと異なる。
abstract class はそのままではインスタンス化できず、不足しているメソッドを実装した派生クラスを用意して使用する。
記述例:
public abstract class Sample {
 // 実装があるメソッド
 public void method1() {
 // 実装がないメソッド
 public abstract void method2();
記述例1:
記述例2:
public void method() {
 synchronized(this) { // 自クラスのインスタンスに対して排他制御
 // 排他制御されるブロック
 ...
記述例3:
public void method(Object obj) {
 synchronized(obj) { // Object obj に対して排他制御
 // 排他制御されるブロック
 ...
例:
public class SampleClass {
 volatile int syncSample;
例外処理.
例外処理はC言語にはない。Javaでは、C++およびC#とほぼ共通の構文およびキーワードが使用されている。ただしfinallyはC++には存在せず、throwsはC#には存在しない。
以下はを使った記述例である。
public void method() throws Exception { // メソッドが例外をスローすることを宣言
 try {
 if (エラー条件)
 throw new IOException(); // 例外を発生させる。
 // (1) 正常終了
 // このtryブロックにはreturn文を記述することもできる。
 // ただし、finallyブロックにすでにreturn文があるときは、ここにreturn文を書いてもfinallyブロックのreturnが優先される。
 catch (IOException e) { // IOException は Java の例外クラスの1つ
 // (2) 例外処理
 // このcatchブロックにはreturn文を記述することもできる。
 // ただし、finallyブロックにすでにreturn文があるときは、ここにreturn文を書いてもfinallyブロックのreturnが優先される。
 catch (Exception e) { // IOException よりも上位（親）の例外クラス
 // (3) 例外をさらに外のブロックにスローする。
 throw e;
 finally {
 // (1), (2), (3) どの場合でもこのブロックは必ず実行される。
 // ここにreturn文があるときはtry/catchブロックにreturn文があろうともこちらのreturn文が優先される。
追加されたキーワード.
J2SE 1.4でassertが追加され、J2SE 5.0でenumが追加された。Java 9では制限されたキーワード (restricted keyword) として、codice_22, codice_23, codice_24, codice_25, codice_26, codice_27, codice_28, codice_29, codice_30, codice_31が追加された。また、Java 9では単一のアンダースコアcodice_32が予約済みのキーワードとなり、識別子として使用できなくなった。
Java 10ではcodice_33による型推論が追加されたが、これはキーワードではなく、予約された型名 (reserved type name) によって実現されている。
その他.
浮動小数点演算.
その他のキーワードとして、浮動小数点演算の移植性を高めるstrictfpがある。浮動小数点の演算では一般に全く同じ結果は期待できないものではあるが、x87などハードウェアによっては、途中の値においてより高い精度や、より広い値の範囲で演算が行われるために、最終結果が他のプラットフォームと一致しない場合があり、特にIEEE 754を前提として予想される結果から外れることが問題である。
strictfpを指定すると、途中結果についても全てIEEE 754の倍精度を強制し、相異なるプラットフォーム同士の間でも演算結果が一致することを保証するとされている（仕様では FP-strict という用語を使っている）。Java VMの実装で、これを正しく実現するには、x86系CPUを使った計算機の場合、x87を避けてSSE2で計算するか、それができない場合は特殊なテクニックが必要である。
なお、同様に移植性のある結果を保証するというクラスがあるが、そちらはFDLIBMというSun製のライブラリと同じ結果を保証するとされている。
未使用.
const、gotoがキーワードとして予約されているが、Javaでは使用できない。使用するとコンパイル時に構文エラーになる。