![]() ![]() ![]() ![]() |
Java 言語のナットとボルト |
変数はプログラミング言語の名詞である。変数は作用するか、あるいは作用される実体(値、データ)である。 文字を数えるプログラムは 2 つの変数count と args を使用する。 プログラムは、入力ソースから1文字読み取るたびに count を増分するが args には何もしない。 両方の変数の宣言は以下に太字で表されている。
class Count { public static void main(String args[]) throws java.io.IOException { int count = 0; while (System.in.read() != -1) count++; System.out.println("Input has " + count + " chars." ); } }変数宣言には、常に変数の型とその名前の 2 つの構成要素が含まれる。 同様に、変数宣言の位置 つまり、宣言が他のコードに関連してどこで行なわれているかということが、変数のスコープを決定する。
変数の型
Java 言語のすべての変数がデータ型を持っていなくてはならない。 変数の型は、変数が持つこ とができる値とその上で実行できる操作を決定する。 例えば、 int count の宣 言 は count が整数(int)であると宣言する。 整数は数値( 正と負の両方)だけを持つことができ、標準の算術演算子(+、−など)を使用して、標準の算術演算(加算、減算など)を実行することができる。 Java 言語には、プリミティブ型とリファレンス型の2つの主要なデータ型のカテゴリがある 。
プリミティブ型は1つの値を含み、整数、浮動小数点、文字、論理型のような型を取り込む。 次の表は、キーワードで、Java がサポートするすべてのプリミティブ型のサイズ、形式、簡潔な解説の一覧である。
Type Size/Format Description (whole numbers) byte 8-bit 2の補数 Byte-length integer short 16-bit 2の補数 Short integer int 32-bit 2の補数 Integer long 64-bit 2の補数 Long integer (real numbers) float 32-bit IEEE 754 単精度浮動小数点 double 64-bit IEEE 754 倍精度浮動小数点 (other types) char 16-bit Unicode character A single character boolean N/A A boolean value (true or false)リファレンス変数の値は、実際の値あるいは変数によって示される値の集合への参照(他の技術用語でのポインタ)なので、リファレンス型と呼ばれる。 例えば、文字を数えるプログラムはリファレンス型の変数 args を宣言し(使用はしない)、それは String オブジェクトの配列である。 文 あるいは式で使用している時、名前 args は配列の記憶場所のアドレ スを評価する。 これはプリミティブな変数名である count 変数とは対照的である 。count 変数は、変数の実際の値を評価する。
配列に加えて、クラスとインタフェースも同じくリファレンス型である。 したがって、クラスある いはインタフェースを作成する時は、本質的には新規のデータ型を定義している。自前のクラスやインターフェースを定義する情報についてはオブジェクト、クラス、インタフェースを参照しなさい
C と C++ プログラマための注釈: Java 言語が サポートしない3つの C 言語データ型がある。それらは、 ポインタ、構造体および共用体である。
変数名
プログラムが変数の名前によってその値を参照する。 例えば、文字を数えるプログラムが count変数の値を参照したいときは、名前countを単に使用する。 慣習では、変数名は小文字から始まる(クラス名は大文字から始まる)。
Java における変数名は次のようになる。
- 一連のユニコード文字で構成された正当な Java の識別子でなければならない。 ユニコードは、 様々な言葉で書かれたテキストをサポートするように設計された文字コーディングシステムである。 ユニコードでは34,168文字まで成文化できる。 これにより、変数名やコメントにギ リシャ語、ロシア語、ヘブライ語などのようなさまざまなアルファベット文字を使用することができる。 これは、プログラマが母国語で意味のあるコードを書くことができるために重要である。
- キーワードあるいは論理リテラル( true あるいは false )と 同じであってはならない。
- 宣言が同じスコープに現われるもう1つの変数と同じ名前を持ってはならない。
三番目の規則は、変数名が宣言が異なるスコープで現れる別の変数と同じ名前になる可能性があることを示している。 これは本当である。 さらにある状況では、変数が重複しているスコ ープで宣言される別の変数と名前を共有することもある。
スコープ
変数のスコープは変数がアクセス可能であるコードのブロックである。 また、変数のスコープは 、変数が作成されて破壊される時期を決定する。 変数を宣言する時に、変数の有効範囲 が確立する。 スコープは、以下の4つカテゴリの1つに変数を配置する。
- メンバ変数
- ローカル変数
- メソッドパラメータ
- 例外ハンドラパラメータ
メンバ変数はクラスまたはオブジェクトのメンバであり、クラス内で宣言される(クラスのメソッド内ではない)。 文字を数えるプログラムにはメンバ変数の宣言はない。メンバ変数の宣言 とそれらのスコープに関する情報は、次のレッスンのオブジェクト、クラス、インタフェースにあるメンバ変数の宣言を参照しなさい。
ローカル変数は、メソッド内あるいはメソッドのコードのブロック内で宣言される。 文字数を 数えるコード例ので、 count はローカル変数である。 countのスコ ープ、すなわち、 countをアクセスできるコードは、 countの宣言 から main() メソッドの最後(コーディング例に現われる最初の右丸括弧 '}' によって 示す)までに及ぶ。 一般にローカル変数は、その宣言から宣言されたコードブロックの最後 までアクセス可能である。
メソッドパラメータは、メソッドおよびコンストラクタへの仮引数であり、メソッドおよびコンストラクタに値を渡すために使用される。 次のレッスンのメソッドの実装にあ るメソッドの書き方では、メソッドパラメータを通じてメソッドとコンストラクタに値を渡すことについて説明する。 文字数を数えるコードの例で、 args は main() メソッドへのメソッドパラメータである。 メソッドパラメータのスコープは、パラメータを持つメソッドあるいはコンストラクタ全体である。 例では、 args のスコープは main() メソッド全体である。
例外ハンドラパラメータはメソッドパラメータに類似しているが、メソッドあるいはコンストラクタよりはむしろ例外ハンドラのための引数である。 文字数を数えるコードの例には例外ハンドラがないので、例外ハンドラパラメータもない。例外を使用したエラー処理では、Java 例外を使用してエラーを処理することに ついて説明し、パラメータを持つ例外ハンドラの書き方について示す。
変数の初期化
ローカル変数とメンバ変数は、それらが宣言される時に初期化することができる。 文字数を数える プログラムは、宣言する時に count の初期値を提供する。
int count = 0 ;変数に割り当てられた値は変数の型に一致しなければならない。
メソッドパラメータと例外ハンドラパラメータは、このような方法では初期化できない。 パラメー タの値は呼び出し側によって設定される。
![]() ![]() ![]() ![]() |
Java 言語のナットとボルト |