1 Java中的关键字

被Java语言赋予特定含义的单词就可以称为Java关键字。

1.1 关键字的特点

  1. 组成关键字的单词字母全部小写。
  2. Java具有53个关键字,包括2个保留关键字goto、const。在C/C++中,goto常被用于跳出多重循环。但goto 语句的使用往往会使程序的可读性降低,所以 Java 不允许 goto 跳转。const在C语言中定义常量的作用,而Java中要想定义常量可以使用final关键字。goto和const作为保留字存在,目前并不使用,但以后可能会升级为关键字。
  3. 类似Notepad++这样的高级记事本,针对关键字有特殊的颜色标记,非常直观。

1.2 关键字\保留关键字表

53个关键字,包括两个保留字。

访问控制修饰符的关键字(共3个)

public

protected

private

(缺省)

定义类、接口、抽象类和实现接口、继承类的关键字、实例化对象(共6个)

class

abstract

interface

extends

implements

new

修饰类、方法、属性和变量(共9个)

static

final

spuer

this

native

strictfp

synchronized

transient

volatile

程序控制语句(共12个)

if

else

while

for

switch

case

default

do

break

continue

return

instanceof

用于异常处理的关键字(共5个)

try

catch

finally

throw

throws

用于包的关键字(共2个)

package

import

数据类型(共10个)

float

double

long

int

short

byte

char

boolean

void

enum

其他关键字(共4个)

true

false

assert(断言)

null

保留字(共2个)

goto

const

2 Java中的数据类型

2.1 基本数据类型

一共八种,8bit(位)=1byte(字节)

类型

大小(bit)

取值范围

默认值

byte

8

-128 - 127

(byte)0

short

16

-32768 - 32767

(short)0

int

32

-2147483648 - 2147483647

0

long

64

-9233372036854477808 - 9233372036854477807

0L

float

32

-3.40292347E+38 - 3.40292347E+38(有效位数为6-7位)

0.0f

double

64

大约-1.79769313486231570E+308 - 1.79769313486231570E+308(有效位数为15位)

0.0d

boolean

1

true /false

false

char

16

'\u0000' - '\uffff'(无符号,转换为十进制就是0-65535)

'/uoooo'(null)

  boolean 只有两个值:true/false,可以使用 1 bit 来存储,但是具体大小没有明确规定。某些JVM 会在编译时期将 boolean 类型的数据转换为int,使用 1 来表示 true,0 表示 false。JVM 支持 boolean 数组,不过是通过读写 byte 数组来实现的。
  当变量作为作为类/对象成员使用时,java才确保给定其初始值,防止程序运行时错误。上诉默认值并不适用于“局部”变量(即:非某个类的字段)。
  可以使用十六进制表示浮点数值。例如,0.125可以表示成0x0.1p1。在十六进制表示法中,使用p表示指数,而不是e。注意,尾数采用十六进制,指数采用十进制。指数的基数是2,而不是10。即0.125=0.0625 * 2^1。
  Java中所有“非数值”的值都认为是不相同的。不能这样检测一个特定值是否等于Double.NaN:

if (x == Double.NaN) // is never true

  然而可以使用Double.isNaN 方法:

if (Double.isNaN(x)) // check whether x is "not a number"

2.1.1 基本数据类型之间的转换

2.1.1.1 隐形(自动)转换

类型的向上提升。小的数据类型—>大的数据类型。

  在运算时会将数据转换为二进制数,短长度的二进制数会通过补0的方式补齐相对与大长度的二进制数缺少的位数,再进行运算。因此运算结果会默认转换为大的数据类型
规则:

如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型;
否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型;
否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型; 否则,两个操作数都将被转换为int类型。

注意
  char b = ‘a’+18; //正确,因为char本身在码表中可以用数字表示的,然后运算完成之后还是char,应该输出s。
  char a = ‘a’;char b = a + 18; // 这样就是错的,因为JVM运算完后不知道结果是多少,所以会提示损失精度的错误。

2.1.1.2 强制转换

类型由大类型向小类型转换。

例如:A的ASCII码为65,a的ASCII码为97 ,char类型转换时使用。

强制转换的语法: (数据类型)变量;

Short b=1;
Int c=2;
Short a=(short)(b+c);

注意

  1. 强制转换时候,应该考虑范围,是否超过最大值。
  2. 数据类型强制转换,数据类型应该互相兼容,否则可能损失精度。
2.1.1.3 案例
byte b1=3,b2=4,b;
b=b1+b2;  //这一句编译失败,变量的计算,先提升类型,再计算。
b=3+4;   //这一句正常,常量值的计算,先算出结果,再在范围内查找,找到了就不会提升,找不到才会提升。
byte b = 130;  //编译有问题,超过了范围,应该强制转型,但是最终强转之后结果为-126。
short s1 = 1; s1 = s1 + 1; //在s1+1运算时会自动提升表达式的类型为int,那么将int赋予给short类型的变量s1会出现类型转换编译错误。
short s1 = 1; s1 +=1; //+=是java语言规定的运算符,java编译器会对它进行特殊处理(转换为原来的short类型),因此可以正确编译。也叫隐式类型转换。

2.2 复合类型(引用类型)

数组: int [] arr;
类、自定义的类:class、abstract class
String类型:特殊的引用类型(不可变)
接口、枚举、null类型