Cavaでは、2つのカテゴリの変数を定義できます。
変数の定義
Cavaでは、次の2つのカテゴリの変数を定義できます。
ローカル変数
クラスのメンバー変数
注: Cavaはクラス変数をサポートしていません。クラス変数を定義すると、コンパイルエラーが発生する可能性があります。詳細については、修飾子を参照してください。
ローカル変数
数値変数
次のサンプルコードは、
INT
型のa
という名前のローカル変数を定義し、変数に10
を代入する方法の例を示しています。
class Example {
// ...
int test() {
int a; // <== ローカル変数aを定義
a = 10;
return a + 1;
}
// ...
}
次のサンプルコードは、初期値
10
を使用して、a
という名前のローカル変数を定義する方法の例を示しています。
class Example {
// ...
int test() {
int a = 10; // <== 初期値を使用してローカル変数aを定義
return a + 1;
}
// ...
}
オブジェクト変数
オブジェクト変数を定義した後、new
キーワードを使用して関連オブジェクトを作成する必要があります。そうしないと、オブジェクト変数の内容はnull
になり、オブジェクト変数にアクセスすると例外がスローされます。
class Example {
public double PI;
Example(double customPI) {
this.PI = customPI;
}
static int main() {
Example a = new Example(3.1415926); // <== オブジェクト変数を定義し、オブジェクトを作成
return 0;
}
}
配列変数
次のサンプルコードは、
INT
型の10
個の要素で構成されるa
という名前の配列変数を定義する方法の例を示しています。これらの要素の初期値は[0,1,2,3,4,5,6,7,8,9]
に設定されています。
class Example {
// ...
int test() {
int[] a = new int[10];
for (int i = 0; i < a.length; ++i) {
a[i] = i;
}
return a[0];
}
// ...
}
次のサンプルコードは、リストを初期化することにより、
INT
型の10個の要素で構成される配列変数を定義する方法の例を示しています。これらの要素の初期値は[0,1,2,3,4,5,6,7,8,9]
に設定されています。注: コンパイラは配列内の要素数を自動的に推測します。
class Example {
// ...
int test() {
int[] a = new int[]{0,1,2,3,4,5,6,7,8,9};
return a[0];
}
// ...
}
次のサンプルコードは、オブジェクト配列を定義する方法の例を示しています。注: オブジェクト配列を定義した後、配列内の各要素のオブジェクトを作成する必要があります。
class Example {
public double PI;
Example(double customPI) {
this.PI = customPI;
}
static int main() {
Example[] a = new Example[10]; // オブジェクト配列を定義
for (int i = 0; i < a.length; ++i) {
a[i] = new Example(3.1415926); // 配列の各要素のオブジェクトを初期化
}
return 0;
}
}
クラスのメンバー変数
クラスのメンバー変数の定義と使用方法の詳細については、クラスとオブジェクトを参照してください。
組み込みデータ型
Cavaは、次の一般的なデータ型をサポートしています。括弧()内の内容は、指定された型の値が占めるメモリのサイズを示します。
BOOLEAN(1バイト)
BYTE(1バイト)
CHAR(2バイト)
SHORT(2バイト)
INT(4バイト)
LONG(8バイト)
FLOAT(4バイト)
DOUBLE(8バイト)
CHAR型の値は、2バイトの固定長でエンコードされます。このエンコード形式は、JavaのUTF-16エンコード形式に似ています。エンコードされた値のバイト長は、可変ではなく固定です。
データ型の変換
ほとんどのプログラミング言語と同様に、Cavaでサポートされているデータ型は相互に変換できます。特定のケースでは、コンパイラは新しいコードを挿入して、ソースデータ型をデスティネーションデータ型に自動的に変換します。
互換性のあるデータ型間の変換
ソースデータ型とデスティネーションデータ型には、次の関係があります。
整数データ型の場合、デスティネーションデータ型の値の範囲には、ソースデータ型の値の範囲が含まれます。
浮動小数点データ型の場合、デスティネーションデータ型の精度は、ソースデータ型の精度以上になります。
上記のケースでは、変換は安全です。たとえば、SHORT
データ型からINT
データ型への変換、またはFLOAT
データ型からDOUBLE
データ型への変換は安全です。次の例は、コンパイラが変換を実装するために挿入する可能性のあるコードを示しています。
float a = 3.14f;
double b = a;
short c = -1;
int d = c;
Cavaでのデータ型間の変換は、JavaやC++などの他の一般的なプログラミング言語での変換と同じです。
明示的な変換
デスティネーションデータ型の精度はソースデータ型の精度よりも低くなる可能性があり、デスティネーションデータ型の値の範囲にはソースデータ型の値の範囲が含まれない可能性があります。このような場合、コンパイラはコードをチェックしてエラーを返します。例:
double a = ...;
float b = a; // エラーが発生します。この変換により、精度が失われる可能性があります。
これら2つの型の変換は安全ではなく、コンパイラはこのような自動変換を禁止します。ただし、潜在的なリスクを認識している場合は、コードで明示的な変換を実装して、コンパイラによって報告されるエラーを防ぐことができます。
float a = 3.14f;
int b = (int)a; // 小数部分は切り捨てられます。値は整数に丸められます。
カスタムデータ型
Cavaでは、クラスを定義し、オブジェクトを作成できます。詳細については、クラスとオブジェクトを参照してください。