JAVA语言规范学习笔记(4)

JAVA编程语言是一种强类型的语言,意思是在编译的时候就知道了变量和表达式的类型。

JAVA编程语言中的类型分为:

基本类型:boolean类型

                    数字类型:

                                       整数类型:byte,short,int,long,char

                                       浮点类型:

                                                           单精度类型float

                                                           双精度类型double

引用类型:object types,interface types,array types,null types

类型存在于编译时刻。而一些对应类和接口的类型存在于运行时刻。造成这种类型和类、接口不一致情况的原因有两种:

1、在运行的时候,类或接口是由JAVA虚拟机使用类装载器导入的。而每个类装载定义了自己的一个类和接口的集合。因此可能会产生这种情况,两个类装载器导入了同一个类或接口的定义,却在运行时产生了不同的类或接口。

2、类型参数和类型变量在运行时没有具体化。因此不同的参数化类型可能是由相同的类或接口实现的。

类型的语法结构为:

Type:
        PrimitiveType
        ReferenceType

基本类型的语法结构是:

PrimitiveType:
        NumericType
        boolean
NumericType:
        IntegralType
        FloatingPointType
IntegralType: one of
        byte short int long char
FloatingPointType: one of
        float double

整数类型的值范围:

For byte, from -128 to 127, inclusive
For short, from -32768 to 32767, inclusive
For int, from -2147483648 to 2147483647, inclusive
For long, from -9223372036854775808 to 9223372036854775807, inclusive
For char, from '/u0000' to '/uffff' inclusive, that is, from 0 to 65535
整数类型的操作类型:

1、比较操作,产生boolean值

数字大小比较操作:<,>,<=,>=。等于判断操作:==,!=。

2、算术运算符:

一元运算符:+,-。

多元运算符:*,/,%。

自增和自减运算符:++,--。

带符号和不带符号的移位运算符:<<,>>,>>>。

位运算符:~,&,|,^。

3、条件运算符:? :。

4、转化运算符,能从整数类型转化为任何数字类型。

5、String类型的连接操作符+。

其余还有许多有用的构造函数、方法和常量都定义在他们对应的类里面:Byte,Short,Integer,Long,Character。如果一个整数运算时,除移位运算外,有一个操作数是long型的,那么运算是会按64-bit的精度来操作,而结果会是long型的。如果其中一个操作数不是long型的,那么它会先转化为long型的,再进行运算。

在JAVA中整数类型在上溢出和下溢出时并没有任何异常表示。整数类型的操作在进行unboxing操作时,可能会抛出NullPointExceptin的异常。在进行/和%操作时,如果右边的操作数是0,那么就会抛出ArithmeticException。如果在进行自增和自减操作,有可能会引起OutOfMemoryError

浮点数分为两种, floatdouble,分别使用 IEEE 754 32-bit64-bit的标准。其中有一个特殊的值 NaN,意思是 Not a Number,它包括 Float.NaNDouble.NaN
IEEE 754 不仅包括由符号和数字组成的正负数,还包括正负零、正负的无限大和一个特殊的 Not-a-Number(以后缩写为 NaN)值。 NaN用来表示某些非法的计算所产生的结果,比如除零的运算。 floatdoubleNaN常量预定义为 Float.NaNDouble.NaN
JAVA编程语言的实现中不但要支持 float value set和double value set,此外,也要支持它们的指数表示形式float-extend-exponent value set和double-extend-exponent value set。在某些特殊的环境下我们需要用指数形式来代替一般的数字表达形式。
有限的非零数字我们都可以用 s · m · 2 (e-N+1)形式来表示。其中s可以是+1或-1,m是个小于2N的正整数,e的值范围是(Emin = -(2K-1-2), Emax = 2K-1-1),在这里N和K是依赖于值范围的参数。一些值可以用这种形式来表示,但可以有多种表示。比如,一个值v,它用这种形式来表示,其中s、m、e为特定的值,假如其中m为偶数且e小于2K-1,那可以将m除以2,则e加上1,那么就有了这种表达形式的第二种表示。
如果 m ≧2 (N-1),那么这种表示形式就称作规格化;否则称作不规格化。
Parameter
float
float-extended-exponent
double
double-extended-exponent
N
24
24
53
53
K
8
≧11
11
≧15
E min
+127
≧+1023
+1023
≧+16383
E max
-126
≦-1022
-1022
≦-16382
除了NaN之外,浮点数都是有顺序的。在<,<=,>,>=的运算中,其中两个或者一个操作数是NaN,那么返回值为false。等于运算符==,如果任意一个操作数是NaN,那么返回值为false;不等于运算符!=,如果任意一个操作数是NaN,那么结果为true。
浮点类型能进行的操作有:
1、  比较操作:<,>,<=,>=,!=,==。
2、  算术运算符:
单元运算符:+,-,
多元运算符:+,-,*,/,%
自增自减运算符:++,--
3、  条件运算符:?:
4、  转化运算。
5、 String类型的+运算符。
在运算时,和整数类型相似,精度较小的数字会先转化为精度较大的类型,然后再进行运算。在异常抛出的情况也很类似。在进行 unboxing操作时,能抛出 NullPointException,在进行自增自减操作时,能抛出 OutMemotyException

你可能感兴趣的