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 类型、类和接口




待续.........