Javaには51個の予約語(if・for・class・publicなど)があり、変数名やメソッド名には使えません。
この記事では全予約語をカテゴリ別の一覧表で整理し、それぞれの意味と役割をわかりやすく解説します。
「publicやstaticをおまじないのように書いている」「変数名でなぜかエラーが出た」。そんな初心者のつまずきを、この1記事で解消できます。
Javaの予約語とは?

Javaの予約語とは、Javaの文法の中で特別な意味を持つ、あらかじめ予約された単語のことです。予約語はプログラムの骨格を作るために用意されており、私たちはそのルールに従ってコードを記述する必要があります。
予約語の基本的な意味と役割
予約語は、例えるなら日本語の「てにをは」のような助詞や、文章の構造を示す句読点のような役割を担います。
「もし~ならば」を意味するif、「~の間ずっと」を意味するwhileなど、それぞれの予約語が特定の機能を持っています。
Javaコンパイラ(プログラムを機械がわかる言葉に翻訳する機械)は、これらの予約語を目印にして文の構造を理解し、プログラムの動作を決定します。
つまり、予約語はプログラマーとコンパイラの間の「共通言語」なのです。
なぜ予約語を知っておく必要があるのか
予約語を知っておく理由は、主に2つあります。
Java予約語の全一覧【カテゴリ別】

Javaには約50個の予約語が存在します(Java SE 17仕様書準拠)。
全てを一度に暗記する必要はありませんが、どのような種類があるのかをカテゴリ別に把握しておくと学習がスムーズに進みます。
制御構文に関する予約語(if, for, while など)
プログラムの流れをコントロールするための予約語です。条件分岐や繰り返し処理など、プログラミングの基本的なロジックを組み立てる際に使用します。
| 予約語 | 意味 |
if | もし~ならば(条件分岐) |
else | そうでなければ(条件分岐) |
for | 指定回数の繰り返し |
while | 条件が成り立つ間の繰り返し |
do | whileとセットで使い、最低1回は実行する繰り返し |
switch | 値に応じて処理を分岐させる |
case | switch文で使う分岐先のラベル |
default | switch文で、どのcaseにも一致しない場合の処理。インターフェースのデフォルトメソッド定義にも使用(Java 8以降) |
break | 繰り返し処理やswitch文を中断する |
continue | 繰り返し処理をスキップして次の繰り返しへ進む |
return | メソッドの処理を終了し、値を返す |
データ型に関する予約語(int, double, boolean など)
変数や定数がどのような種類のデータ(数値、文字、真偽値など)を扱うのかを定義するための予約語です。
| 予約語 | 意味 |
byte | 8ビットの整数 |
short | 16ビットの整数 |
int | 32ビットの整数 |
long | 64ビットの整数 |
float | 32ビットの浮動小数点数 |
double | 64ビットの浮動小数点数 |
char | 16ビットのUnicode文字 |
boolean | trueかfalseの真偽値 |
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 | 抽象クラスや抽象メソッドを定義する |
native | Java以外の言語で実装されたメソッドを示す |
strictfp | 浮動小数点計算の精度を厳密にする(Java 17以降は全計算がデフォルトで厳密なため効果なし) |
transient | シリアライズ(オブジェクトの保存)対象外にする |
volatile | 複数スレッド間で変数の値が常に最新に保たれるようにする |
例外処理やマルチスレッド関連の予約語(try, catch, synchronized など)
プログラムの実行中に発生するエラー(例外)を処理したり、複数の処理を同時に実行(マルチスレッド)したりするための予約語です。
| 予約語 | 意味 |
try | 例外が発生する可能性のある処理を囲む |
catch | 発生した例外を捕まえて処理する |
finally | 例外の有無にかかわらず必ず実行する処理 |
throw | 意図的に例外を発生させる |
throws | メソッドが例外を発生させる可能性があることを示す |
assert | プログラムの前提条件をチェックする(Java 1.4で追加) |
synchronized | 複数のスレッドが同時にアクセスしないように制御する |
その他、constとgotoも予約語ですが、現在Javaでは使われていません。
また、true、false、nullは厳密には予約語ではなくリテラル(値そのもの)ですが、予約語と同様に変数名などには使えないため、一緒に覚えておきましょう。
なお、アンダースコア(_)はJava 9以降、単独での識別子としての使用が禁止されています。
Java 22以降では「名前のない変数」として正式なキーワードになりました。
予約語ではないが注意が必要なキーワード(var, record, sealed)
Java 10以降では、上記の予約語とは別に「文脈キーワード」と呼ばれる特殊な単語が追加されています。
これらは特定の文脈でのみ予約語として扱われ、それ以外の場所では変数名として使用できる点が通常の予約語と異なります。
| キーワード | 導入バージョン | 意味 |
var | Java 10 | ローカル変数の型推論。型名としては使えないが変数名としては使える |
record | Java 16 | 不変データクラスを簡潔に定義する |
sealed | Java 17 | 継承できるクラスを制限する |
permits | Java 17 | sealedとセットで、継承を許可するクラスを列挙する |
なお、varは便利ですが、var result = getData();のように書くと戻り値の型がコード上から見えなくなります。
個人開発では問題になりにくいものの、チーム開発では「varを使う場面のルールを事前に決めておく」のが実務上のコツです。
たとえばvarは「予約された型名(reserved type name)」に分類されます。
int var = 10;のように変数名として使うことは可能ですが、class var {}のようにクラス名にすることはできません。
初心者のうちは「予約語と似た扱いの単語が他にもある」と認識しておけば十分です。
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」は、「ここには識別子(変数名など)が来るはずなのに、違うものが来ています」という意味のエラーです。
このようなエラーが出た場合は、まず予約語を使っていないかを確認する癖をつけると良いでしょう。
また、予約語を変数名に使うミス以外にも、意味を混同しやすい予約語のペアにも注意が必要です。
throwとthrows:throwは例外を自分で投げる動作、throwsはメソッド宣言で「この例外が出る可能性がある」と伝える宣言。末尾のsの有無で役割がまったく異なります。breakとcontinue:breakはループを完全に中断して抜ける、continueは今の回だけスキップして次の繰り返しへ進む。「止める」と「飛ばす」の違いです。finalとstatic:finalは「変更不可(定数化)」、staticは「クラスに属する(インスタンス不要)」。よくセットで使われますが、それぞれの意味は独立しています。
Java予約語と識別子の違い

予約語を学ぶと必ず出てくるのが「識別子」という概念です。この2つの違いを理解することが、Javaプログラミングの基礎を固める上で重要です。
識別子の定義
識別子とは、プログラマーがクラス、メソッド、変数などに自由につけることができる名前のことです。
例えば、MyProgramやmain、args、自分で作る変数名userNameやscoreなどが識別子にあたります。
識別子を付ける際には、以下のルールを守る必要があります。
- 1文字目は英字、
$(ドルマーク)、_(アンダースコア)のいずれか - 2文字目以降は上記に加えて数字も使用可能
- 予約語は使用できない
- 大文字と小文字は区別される
Java予約語のよくある質問(FAQ)
Q. Javaの予約語は全部で何個ありますか?
Java SE仕様書では51個の予約語が定義されています(constとgotoを含む)。これに加えて、リテラルであるtrue・false・nullの3つも識別子には使えないため、実質的に54個の単語が変数名・クラス名として使用できません。
Q. varは予約語ですか?
varは厳密には予約語ではなく「予約された型名(reserved type name)」です。int var = 10;のように変数名として使うことは可能ですが、class var {}のようにクラス名にはできません。Java 10で導入されたローカル変数の型推論に使われます。
Q. 予約語を変数名に使うとどうなりますか?
コンパイルエラーが発生します。具体的には <identifier> expected というエラーメッセージが表示されます。コンパイラが予約語を文法の構成要素として解釈しようとするため、変数名としての処理ができないことが原因です。
まとめ
この記事では、Javaの予約語の基本から一覧、注意点までを網羅的に解説しました。
最後に、膨大に見える予約語と上手に付き合っていくためのコツを紹介します。
Javaの予約語を効率的に覚えるコツ
予約語を眺めると、Javaがどんな言語として設計されたかが見えてきます。
オブジェクト指向関連(class、extends、implements等)が多い一方で、C言語由来のgotoは封印されています。
これはJavaの設計者が安全性と構造化を重視した証拠です。予約語は単なる暗記対象ではなく、言語の設計思想を映す鏡ともいえます。
約50個の予約語を全て丸暗記する必要はありません。大切なのは、コーディングをしながら自然に身につけていくことです。
- IDEのハイライトを頼る: IDEが色を変えて教えてくれるので、常に意識しましょう。
- エラーから学ぶ: 予約語を使ってしまってエラーが出たら、「この単語は使えないんだな」と一つずつ学んでいくのが確実です。
- カテゴリで覚える: 「これは制御構文」「これはデータ型」のように、グループで役割を理解すると記憶に残りやすくなります。
無理に暗記しようとせず、たくさんのコードを読み書きする中で、体で覚えていくのが最も効率的な学習法です。
初心者が最低限押さえておくべき予約語
とはいえ、最初にこれだけは知っておくと学習がスムーズになる、という特に重要な予約語も存在します。
まずは以下の15個の予約語の役割を意識してみてください。
public: 「公開されている」という意味class: クラス(設計図)を定義するstatic: オブジェクト生成なしで使えるvoid: 戻り値がないint: 整数を扱うString: (予約語ではないが)文字列を扱うクラスif: もし~ならelse: そうでなければfor: 繰り返しwhile: 繰り返しreturn: 処理を終了して値を返すnew: オブジェクトを新しく作るtrue: 「真」を表す値false: 「偽」を表す値null: 何も参照していない状態
これらの予約語は、Javaの入門的なプログラムで頻繁に登場します。
一つひとつの意味を都度確認しながら学習を進めれば、きっとJavaの文法が面白く感じられるようになるはずです。


