Data Type and Type Checking
Java的基本数据类型有(一般是小写字母):
- int
- long
- boolean
- double
- char
Java的对象数据类型有(一般开头是大写字母):
- String
- BigInteger
- …
两种类型变量的对比:
Static Typing and Dynamic Typing
Static Typing : 在编译阶段进行类型检查
可在编译阶段发现错误,避免了将错误带入到运行阶段,可提高程序的健壮性/正确性
Dynamic Typing : 在运行阶段进行类型检查
Static Checking
- 语法错误
- 类名/函数名错误
- 参数类型错误
- 参数数目错误
- 返回值类型错误
考虑类型的检查,由于编译阶段变量也没有值
Dynamic Checking
- 非法的参数值 比如除0错误
- 非法的返回值
- 越界
- 空指针
主要是对值的检查
对于除以0的考虑:
如果将double除以0,JVM将显示Infinity:
public static void main(String [] args){ double a=10.00; System.out.println(a/0); }
//打印 Infinity
如果将int除以0,则JVM将抛出算术异常。
public static void main(String [] args){
int a=10;
System.out.println(a/0);
}
结果为: Exception in thread "main" java.lang.ArithmeticException: / by zero
但是如果我们将int除以0.0,那么JVM将显示Infinity:
public static void main(String [] args){
int a=10;
System.out.println(a/0.0);
}
//打印: Infinity
//这是因为JVM会自动类型转换,因此我们得到无穷大而不是ArithmeticException。
Changing a variable or its value
change a variable:
将该变量指向另一个值得存储空间
change a value:
将该变量当前指向的值的存储空间中写入一个新的值
Immutability 不变性
不变数据类型:一旦被创建,其值不能改变
如果是引用类型(指针),也可以是不变的,一旦确定其指向的对象,不能再被改变
To make a reference immutable, declare it with the keyword final
如果编译器无法确定final变量不会改变,就提示错误(属于静态检查)
Note:
- final类无法派生子类
- final变量无法改变值/引用
- final方法无法被子类重写