Java Language Specification Java SE 9 Edition学习笔记-基本概念

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 char

FloatingPointType:
(one of)
float double



4.3 引用类型和引用值

引用类型包括4个种类:类、接口、类型变量和数组类型,具体分类如下:

ReferenceType:
ClassOrInterfaceType
TypeVariable
ArrayType


ClassOrInterfaceType:
ClassType
InterfaceType

ClassType:
{Annotation} Identifier [TypeArguments]
ClassOrInterfaceType . {Annotation} Identifier [TypeArguments]

InterfaceType:
ClassType

TypeVariable:
{Annotation} Identifier

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


待续.........

        

你可能感兴趣的:(Java Language Specification Java SE 9 Edition学习笔记-基本概念)