Javaには51個の予約語(if・for・class・publicなど)があり、変数名やメソッド名には使えません。
この記事では全予約語をカテゴリ別の一覧表で整理し、それぞれの意味と役割をわかりやすく解説します。
「publicやstaticをおまじないのように書いている」「変数名でなぜかエラーが出た」。そんな初心者のつまずきを、この1記事で解消できます。
Javaの予約語とは?
Javaの予約語とは、Javaの文法の中で特別な意味を持つ、あらかじめ予約された単語のことです。予約語はプログラムの骨格を作るために用意されており、私たちはそのルールに従ってコードを記述する必要があります。
予約語の基本的な意味と役割
予約語は、例えるなら日本語の「てにをは」のような助詞や、文章の構造を示す句読点のような役割を担います。
「もし~ならば」を意味するif、「~の間ずっと」を意味するwhileなど、それぞれの予約語が特定の機能を持っています。
Javaコンパイラ(プログラムを機械がわかる言葉に翻訳する機械)は、これらの予約語を目印にして文の構造を理解し、プログラムの動作を決定します。
つまり、予約語はプログラマーとコンパイラの間の「共通言語」なのです。
なぜ予約語を知っておく必要があるのか
予約語を知っておく理由は、主に2つあります。
理由
- 予期せぬエラーを防ぐため:予約語は特別な役割を持つ単語なので、変数名やメソッド名として使用できません。もし使おうとすると、コンパイラが「文法的にここにあるべきではない」と判断してコンパイルエラーになります。予約語を知っていれば、この種のエラーを未然に防げます。
- コードを正しく読み書きするため:他人のコードを読むとき、予約語を知っていれば「プログラムの構造部分」と「独自に定義された部分」を瞬時に見分けられます。コードの理解度が格段に向上し、自分でコードを書くときもスムーズに組み立てられるようになります。
Java予約語の全一覧【カテゴリ別】
Javaには51個の予約語が存在します(const・goto・_を含む。Java SE 17仕様書準拠)。
全てを一度に暗記する必要はありませんが、どのような種類があるのかをカテゴリ別に把握しておくと学習がスムーズに進みます。
制御構文に関する予約語(if, for, while など)
プログラムの流れをコントロールするための予約語です。条件分岐や繰り返し処理など、プログラミングの基本的なロジックを組み立てる際に使用します。
データ型に関する予約語(int, double, boolean など)
変数や定数がどのような種類のデータ(数値、文字、真偽値など)を扱うのかを定義するための予約語です。
クラス・オブジェクト関連の予約語(class, interface, this など)
Javaの根幹であるオブジェクト指向プログラミングを実現するための予約語です。設計図となるクラスや、その実体であるオブジェクトを扱う際に使用します。
アクセス修飾子とその他の修飾子(public, static, final など)
クラス、メソッド、変数などのアクセス範囲を制限したり、特別な性質を与えたりするための予約語です。
例外処理やマルチスレッド関連の予約語(try, catch, synchronized など)
プログラムの実行中に発生するエラー(例外)を処理したり、複数の処理を同時に実行(マルチスレッド)したりするための予約語です。
その他、constとgotoも予約語ですが、現在Javaでは使われていません。
また、true、false、nullは厳密には予約語ではなくリテラル(値そのもの)ですが、予約語と同様に変数名などには使えないため、一緒に覚えておきましょう。
なお、アンダースコア(_)はJava 9以降、単独での識別子としての使用が禁止されています。
Java 22以降は、使わない変数やパターンを示す「名前のない変数」として_を書けるようになりました(JEP 456)。それ以外の名前としては、引き続き使えません。
予約語ではないが注意が必要なキーワード(var, record, sealed)
Java 10以降では、上記の予約語とは別に「文脈キーワード」と呼ばれる特殊な単語が追加されています。
これらは特定の文脈でのみ予約語として扱われ、それ以外の場所では変数名として使用できる点が通常の予約語と異なります。
なお、varは便利ですが、var result = getData();のように書くと戻り値の型がコード上から見えなくなります。
個人開発では問題になりにくいものの、チーム開発では「varを使う場面のルールを事前に決めておく」のが実務上のコツです。
たとえばvarは「予約された型名(reserved type name)」に分類されます。
int var = 10;のように変数名として使うことは可能ですが、class var {}のようにクラス名にすることはできません。
初心者のうちは「予約語と似た扱いの単語が他にもある」と認識しておけば十分です。
Java予約語の使い方と注意点
予約語はJavaの文法そのものであるため、私たちが使い方を定義するものではありません。決められたルールに沿って正しく配置していくことが重要です。
変数名やクラス名に使えない理由
なぜ予約語を変数名などに使えないのでしょうか。それは、コンパイラが文の構造を正しく解釈できなくなるからです。
例えば、次のコードを書いたとします。
int for = 10;
プログラマーは「forという名前の整数型の変数に10を代入したい」という意図でしょう。
しかしコンパイラは、forという単語を見た瞬間に「ここから繰り返し処理が始まるはずだ」と解釈しようとします。
その後に続く= 10;という記述は、繰り返し処理の文法とは異なるため、コンパイラは混乱してエラーを出力するのです。
予約語を識別子(変数名など、プログラマーが任意で付ける名前)として使うことは、文法的な混乱を招くため固く禁じられています。
予約語は「プログラムの構造を示す標識」、識別子は「プログラマーが付けたオリジナルの名札」と考えるとわかりやすいでしょう。
標識と同じデザインの名札を付けてしまうと、どちらがどちらか分からなくなってしまうのです。
int score = 10;int for = 10;int型を表す予約語int型を表す予約語scoreプログラマーが付けた名前(識別子)for 予約語!予約語なので「繰り返しが始まる」と解釈= 10;文法どおり= 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);
}
}
このコードを javac(JDK 23)でコンパイルすると、下記のようなエラーが出ます(10件のうち抜粋)。
MyProgram.java:3: error: not a statement
int int = 100;
^
MyProgram.java:3: error: ';' expected
int int = 100;
^
(中略)
MyProgram.java:4: error: <identifier> expected
String class = "Java入門";
^
(中略)
10 errors
予約語を変数名にすると、コンパイラは予約語を文法の一部として読もうとします。そのため、1つの間違いから「not a statement」「';' expected」「<identifier> expected」(ここには識別子が来るはずなのに違うものが来ている)のような、原因から離れた見た目のエラーが連鎖して出ます。エラーメッセージはJDKのバージョンやIDEで変わります。
このようなエラーが出た場合は、まず予約語を使っていないかを確認する癖をつけると良いでしょう。
また、予約語を変数名に使うミス以外にも、意味を混同しやすい予約語のペアにも注意が必要です。
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. 予約語を変数名に使うとどうなりますか?
コンパイルエラーが発生します。javacでは not a statement、';' expected、<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の文法が面白く感じられるようになるはずです。
| REV. | DATE | 内容 |
|---|---|---|
| 6 | 2026-10-15 | 図解を描き直し(図面のデザインにそろえた) |
| 5 | 2026-10-14 | まとめの言い回しを見直し。雰囲気だけの挿絵を外した |
| 4 | 2026-10-06 | 記載内容の事実確認と修正 |
| 3 | 2026-09-05 | 2026年9月時点の情報で全体を見直し |
| … ほか1回の改訂 | ||
| 1 | 2025-10-01 | 初版 |





