識別子
日本語 | 識別子 |
英語 | identifier |
ふりがな | しきべつし |
フリガナ | シキベツシ |
変数名、フィールド名、メソッド名、クラス名のこと。
プログラマーがプログラム内でローカル変数、フィールド、メソッド、クラスに付ける名前。その名の通り、これらを「識別」するための単語。
以下の単語は識別子として使用できない。
・すでに同名の識別子が使用されており重複する
・予約語と完全に一致している(例:int、while)
・演算子や分割子を含んでいる(例:va-lue、va{lue})
・単語が数字から始まる(例:80percent、0.5percent)
識別子が重複する場合でも、用法が異なる場合には使用可能。たとえば、ローカル変数の名前をクラス名、フィールド名、メソッド名と同じにしても問題ない。ただし、ローカル変数と引数は、スコープが同じ場合には重複とみなされる。また、クラス名と同じ名前のメソッドをそのクラスに作るとコンストラクタとみなされる。
スコープやパッケージが異なる場合には、別の識別子とみなされるため重複が可能。
識別子は大文字・小文字を区別するため、同じアルファベットでも大文字小文字が異なれば別の識別子とみなされる。
識別子には半角英数字と「$」「_」を使用することができる。
ただし、識別子の先頭の文字が数字の場合、整数リテラルもしくは浮動小数点リテラルと判断されてしまうため使用できない。
ちなみに全角文字も使用できるため、実際には「半角英数字」というのは誤りだが、識別子に全角文字を使用するのはやめた方がいいだろう。詳しくは「全角」の項目を参照。
プログラマーがプログラム内でローカル変数、フィールド、メソッド、クラスに付ける名前。その名の通り、これらを「識別」するための単語。
以下の単語は識別子として使用できない。
・すでに同名の識別子が使用されており重複する
・予約語と完全に一致している(例:int、while)
・演算子や分割子を含んでいる(例:va-lue、va{lue})
・単語が数字から始まる(例:80percent、0.5percent)
識別子が重複する場合でも、用法が異なる場合には使用可能。たとえば、ローカル変数の名前をクラス名、フィールド名、メソッド名と同じにしても問題ない。ただし、ローカル変数と引数は、スコープが同じ場合には重複とみなされる。また、クラス名と同じ名前のメソッドをそのクラスに作るとコンストラクタとみなされる。
スコープやパッケージが異なる場合には、別の識別子とみなされるため重複が可能。
識別子は大文字・小文字を区別するため、同じアルファベットでも大文字小文字が異なれば別の識別子とみなされる。
識別子には半角英数字と「$」「_」を使用することができる。
ただし、識別子の先頭の文字が数字の場合、整数リテラルもしくは浮動小数点リテラルと判断されてしまうため使用できない。
ちなみに全角文字も使用できるため、実際には「半角英数字」というのは誤りだが、識別子に全角文字を使用するのはやめた方がいいだろう。詳しくは「全角」の項目を参照。
参考サイト
- (参考サイトはありません)
// Sample.java
// 識別子「Sample」の例。クラス名です。
// ↓
public class Sample
{
// 識別子「data」の例。フィールド名です。
// ↓
private int data = 0;
// 識別子「main」の例。メソッド名です。
// ↓ 識別子「args」の例。引数名です。
// ↓ ↓
public static void main( String[] args )
{
// 識別子「i」の例。ローカル変数名です。
// ↓
int i = 100;
// 以上のように、識別子とはクラス、フィールド、
// メソッド、変数(ローカル変数、引数)の「名前」です。
// 識別子は、その名の通り「識別するための単語」なので、
// 重複は許されません。
// ※コンパイルエラーの例
// int i = 200;
// ※エラーメッセージ
// トークン "=" に構文エラーがあります。
// 重複ローカル変数 i
// ※コンパイルエラーの例ここまで
// ただし、スコープやパッケージが異なれば大丈夫。
// たとえばSampleクラスは、パッケージが異なればいくらでも
// 存在して構いません。
// 識別子は、大文字小文字を区別します。
// ※コンパイルエラーの例
// I = 300;
// ※エラーメッセージ
// I を解決できません。
// ※コンパイルエラーの例ここまで
// なので、ここでIという名前の変数を宣言しても
// 重複しません。
int I = 300;
// 識別子は、クラス、変数、フィールド、メソッドでは
// 区別されます。
int Sample = 400; // クラス名と同じ。
int data = 400; // フィールド名と同じ。
int main = 400; // メソッド名と同じ。
// ただ、逆に言えばフィールドと同じ名前のローカル変数が
// 作れてしまうということなので注意すること。
// また、ローカル変数と引数は重複できません。
// ※コンパイルエラーの例
// int args = 400;
// ※エラーメッセージ
// トークン "=" に構文エラーがあります。
// 重複ローカル変数 args
// ※コンパイルエラーの例ここまで
// 識別子は、予約語と完全に一致してはいけません。
// ※コンパイルエラーの例
// int while = 500;
// ※エラーメッセージ
// キーワード "while" に構文エラーがあります。
// 正しくは "Identifier" です。
// ※コンパイルエラーの例ここまで
// このエラーメッセージはつまり、「ここには識別子
// (Identifier)が来るはずなのに予約語があるよ」
// と言っているわけです。
// 完全に一致していなければ、予約語を含んでいても構いません。
int whilE = 600;
int whil = 600;
int whileeeee = 600;
// 識別子は、演算子や分割子を含んではいけません。
// ※コンパイルエラーの例
// int va-lue = 700;
// ※エラーメッセージ
// トークン "-" に構文エラーがあります。
// 正しくは ";" です。
// ※コンパイルエラーの例ここまで
// 「$」と「_」は、記号っぽいですが、演算子や分割子
// ではないので識別子に使用することができます。
int $ = 700;
int _ = 700;
// 識別子は、数字から始まってはいけません。
// 整数リテラルや浮動小数点リテラルと見なされてしまうからです。
// ※コンパイルエラーの例
// int 80percent = 80;
// ※エラーメッセージ
// トークン "80" に構文エラーがあります。
// 正しくは "Identifier" です。
// ※コンパイルエラーの例ここまで
// 数字から始まらなければ、識別子に数字を用いても
// 構いません。
int percent80 = 80;
// 実は識別子には全角文字も使用できます。
// でも使わない方がいいでしょう。
int あああ = 900;
System.out.println( あああ );
// 900
}
}
// 識別子「Sample」の例。クラス名です。
// ↓
public class Sample
{
// 識別子「data」の例。フィールド名です。
// ↓
private int data = 0;
// 識別子「main」の例。メソッド名です。
// ↓ 識別子「args」の例。引数名です。
// ↓ ↓
public static void main( String[] args )
{
// 識別子「i」の例。ローカル変数名です。
// ↓
int i = 100;
// 以上のように、識別子とはクラス、フィールド、
// メソッド、変数(ローカル変数、引数)の「名前」です。
// 識別子は、その名の通り「識別するための単語」なので、
// 重複は許されません。
// ※コンパイルエラーの例
// int i = 200;
// ※エラーメッセージ
// トークン "=" に構文エラーがあります。
// 重複ローカル変数 i
// ※コンパイルエラーの例ここまで
// ただし、スコープやパッケージが異なれば大丈夫。
// たとえばSampleクラスは、パッケージが異なればいくらでも
// 存在して構いません。
// 識別子は、大文字小文字を区別します。
// ※コンパイルエラーの例
// I = 300;
// ※エラーメッセージ
// I を解決できません。
// ※コンパイルエラーの例ここまで
// なので、ここでIという名前の変数を宣言しても
// 重複しません。
int I = 300;
// 識別子は、クラス、変数、フィールド、メソッドでは
// 区別されます。
int Sample = 400; // クラス名と同じ。
int data = 400; // フィールド名と同じ。
int main = 400; // メソッド名と同じ。
// ただ、逆に言えばフィールドと同じ名前のローカル変数が
// 作れてしまうということなので注意すること。
// また、ローカル変数と引数は重複できません。
// ※コンパイルエラーの例
// int args = 400;
// ※エラーメッセージ
// トークン "=" に構文エラーがあります。
// 重複ローカル変数 args
// ※コンパイルエラーの例ここまで
// 識別子は、予約語と完全に一致してはいけません。
// ※コンパイルエラーの例
// int while = 500;
// ※エラーメッセージ
// キーワード "while" に構文エラーがあります。
// 正しくは "Identifier" です。
// ※コンパイルエラーの例ここまで
// このエラーメッセージはつまり、「ここには識別子
// (Identifier)が来るはずなのに予約語があるよ」
// と言っているわけです。
// 完全に一致していなければ、予約語を含んでいても構いません。
int whilE = 600;
int whil = 600;
int whileeeee = 600;
// 識別子は、演算子や分割子を含んではいけません。
// ※コンパイルエラーの例
// int va-lue = 700;
// ※エラーメッセージ
// トークン "-" に構文エラーがあります。
// 正しくは ";" です。
// ※コンパイルエラーの例ここまで
// 「$」と「_」は、記号っぽいですが、演算子や分割子
// ではないので識別子に使用することができます。
int $ = 700;
int _ = 700;
// 識別子は、数字から始まってはいけません。
// 整数リテラルや浮動小数点リテラルと見なされてしまうからです。
// ※コンパイルエラーの例
// int 80percent = 80;
// ※エラーメッセージ
// トークン "80" に構文エラーがあります。
// 正しくは "Identifier" です。
// ※コンパイルエラーの例ここまで
// 数字から始まらなければ、識別子に数字を用いても
// 構いません。
int percent80 = 80;
// 実は識別子には全角文字も使用できます。
// でも使わない方がいいでしょう。
int あああ = 900;
System.out.println( あああ );
// 900
}
}
// Sample.java // 識別子「Sample」の例。クラス名です。 // ↓ public class Sample { // 識別子「data」の例。フィールド名です。 // ↓ private int data = 0; // 識別子「main」の例。メソッド名です。 // ↓ 識別子「args」の例。引数名です。 // ↓ ↓ public static void main( String[] args ) { // 識別子「i」の例。ローカル変数名です。 // ↓ int i = 100; // 以上のように、識別子とはクラス、フィールド、 // メソッド、変数(ローカル変数、引数)の「名前」です。 // 識別子は、その名の通り「識別するための単語」なので、 // 重複は許されません。 // ※コンパイルエラーの例 // int i = 200; // ※エラーメッセージ // トークン "=" に構文エラーがあります。 // 重複ローカル変数 i // ※コンパイルエラーの例ここまで // ただし、スコープやパッケージが異なれば大丈夫。 // たとえばSampleクラスは、パッケージが異なればいくらでも // 存在して構いません。 // 識別子は、大文字小文字を区別します。 // ※コンパイルエラーの例 // I = 300; // ※エラーメッセージ // I を解決できません。 // ※コンパイルエラーの例ここまで // なので、ここでIという名前の変数を宣言しても // 重複しません。 int I = 300; // 識別子は、クラス、変数、フィールド、メソッドでは // 区別されます。 int Sample = 400; // クラス名と同じ。 int data = 400; // フィールド名と同じ。 int main = 400; // メソッド名と同じ。 // ただ、逆に言えばフィールドと同じ名前のローカル変数が // 作れてしまうということなので注意すること。 // また、ローカル変数と引数は重複できません。 // ※コンパイルエラーの例 // int args = 400; // ※エラーメッセージ // トークン "=" に構文エラーがあります。 // 重複ローカル変数 args // ※コンパイルエラーの例ここまで // 識別子は、予約語と完全に一致してはいけません。 // ※コンパイルエラーの例 // int while = 500; // ※エラーメッセージ // キーワード "while" に構文エラーがあります。 // 正しくは "Identifier" です。 // ※コンパイルエラーの例ここまで // このエラーメッセージはつまり、「ここには識別子 // (Identifier)が来るはずなのに予約語があるよ」 // と言っているわけです。 // 完全に一致していなければ、予約語を含んでいても構いません。 int whilE = 600; int whil = 600; int whileeeee = 600; // 識別子は、演算子や分割子を含んではいけません。 // ※コンパイルエラーの例 // int va-lue = 700; // ※エラーメッセージ // トークン "-" に構文エラーがあります。 // 正しくは ";" です。 // ※コンパイルエラーの例ここまで // 「$」と「_」は、記号っぽいですが、演算子や分割子 // ではないので識別子に使用することができます。 int $ = 700; int _ = 700; // 識別子は、数字から始まってはいけません。 // 整数リテラルや浮動小数点リテラルと見なされてしまうからです。 // ※コンパイルエラーの例 // int 80percent = 80; // ※エラーメッセージ // トークン "80" に構文エラーがあります。 // 正しくは "Identifier" です。 // ※コンパイルエラーの例ここまで // 数字から始まらなければ、識別子に数字を用いても // 構いません。 int percent80 = 80; // 実は識別子には全角文字も使用できます。 // でも使わない方がいいでしょう。 int あああ = 900; System.out.println( あああ ); // 900 } }