本ページはプロモーションが含まれています

Java入門

Java予約語一覧|全51個の意味と使い方をカテゴリ別に解説

トム

・都内自社開発企業勤務/Javaバックエンドエンジニア
/Java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎 詳細なプロフィール

Javaには51個の予約語(if・for・class・publicなど)があり、変数名やメソッド名には使えません。

この記事では全予約語をカテゴリ別の一覧表で整理し、それぞれの意味と役割をわかりやすく解説します。

「publicやstaticをおまじないのように書いている」「変数名でなぜかエラーが出た」。そんな初心者のつまずきを、この1記事で解消できます。

Javaの予約語とは?

Javaの予約語とは何かを示す図解

Javaの予約語とは、Javaの文法の中で特別な意味を持つ、あらかじめ予約された単語のことです。予約語はプログラムの骨格を作るために用意されており、私たちはそのルールに従ってコードを記述する必要があります。

予約語の基本的な意味と役割

予約語は、例えるなら日本語の「てにをは」のような助詞や、文章の構造を示す句読点のような役割を担います。

「もし~ならば」を意味するif、「~の間ずっと」を意味するwhileなど、それぞれの予約語が特定の機能を持っています。

Javaコンパイラ(プログラムを機械がわかる言葉に翻訳する機械)は、これらの予約語を目印にして文の構造を理解し、プログラムの動作を決定します。

つまり、予約語はプログラマーとコンパイラの間の「共通言語」なのです。

なぜ予約語を知っておく必要があるのか

予約語を知っておく理由は、主に2つあります。

理由

  1. 予期せぬエラーを防ぐため:予約語は特別な役割を持つ単語なので、変数名やメソッド名として使用できません。もし使おうとすると、コンパイラが「文法的にここにあるべきではない」と判断してコンパイルエラーになります。予約語を知っていれば、この種のエラーを未然に防げます。
  2. コードを正しく読み書きするため:他人のコードを読むとき、予約語を知っていれば「プログラムの構造部分」と「独自に定義された部分」を瞬時に見分けられます。コードの理解度が格段に向上し、自分でコードを書くときもスムーズに組み立てられるようになります。

Java予約語の全一覧【カテゴリ別】

Java予約語の一覧をカテゴリ別に示す図解

Javaには約50個の予約語が存在します(Java SE 17仕様書準拠)。

全てを一度に暗記する必要はありませんが、どのような種類があるのかをカテゴリ別に把握しておくと学習がスムーズに進みます。

制御構文に関する予約語(if, for, while など)

プログラムの流れをコントロールするための予約語です。条件分岐や繰り返し処理など、プログラミングの基本的なロジックを組み立てる際に使用します。

予約語意味
ifもし~ならば(条件分岐)
elseそうでなければ(条件分岐)
for指定回数の繰り返し
while条件が成り立つ間の繰り返し
dowhileとセットで使い、最低1回は実行する繰り返し
switch値に応じて処理を分岐させる
caseswitch文で使う分岐先のラベル
defaultswitch文で、どのcaseにも一致しない場合の処理。インターフェースのデフォルトメソッド定義にも使用(Java 8以降)
break繰り返し処理やswitch文を中断する
continue繰り返し処理をスキップして次の繰り返しへ進む
returnメソッドの処理を終了し、値を返す

データ型に関する予約語(int, double, boolean など)

変数や定数がどのような種類のデータ(数値、文字、真偽値など)を扱うのかを定義するための予約語です。

予約語意味
byte8ビットの整数
short16ビットの整数
int32ビットの整数
long64ビットの整数
float32ビットの浮動小数点数
double64ビットの浮動小数点数
char16ビットのUnicode文字
booleantruefalseの真偽値
voidメソッドが値を返さないことを示す

クラス・オブジェクト関連の予約語(class, interface, this など)

Javaの根幹であるオブジェクト指向プログラミングを実現するための予約語です。設計図となるクラスや、その実体であるオブジェクトを扱う際に使用します。

予約語意味
classクラス(設計図)を定義する
interfaceインターフェース(メソッドの仕様だけを定義)を定義する
enum列挙型を定義する(Java 5で追加)
extendsクラスを継承(機能を引継ぎ)する
implementsインターフェースを実装(機能の詳細を定義)する
newオブジェクトを生成する
this自分自身のオブジェクトを指す
super親クラスのオブジェクトを指す
instanceofオブジェクトが特定のクラスのものか判定する
packageクラスをまとめるフォルダのようなものを定義する
import他のパッケージのクラスを利用可能にする

アクセス修飾子とその他の修飾子(public, static, final など)

クラス、メソッド、変数などのアクセス範囲を制限したり、特別な性質を与えたりするための予約語です。

予約語意味
publicどこからでもアクセス可能
protected同じパッケージとサブクラスからアクセス可能
private同じクラス内からのみアクセス可能
staticクラスに属し、オブジェクトを生成しなくても使える
final変更不可能にする(定数など)
abstract抽象クラスや抽象メソッドを定義する
nativeJava以外の言語で実装されたメソッドを示す
strictfp浮動小数点計算の精度を厳密にする(Java 17以降は全計算がデフォルトで厳密なため効果なし)
transientシリアライズ(オブジェクトの保存)対象外にする
volatile複数スレッド間で変数の値が常に最新に保たれるようにする

例外処理やマルチスレッド関連の予約語(try, catch, synchronized など)

プログラムの実行中に発生するエラー(例外)を処理したり、複数の処理を同時に実行(マルチスレッド)したりするための予約語です。

予約語意味
try例外が発生する可能性のある処理を囲む
catch発生した例外を捕まえて処理する
finally例外の有無にかかわらず必ず実行する処理
throw意図的に例外を発生させる
throwsメソッドが例外を発生させる可能性があることを示す
assertプログラムの前提条件をチェックする(Java 1.4で追加)
synchronized複数のスレッドが同時にアクセスしないように制御する

その他、constgotoも予約語ですが、現在Javaでは使われていません。

また、truefalsenullは厳密には予約語ではなくリテラル(値そのもの)ですが、予約語と同様に変数名などには使えないため、一緒に覚えておきましょう。

なお、アンダースコア(_)はJava 9以降、単独での識別子としての使用が禁止されています。

Java 22以降では「名前のない変数」として正式なキーワードになりました。

予約語ではないが注意が必要なキーワード(var, record, sealed)

Java 10以降では、上記の予約語とは別に「文脈キーワード」と呼ばれる特殊な単語が追加されています。

これらは特定の文脈でのみ予約語として扱われ、それ以外の場所では変数名として使用できる点が通常の予約語と異なります。

キーワード導入バージョン意味
varJava 10ローカル変数の型推論。型名としては使えないが変数名としては使える
recordJava 16不変データクラスを簡潔に定義する
sealedJava 17継承できるクラスを制限する
permitsJava 17sealedとセットで、継承を許可するクラスを列挙する

なお、varは便利ですが、var result = getData();のように書くと戻り値の型がコード上から見えなくなります。

個人開発では問題になりにくいものの、チーム開発では「varを使う場面のルールを事前に決めておく」のが実務上のコツです。

たとえばvarは「予約された型名(reserved type name)」に分類されます。

int var = 10;のように変数名として使うことは可能ですが、class var {}のようにクラス名にすることはできません。

初心者のうちは「予約語と似た扱いの単語が他にもある」と認識しておけば十分です。

Java予約語の使い方と注意点

Java予約語利用時の注意点を示す図解

予約語はJavaの文法そのものであるため、私たちが使い方を定義するものではありません。決められたルールに沿って正しく配置していくことが重要です。

ここでは、特に注意すべき点について解説します。

変数名やクラス名に使えない理由

なぜ予約語を変数名などに使えないのでしょうか。それは、コンパイラが文の構造を正しく解釈できなくなるからです。

例えば、次のコードを書いたとします。

int for = 10;

プログラマーは「forという名前の整数型の変数に10を代入したい」という意図でしょう。

しかしコンパイラは、forという単語を見た瞬間に「ここから繰り返し処理が始まるはずだ」と解釈しようとします。

その後に続く= 10;という記述は、繰り返し処理の文法とは異なるため、コンパイラは混乱してエラーを出力するのです。

予約語を識別子(変数名など、プログラマーが任意で付ける名前)として使うことは、文法的な混乱を招くため固く禁じられています。

予約語は「プログラムの構造を示す標識」、識別子は「プログラマーが付けたオリジナルの名札」と考えるとわかりやすいでしょう。

標識と同じデザインの名札を付けてしまうと、どちらがどちらか分からなくなってしまうのです。

IDEで自動的にハイライトされる仕組み

IntelliJ IDEAやVisual Studio Code、Eclipseといった統合開発環境(IDE)を使っていると、予約語が自動的に色付けされて表示されることに気づくでしょう。

これはIDEの便利な機能の一つで、コードの可読性を高めるためのものです。

予約語、変数、文字列などがそれぞれ異なる色で表示されるため、どこが文法の構成要素で、どこがプログラマー独自の定義なのかが一目でわかります。

自分で付けた変数名が予約語と同じ色にハイライトされたら、予約語を使ってしまっているサインです。すぐに別の名前に変更しましょう。

よくある間違いとエラー例

初心者がやりがちな間違いは、やはり予約語を変数名に使ってしまうことです。

// 間違った例
public class MyProgram {
    public static void main(String[] args) {
        // "int"はデータ型を示す予約語なので変数名にできない
        int int = 100;

        // "class"はクラス定義の予約語なので変数名にできない
        String class = "Java入門";

        System.out.println(int);
        System.out.println(class);
    }
}

このコードをコンパイルしようとすると、IDEやコンパイラは下記のようなエラーを出力します。

error: <identifier> expected
    int int = 100;
        ^
error: not a statement
    String class = "Java入門";
           ^

<identifier> expected」は、「ここには識別子(変数名など)が来るはずなのに、違うものが来ています」という意味のエラーです。

このようなエラーが出た場合は、まず予約語を使っていないかを確認する癖をつけると良いでしょう。

また、予約語を変数名に使うミス以外にも、意味を混同しやすい予約語のペアにも注意が必要です。

  • throwthrows: throwは例外を自分で投げる動作、throwsはメソッド宣言で「この例外が出る可能性がある」と伝える宣言。末尾のsの有無で役割がまったく異なります。
  • breakcontinue: breakはループを完全に中断して抜ける、continueは今の回だけスキップして次の繰り返しへ進む。「止める」と「飛ばす」の違いです。
  • finalstatic: finalは「変更不可(定数化)」、staticは「クラスに属する(インスタンス不要)」。よくセットで使われますが、それぞれの意味は独立しています。

Java予約語と識別子の違い

予約語と識別子の違いを示す図解

予約語を学ぶと必ず出てくるのが「識別子」という概念です。この2つの違いを理解することが、Javaプログラミングの基礎を固める上で重要です。

識別子の定義

識別子とは、プログラマーがクラス、メソッド、変数などに自由につけることができる名前のことです。

例えば、MyProgrammainargs、自分で作る変数名userNamescoreなどが識別子にあたります。

識別子を付ける際には、以下のルールを守る必要があります。

  • 1文字目は英字、$(ドルマーク)、_(アンダースコア)のいずれか
  • 2文字目以降は上記に加えて数字も使用可能
  • 予約語は使用できない
  • 大文字と小文字は区別される

Java予約語のよくある質問(FAQ)

Q. Javaの予約語は全部で何個ありますか?

Java SE仕様書では51個の予約語が定義されています(constgotoを含む)。これに加えて、リテラルであるtruefalsenullの3つも識別子には使えないため、実質的に54個の単語が変数名・クラス名として使用できません。

Q. varは予約語ですか?

varは厳密には予約語ではなく「予約された型名(reserved type name)」です。int var = 10;のように変数名として使うことは可能ですが、class var {}のようにクラス名にはできません。Java 10で導入されたローカル変数の型推論に使われます。

Q. 予約語を変数名に使うとどうなりますか?

コンパイルエラーが発生します。具体的には <identifier> expected というエラーメッセージが表示されます。コンパイラが予約語を文法の構成要素として解釈しようとするため、変数名としての処理ができないことが原因です。

まとめ

この記事では、Javaの予約語の基本から一覧、注意点までを網羅的に解説しました。

最後に、膨大に見える予約語と上手に付き合っていくためのコツを紹介します。

Javaの予約語を効率的に覚えるコツ

予約語を眺めると、Javaがどんな言語として設計されたかが見えてきます。

オブジェクト指向関連(classextendsimplements等)が多い一方で、C言語由来のgotoは封印されています。

これはJavaの設計者が安全性と構造化を重視した証拠です。予約語は単なる暗記対象ではなく、言語の設計思想を映す鏡ともいえます。

約50個の予約語を全て丸暗記する必要はありません。大切なのは、コーディングをしながら自然に身につけていくことです。

  • IDEのハイライトを頼る: IDEが色を変えて教えてくれるので、常に意識しましょう。
  • エラーから学ぶ: 予約語を使ってしまってエラーが出たら、「この単語は使えないんだな」と一つずつ学んでいくのが確実です。
  • カテゴリで覚える: 「これは制御構文」「これはデータ型」のように、グループで役割を理解すると記憶に残りやすくなります。

無理に暗記しようとせず、たくさんのコードを読み書きする中で、体で覚えていくのが最も効率的な学習法です。

初心者が最低限押さえておくべき予約語

とはいえ、最初にこれだけは知っておくと学習がスムーズになる、という特に重要な予約語も存在します。

まずは以下の15個の予約語の役割を意識してみてください。

  1. public: 「公開されている」という意味
  2. class: クラス(設計図)を定義する
  3. static: オブジェクト生成なしで使える
  4. void: 戻り値がない
  5. int: 整数を扱う
  6. String: (予約語ではないが)文字列を扱うクラス
  7. if: もし~なら
  8. else: そうでなければ
  9. for: 繰り返し
  10. while: 繰り返し
  11. return: 処理を終了して値を返す
  12. new: オブジェクトを新しく作る
  13. true: 「真」を表す値
  14. false: 「偽」を表す値
  15. null: 何も参照していない状態

これらの予約語は、Javaの入門的なプログラムで頻繁に登場します。

一つひとつの意味を都度確認しながら学習を進めれば、きっとJavaの文法が面白く感じられるようになるはずです。

  • この記事を書いた人
  • 最新記事

トム

・都内自社開発企業勤務/Javaバックエンドエンジニア
/Java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎 詳細なプロフィール

-Java入門