変数宣言
日本語 | 変数宣言 |
英語 | variable declaration |
ふりがな | へんすうせんげん |
フリガナ | ヘンスウセンゲン |
変数を作成すること。
「型 変数名;」と書くことが「変数宣言」である。
たとえば「int i;」と書いた場合「int型の変数iを宣言した」と言う。
このように書くことが、メモリ上に型のサイズ分の領域を確保し、「この領域を変数として使用する」と「宣言」することになるので、「変数宣言」という。
変数宣言は、宣言箇所によって以下の2種類存在する。
・ローカル変数
・フィールド
ローカル変数の場合、変数宣言を「ローカル変数宣言」と言う。
フィールドの場合、変数宣言を「フィールド宣言」と言う。
また、上記2種類以外にも、以下の2箇所でも変数宣言を行うことができる。
・メソッドの引数
・catchの例外パラメーター
ただし、この2つは厳密には変数宣言ではない。
メソッドの引数は、引数の作成と同時に「初期化」を行うことができない。
また、catchの例外パラメーターは「初期化」「複数宣言」「Throwableクラスのサブクラス以外の型の宣言」を行う事ができない。
そのため変数宣言とは別物ではあるが、「型を指定して変数を作る」という点では同じであるため、実際に使用する分には区別する必要はないだろう。
変数宣言は「修飾子 型 識別子;」という形式で記述する。
「修飾子」は変数の性質を決定する予約語を指定する。
ローカル変数はfinalのみ使用可能。
フィールド変数の場合は「フィールド修飾子」が使用可能。
修飾子は省略可能。ローカル変数の場合には省略することが多い。フィールドの場合にはアクセス修飾子のみ付けることが多い。
「型」は変数の型を指定する。
この型によって、変数に入れられる値の種類が決まる。逆に言えば、型で定義された値以外は変数に入れられない。
型には「プリミティブ型」や「クラス」を指定する。
また、配列にしたい場合には、型名の後ろに「[]」を付ける。
型にクラスや配列を指定した場合には、変数は参照型変数となる。
「識別子」が、変数名である。
この変数名を使用して、値の格納や演算、メソッドの呼び出し等を行う。
配列の場合、「型」ではなく「識別子」に「[]」を付けることで配列の宣言を行うこともできる。
複数の変数を同時に宣言する場合には「識別子」を「識別子1, 識別子2」というように、カンマで変数名を区切る。
「識別子」の箇所で、変数の「初期化」を行うことができる。
「識別子 = 初期値;」という形式で、変数を初期化する。
上記のカンマによる複数宣言を行った場合には、それぞれの変数に対して初期化を行う必要があるため注意すること。つまり「int i1, i2 = 100;」と記述した場合には変数i2しか初期化されない。
変数は、使用できる範囲と「寿命」を決定する「スコープ」が存在する。
スコープは、ローカル変数の場合には宣言をしたブロックによって決まる。
フィールドの場合にはアクセス修飾子によって決まる。
変数は、あくまで「値を入れておくための入れ物」である。
クラスや配列の場合、インスタンスを作成しなければ使用できないため注意すること。
クラスと配列にとっては、変数は参照値を格納するための変数でしかない。
以上、詳細については各項目を参照。
「型 変数名;」と書くことが「変数宣言」である。
たとえば「int i;」と書いた場合「int型の変数iを宣言した」と言う。
このように書くことが、メモリ上に型のサイズ分の領域を確保し、「この領域を変数として使用する」と「宣言」することになるので、「変数宣言」という。
変数宣言は、宣言箇所によって以下の2種類存在する。
・ローカル変数
・フィールド
ローカル変数の場合、変数宣言を「ローカル変数宣言」と言う。
フィールドの場合、変数宣言を「フィールド宣言」と言う。
また、上記2種類以外にも、以下の2箇所でも変数宣言を行うことができる。
・メソッドの引数
・catchの例外パラメーター
ただし、この2つは厳密には変数宣言ではない。
メソッドの引数は、引数の作成と同時に「初期化」を行うことができない。
また、catchの例外パラメーターは「初期化」「複数宣言」「Throwableクラスのサブクラス以外の型の宣言」を行う事ができない。
そのため変数宣言とは別物ではあるが、「型を指定して変数を作る」という点では同じであるため、実際に使用する分には区別する必要はないだろう。
変数宣言は「修飾子 型 識別子;」という形式で記述する。
「修飾子」は変数の性質を決定する予約語を指定する。
ローカル変数はfinalのみ使用可能。
フィールド変数の場合は「フィールド修飾子」が使用可能。
修飾子は省略可能。ローカル変数の場合には省略することが多い。フィールドの場合にはアクセス修飾子のみ付けることが多い。
「型」は変数の型を指定する。
この型によって、変数に入れられる値の種類が決まる。逆に言えば、型で定義された値以外は変数に入れられない。
型には「プリミティブ型」や「クラス」を指定する。
また、配列にしたい場合には、型名の後ろに「[]」を付ける。
型にクラスや配列を指定した場合には、変数は参照型変数となる。
「識別子」が、変数名である。
この変数名を使用して、値の格納や演算、メソッドの呼び出し等を行う。
配列の場合、「型」ではなく「識別子」に「[]」を付けることで配列の宣言を行うこともできる。
複数の変数を同時に宣言する場合には「識別子」を「識別子1, 識別子2」というように、カンマで変数名を区切る。
「識別子」の箇所で、変数の「初期化」を行うことができる。
「識別子 = 初期値;」という形式で、変数を初期化する。
上記のカンマによる複数宣言を行った場合には、それぞれの変数に対して初期化を行う必要があるため注意すること。つまり「int i1, i2 = 100;」と記述した場合には変数i2しか初期化されない。
変数は、使用できる範囲と「寿命」を決定する「スコープ」が存在する。
スコープは、ローカル変数の場合には宣言をしたブロックによって決まる。
フィールドの場合にはアクセス修飾子によって決まる。
変数は、あくまで「値を入れておくための入れ物」である。
クラスや配列の場合、インスタンスを作成しなければ使用できないため注意すること。
クラスと配列にとっては、変数は参照値を格納するための変数でしかない。
以上、詳細については各項目を参照。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
// フィールド変数宣言の例。
// フィールドを宣言します。
// 修飾子 型 識別子 初期化
// ↓ ↓ ↓ ↓
private int value = 400;
public static void main( String[] args )
{
// ローカル変数宣言の例。
// ローカル変数を宣言します。
// 型 識別子
// ↓ ↓
int i;
// こうすることで、メモリ上にintサイズの領域が確保され、
// iという変数名を通して、その領域に整数値を書き込むことが
// 可能になります。
// つまり「変数i」を作ったわけです。
// 変数iに値を代入します。
i = 100;
// それを出力します。
System.out.println( i );
// 100
// 変数は、宣言と同時に初期化することもできます。
// ↓整数値200で初期化します。
int iInit = 200;
System.out.println( iInit );
// 200
// 複数の変数を同時に宣言したい場合には、識別子をカンマで
// 区切ります。
// ↓i2だけ初期化します。
int i1, i2 = 300, i3;
// カンマを使って複数の変数を同時に宣言した場合、
// 初期化はそれぞれ個別に行わなければなりません。
// 上記の例では変数i2しか初期化されていませんので、
// 変数i1に値を入れず使おうとするとコンパイルエラーに
// なります。
// ※コンパイルエラーの例
// System.out.println( i1 );
// ※エラーメッセージ
// ローカル変数 i1 が初期化されていない可能性があります。
// ※コンパイルエラーの例ここまで
// 変数i2は問題なく使えます。
System.out.println( i2 );
// 300
// 変数i3は変数i1と同じく初期化されていません。
// ※コンパイルエラーの例
// System.out.println( i3 );
// ※エラーメッセージ
// ローカル変数 i3 が初期化されていない可能性があります。
// ※コンパイルエラーの例ここまで
// 配列を作る時には、以下のどちらかの方法で宣言することが
// できます。
int[] ints1;
int ints2[];
// どちらも同じですが、一般的には「int[]」が使用されています。
// 以上、フィールドも同様です。
}
// メソッドの引数は変数宣言と同様に変数を作ります。
// ただし厳密には変数宣言とは異なります。
// これがメソッドの引数です。
// ↓
public void output( int i )
{
// catchの例外パラメーターも変数宣言と同様に変数を作ります。
// ただし厳密には変数宣言とは異なります。
try
{
// NullPointerExceptionを投げます。
throw new NullPointerException();
}// ↓これが例外パラメータです。
catch( NullPointerException e )
{
e.printStackTrace();
// java.lang.NullPointerException
// at Sample.main(Sample.java:9)
// このように、投げられた例外を止めます。
}
}
}
public class Sample
{
// フィールド変数宣言の例。
// フィールドを宣言します。
// 修飾子 型 識別子 初期化
// ↓ ↓ ↓ ↓
private int value = 400;
public static void main( String[] args )
{
// ローカル変数宣言の例。
// ローカル変数を宣言します。
// 型 識別子
// ↓ ↓
int i;
// こうすることで、メモリ上にintサイズの領域が確保され、
// iという変数名を通して、その領域に整数値を書き込むことが
// 可能になります。
// つまり「変数i」を作ったわけです。
// 変数iに値を代入します。
i = 100;
// それを出力します。
System.out.println( i );
// 100
// 変数は、宣言と同時に初期化することもできます。
// ↓整数値200で初期化します。
int iInit = 200;
System.out.println( iInit );
// 200
// 複数の変数を同時に宣言したい場合には、識別子をカンマで
// 区切ります。
// ↓i2だけ初期化します。
int i1, i2 = 300, i3;
// カンマを使って複数の変数を同時に宣言した場合、
// 初期化はそれぞれ個別に行わなければなりません。
// 上記の例では変数i2しか初期化されていませんので、
// 変数i1に値を入れず使おうとするとコンパイルエラーに
// なります。
// ※コンパイルエラーの例
// System.out.println( i1 );
// ※エラーメッセージ
// ローカル変数 i1 が初期化されていない可能性があります。
// ※コンパイルエラーの例ここまで
// 変数i2は問題なく使えます。
System.out.println( i2 );
// 300
// 変数i3は変数i1と同じく初期化されていません。
// ※コンパイルエラーの例
// System.out.println( i3 );
// ※エラーメッセージ
// ローカル変数 i3 が初期化されていない可能性があります。
// ※コンパイルエラーの例ここまで
// 配列を作る時には、以下のどちらかの方法で宣言することが
// できます。
int[] ints1;
int ints2[];
// どちらも同じですが、一般的には「int[]」が使用されています。
// 以上、フィールドも同様です。
}
// メソッドの引数は変数宣言と同様に変数を作ります。
// ただし厳密には変数宣言とは異なります。
// これがメソッドの引数です。
// ↓
public void output( int i )
{
// catchの例外パラメーターも変数宣言と同様に変数を作ります。
// ただし厳密には変数宣言とは異なります。
try
{
// NullPointerExceptionを投げます。
throw new NullPointerException();
}// ↓これが例外パラメータです。
catch( NullPointerException e )
{
e.printStackTrace();
// java.lang.NullPointerException
// at Sample.main(Sample.java:9)
// このように、投げられた例外を止めます。
}
}
}
// Sample.java public class Sample { // フィールド変数宣言の例。 // フィールドを宣言します。 // 修飾子 型 識別子 初期化 // ↓ ↓ ↓ ↓ private int value = 400; public static void main( String[] args ) { // ローカル変数宣言の例。 // ローカル変数を宣言します。 // 型 識別子 // ↓ ↓ int i; // こうすることで、メモリ上にintサイズの領域が確保され、 // iという変数名を通して、その領域に整数値を書き込むことが // 可能になります。 // つまり「変数i」を作ったわけです。 // 変数iに値を代入します。 i = 100; // それを出力します。 System.out.println( i ); // 100 // 変数は、宣言と同時に初期化することもできます。 // ↓整数値200で初期化します。 int iInit = 200; System.out.println( iInit ); // 200 // 複数の変数を同時に宣言したい場合には、識別子をカンマで // 区切ります。 // ↓i2だけ初期化します。 int i1, i2 = 300, i3; // カンマを使って複数の変数を同時に宣言した場合、 // 初期化はそれぞれ個別に行わなければなりません。 // 上記の例では変数i2しか初期化されていませんので、 // 変数i1に値を入れず使おうとするとコンパイルエラーに // なります。 // ※コンパイルエラーの例 // System.out.println( i1 ); // ※エラーメッセージ // ローカル変数 i1 が初期化されていない可能性があります。 // ※コンパイルエラーの例ここまで // 変数i2は問題なく使えます。 System.out.println( i2 ); // 300 // 変数i3は変数i1と同じく初期化されていません。 // ※コンパイルエラーの例 // System.out.println( i3 ); // ※エラーメッセージ // ローカル変数 i3 が初期化されていない可能性があります。 // ※コンパイルエラーの例ここまで // 配列を作る時には、以下のどちらかの方法で宣言することが // できます。 int[] ints1; int ints2[]; // どちらも同じですが、一般的には「int[]」が使用されています。 // 以上、フィールドも同様です。 } // メソッドの引数は変数宣言と同様に変数を作ります。 // ただし厳密には変数宣言とは異なります。 // これがメソッドの引数です。 // ↓ public void output( int i ) { // catchの例外パラメーターも変数宣言と同様に変数を作ります。 // ただし厳密には変数宣言とは異なります。 try { // NullPointerExceptionを投げます。 throw new NullPointerException(); }// ↓これが例外パラメータです。 catch( NullPointerException e ) { e.printStackTrace(); // java.lang.NullPointerException // at Sample.main(Sample.java:9) // このように、投げられた例外を止めます。 } } }