変数
概要
データの保管場所である変数です。
宣言だけではインスタンスは生成されません。
デフォルト値はnullです。
データの保管場所である変数です。
宣言
書式
[final] 型 変数名 [= 初期値] [,変数名 [= 初期値]]…;
例
[final] 型 変数名 [= 初期値] [,変数名 [= 初期値]]…;
| 項目 | 説明 |
| final | 指定すると定数となり値の変更はできなくなります。 |
| 型 | 変数の型を指定します。 |
| 変数名 | 変数名を指定します。 |
| 初期値 | 初期値を設定する場合に使用します。 |
例
| ソースコード | 説明 |
| int a; | int型変数として、aを宣言しています。 |
| int a,b,c; | int型変数として、aとbとcを宣言しています。 |
| int a = 2,b = 3; | 宣言と同時に初期値を設定してます。 |
| final int a = 3; | 定数にしています。 |
変数名
変数名には使える文字は以下のものです。
以下に示す予約語と定数は使用できません。
変数名の命名
変数名については以下のような慣例に従うことが推奨されています。
| 文字 | 先頭 | 2文字目以降 |
| アルファベット(大文字と小文字は区別されます。) | 可 | 可 |
| 数字 | 不可 | 可 |
| $ | 可 | 可 |
| _ | 可 | 可 |
| 頭文字 | 予約語 | 定数 |
| a | abstract assert | |
| b | boolean break byte | |
| c | case catch char class const continue | |
| d | default do double | |
| e | else enum extends | |
| f | final finally float for | false |
| g | goto | |
| i | if implements import instaqnceof int interface | |
| l | long | |
| n | native new | null |
| p | package private protected public | |
| r | return | |
| s | short static strictfp super switch synchronized | |
| t | this throw throws transient try | true |
| v | void volatile | |
| w | while |
変数名の命名
変数名については以下のような慣例に従うことが推奨されています。
| 変数 | 基本的に小文字にします。2つ以上の単語で構成する場合、2つ目以降の単語は先頭のみ大文字にします。 例 numberOfMember |
| 定数 | 基本的に大文字にします。2つ以上の単語で構成する場合、単語の接続に_(アンダースコア)を使用します。 例 LENGTH_OF_AREA |
スコープ
場所によって、スコープと名称が異なります。
スコープとは該当する変数にアクセスできる範囲です。
名称はスコープ内で一意である必要があり、他と重なる場合もエラーです。
例
| 名称 | 宣言場所 | 寿命 | 値を設定しない場合 |
| ローカル変数 | メソッド内部 | 宣言〜{}で囲まれたブロックの終了まで | 参照されるまでに設定しないとコンパイルエラーになります。 |
| インスタンスフィールド | クラス | インスタンス生成時〜インスタンス消滅 | デフォルト値が採用されます。 |
| クラスフィールド | クラス | なし | デフォルト値が採用されます。 |
| ソースコード | 説明 |
|
public class ScopeTest { private int v1 = 100; public void method1(int v2){ System.out.println("v1 = " + v1); int v1 = 999; for(int i = 0;i < 3;i++){ System.out.println("i = " + i); } System.out.println("v1 = " + v1); } public static void main(String[] args) { new ScopeTest().method1(3); } } |
インスタンスフィールドとしてv1を宣言しています。 引数v2はメソッド終了まで有効です。 インスタンスフィールドv1の値を出力しています。 ローカル変数v1を宣言しています。 forブロックでiを宣言しています。forブロック終了まで有効です。 v1はインスタンスフィールドとローカル変数が存在しますが、ローカル変数が優先されます。 |
| 実行結果 | 説明 |
|
v1 = 100 i = 0 i = 1 i = 2 v1 = 999 |
インスタンス変数v1の値が出力されます。 forブロック内で宣言したローカル変数iの値が出力されます。 ローカル変数v1の値が出力されます。 |
型
参照型
| クラス | クラスのインスタンスへの参照を保持します。 |
| インタフェース | インタフェースの実装クラスのインスタンスへの参照を保持します。 |
| 配列 | 配列への参照を保持します。 |
デフォルト値はnullです。
組み込み型(プリミティブ型)
宣言と同時にインスタンスも生成されます。
デフォルト値はクラスフィールド、インスタンスフィールド、配列で使用されます。
ローカル変数は明示的に値を設定しないとコンパイルエラーになります。
オーバーフローやアンダーフローは検出されません。
| 型 | 取りうる値 | バイト数 | デフォルト値 |
| boolean | true | false | - | false |
| char | 0〜65535 | 2 | \u0000 |
| byte | -128〜127 | 1 | 0 |
| short | -32768〜32767 | 2 | 0 |
| int | -2147783648〜2147783647 | 4 | 0 |
| long | -(2の63乗)〜(2の63乗)-1 | 8 | 0 |
| float | 精度6桁の浮動小数 | 4 | 0.0 |
| double | 精度15桁の浮動小数 | 8 | 0.0 |
ローカル変数は明示的に値を設定しないとコンパイルエラーになります。
オーバーフローやアンダーフローは検出されません。
代入
型変換
値の自動型変換
値の有効範囲がより大きい型の変数へは自動的に変換されます。
型の有効範囲は以下のとおりです。
byte < short < int < long < float < double
なお、char < int
型の有効範囲は以下のとおりです。
byte < short < int < long < float < double
なお、char < int
キャスト
(型名)とすることで、明示的な型変換を行います。
有効範囲の小さい変数への代入にはキャストが必要です。
例
有効範囲の小さい変数への代入にはキャストが必要です。
例
| ソースコード | 説明 |
|
public class CastTest { public static void main(String[] args) {   new CastTest().test(); } public void test(){ int data1 = 258; byte data2 = (byte)data1; System.out.println("data2 = " + data2); } } |
byteでキャストしています。 |
| 実行結果 | 説明 |
| data2 = 2 | ダウンキャストにより下1バイトのみ反映されます。 |
autoboxing/unboxing
ラッパークラスとプリミティブの相互自動変換です。
例
| 項目 | 説明 |
| オートボクシング | プリミティヴからラッパークラスへの変換です。 |
| アンボクシング | ラッパークラスからプリミティヴの変換です。 |
| ソースコード | 説明 |
|
int data1 = 1; Integer data2 = data1; int data3 = data2; |
int型の変数を用意してす。 int型からIntegerに自動変換されます。(オートボクシング) Integerからint型に自動変換されます。(アンボクシング) |