4.类型、值和变量
Java语言是静态类型语言,这意味着每个变量和表达式在编译的时候是类型是已知的。
Java语言也是强类型语言,因为类型限制了变量能容纳的值,限制了表达式能生成的值,限制了操作符支持的值,决定了操作符的含义。强静态类型可以在编译时检测错误。
Java语言的类型分为两大类:原始类型和引用类型。
4.1 类型和值的种类
Java语言有两大种类的类型:primitive types(原始类型)和reference types(引用类型)
相应的,可用于存储变量、传递参数、方法返回值和被操作的数据值的类型包括:基本值和引用值。
4.2 原始类型和基本值
原始类型是Java语言用预留关键字预先定义好的。
基本值之间不共享状态。
原始类型分类如下:
PrimitiveType:
{Annotation} NumericType
{Annotation} boolean NumericType:
IntegralType
FloatingPointType IntegralType:
(one of)
byte short int long charFloatingPointType:
(one of)
float double
4.3 引用类型和引用值
引用类型包括4个种类:类、接口、类型变量和数组类型,具体分类如下:
ReferenceType:
ClassOrInterfaceType
TypeVariable
ArrayType ClassOrInterfaceType:
ClassType
InterfaceTypeClassType:
{Annotation} Identifier [TypeArguments]
ClassOrInterfaceType . {Annotation} Identifier [TypeArguments]InterfaceType:
ClassTypeTypeVariable:
{Annotation} IdentifierArrayType:
PrimitiveType Dims
ClassOrInterfaceType Dims
TypeVariable Dims
Dims:
{Annotation} [ ] {{Annotation} [ ]}
示例:
class Point { int[] metrics; }
interface Move { void move(int deltax, int deltay); }
4.3.1 Objects
对象是类的实例或一个数组。
4.3.2 Object类
Object类是其他所有类的超类。
所有的类和数组均继承了Object类的如下方法:
- clone :对象拷贝
- equals:定义了对象相等的概念
- finalize :对象销毁前执行
- getClass :返回对象所属的类
- hashCode:
- wait, notify, and notifyAll :用于线程中的并发编程
- toString:对象的String表示方式
4.3.3 String类
String对象有一个常量值。
4.3.4 引用类型什么时候是相同的
4.4 类型变量
类型变量是一个非限定标识符,用于类、接口、方法和构造主体中的类型。
类型变量是通过声明一个泛型类、泛型接口、泛型方法或泛型构造函数的类型参数引入的。(参考8.1.2、9.1.2、8.4.4、8.8.4)
每个声明为类型参数的类型变量都有一个边界。如果一个类型变量没有声明边界,那么假定为Object。如果声明了边界,那么它包含如下之一:
- 单类型变量T
- 类或者接口类型T可能紧跟着接口类型I1 & ... & In
4.5 Parameterized Types
4.6 Type Erasure(类型擦除)
类型擦除是类型到类型的映射。擦除映射定义为如下(|T|记做类型T的擦除类型):
。。。
因为在编译期间一些类型信息是要被擦除的,所以并不是所有的类型在运行时都是可用的。在运行时完全可用的类型称之为可具体化的类型。
4.7 Reifiable Types(可具体化的类型)
因为在编译期间一些类型信息是要被擦除的,所以并不是所有的类型在运行时都是可用的。在运行时完全可用的类型称之为可具体化的类型。
一个类型是可具体化的,必须满足如下中的一条:
它指向一个非泛型类或接口类型声明
It is a parameterized type in which all type arguments are unbounded wildcards
raw type
原始类型
元素类型可具体化的数据类型
is a nested type where, for each type T separated by a ".", T itself is reifiable.
交集类型不是可具体化。
4.8 Raw Types
4.9 Intersection Types(交集类型)
4.10 Subtyping(子类型化)
4.11 什么地方使用类型?
4.12 变量
变量是一个存储位置,并关联了一个类型,有时候称之为编译时类型,是一个原始类型或引用类型。
变量的值通过赋值或者++、--前缀或后缀运算符。
4.12.1 原始类型的变量
原始类型的变量通常容纳准确的原始类型的原始值。
4.12.2 引用类型的变量
4.12.3 变量类型
变量类型分为8类:
1.类变量:类中用关键字static声明的字段,或接口声明中的字段(不管是否用关键字static声明)
2.实例变量:类中未使用关键字static声明的字段
3.数组组件(Array components):数组组件是未命名的变量
4.方法的形式参数
5.构造方法的形式参数
6.Lambda函数形式参数
7.异常参数
8.局部变量
4.12.4 final变量
变量可以声明为final,final变量只能够赋值一次。
4.12.5 变量的初始值
4.12.6 类型、类和接口
待续.........