全部产品

Cava 类型和变量定义

更新时间:2020-04-02 15:20:15

变量定义


cava中支持以下两种类型的类型定义

  • 局部变量
  • 类的成员变量


注:cava中不支持类变量,定义类变量会引发编译错误,具体见文档

局部变量

数值类型变量

  • 定义一个 int 类型的局部变量 a ,并赋值为 10
  1. class Example {
  2. // ...
  3. int test() {
  4. int a; // <==
  5. a = 10;
  6. return a + 1;
  7. }
  8. // ...
  9. }
  • 直接使用初始值 10 定义局部变量 a
  1. class Example {
  2. // ...
  3. int test() {
  4. int a = 10; // <==
  5. return a + 1;
  6. }
  7. // ...
  8. }

对象变量


对象变量定义后需要使用 new 语句创建相应的对象。否则变量的内容为 null ,访问会产生空指针异常。

  1. class Example {
  2. public double PI;
  3. Example(double customPI) {
  4. this.PI = customPI;
  5. }
  6. static int main() {
  7. Example a = new Example(3.1415926); // <==
  8. return 0;
  9. }
  10. }

数组类型变量

  • 定义具有 10 个元素的 int 类型数组 a ,并依次初始化为 [0..9]
  1. class Example {
  2. // ...
  3. int test() {
  4. int[] a = new int[10];
  5. for (int i = 0; i < a.length; ++i) {
  6. a[i] = i;
  7. }
  8. return a[0];
  9. }
  10. // ...
  11. }
  • 使用初始化列表,定义 int 类型的数组,并初始化为 [0..9]。注意:数组的长度由编译器自动推导。
  1. class Example {
  2. // ...
  3. int test() {
  4. int[] a = new int[]{0,1,2,3,4,5,6,7,8,9};
  5. return a[0];
  6. }
  7. // ...
  8. }
  • 创建对象数组。注意:对象数组创建完毕后,还需要为数组中的元素依次创建对象。
  1. class Example {
  2. public double PI;
  3. Example(double customPI) {
  4. this.PI = customPI;
  5. }
  6. static int main() {
  7. Example[] a = new Example[10]; // 创建对象数组
  8. for (int i = 0; i < a.length; ++i) {
  9. a[i] = new Example(3.1415926); // 初始化数组中的每个对象
  10. }
  11. return 0;
  12. }
  13. }


类的成员变量


类的成员变量的定义和使用见文档

内置类型


cava中内置了以下常见类型,供直接使用(括号内为类型的实际内存大小):

  • booelan(1字节)
  • byte(1字节)
  • char(2字节)
  • short(2字节)
  • int(4字节)
  • long(8字节)
  • float(4字节)
  • double(8字节)

值得一提的是,char类型在内部使用2个字节的编码,与java的utf16编码格式基本一致,采用定长的2个字节,而不是可变长的utf16。

在类型间进行转换

和大部分语言一样,内置的数值类型存在一定的可转换关系,在合适的情况下,编译器会插入代码完成数值类型之间的转换。

兼容类型自动转换

当源类型和目标类型之间存在如下关系时:

  • 目标类型数值表示范围包含源类型的数值表示范围(主要针对整数类型)
  • 源类型转换为目标类型后,数值精度不会丢失(主要针对浮点类型)

称为转换是安全的。例如, short 类型到 int 类型的转换、 float 类型到 double 类型的转换都是安全的。编译器会自动插入代码完成此类转换:

  1. float a = 3.14f;
  2. double b = a;
  3. short c = -1;
  4. int d = c;


cava中各种类型之间的类型转换规则与其它常见编程语言(Java、C++)一致。

类型强制转换

某些数值类型在转换时存在精度丢失或者表示范围不匹配的问题,这种情况下编译器会进行检查并提示错误,例如:

  1. double a = ...;
  2. float b = a; // error,存在丢失数值精度风险


由于此类转换一般是不安全的,所以编译器禁止代码自动进行此类转换。如果用户明确掌握类型间转换存在的风险,可以在代码中显式使用强制类型转换,避免编译器报错。

  1. float a = 3.14f;
  2. int b = (int)a; // 小数部分会被丢弃,仅保留整数部分,实现取整效果

自定义类型


cava中支持类的定义和对象的使用,具体用法见文档