第二章 java语言基础
2.1标识符与数据类型
2.1.1 标识符(Identifier)
-
标识符的定义:Java程序中使用的变量、方法、类、数组都要有名字,这些名字称为标识符
-
标识符的构成规则:标识符只能包含字母、数字、下划线_和美元符号$,必须以字母、下划线或美元符号开头
-
关键字(keyword)和保留字(Reserved Word)被J语言赋予特殊含义,给变量或方法起名时不能用
java中的保留字和关键字
除此之外,保留词还包括 true,false,null (字面量)
Java关键字及其作用:文章链接
2.1.2数据类型
整数类型:byte,1字节,8位,最大存储数据量是255,存放的数据范围是-128~127之间。
整数类型:short,2字节,16位,最大数据存储量是65536,数据范围是-32768~32767之间。
整数类型:int,4字节,32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
整数类型:long,8字节,64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
浮点类型:float,4字节,32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
浮点类型:double,8字节,64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
字符型:char,2字节,16位,存储Unicode码,用单引号赋值。
布尔型(逻辑型):boolean,只有true和false两个取值,不能与整型数据进行转换 ,例:boolean b=true
2.1.3 常量
- 整型常量
整型常量就是整数,Java语言中的整型常量可以采用十进制、八进制、十六进制和二制4种表示方法。
- 十进制的整型常量以非0数字开头,如14,-40等;
- 八进制的整型常量用数字0开头的数值表示,如020代表十进制数值16;
- 十六进制的整型常量用0x或者0X开头的数值表示,如0x1a代表十进制数值26;
- 二进制的整型常量用0b或者0B开头的数值表示,如0B1100代表十进制数值12。
程序中出现的整型常量被看作int型,在内存中分配4个字节,如123。整型常量后面添加字母L或者l,被看作长整型常量,在内存中分配8个字节,如123L。
- 浮点型常量
浮点型常量指的是实数,Java语言中的浮点型常量有十进制小数和科学计数法两种表示方式。
- 十进制小数:由整数部分、小数点和小数部分构成,且必须包含小数点,如.23、1.和1.23
- 科学计数法:由数值部分、e(或者E)和指数部分构成,如1.23e2、123e-1,其中e前面必须有数字,e后面必须是整数。
程序中出现的浮点型常量被看作为double型,在内存中分配8个字节,如1.23。
如果要将浮点型常量指定为float型,需要在它后面加上字母f或F,在内存中分配4个字节,如1.23f。
除了以上各种类型的常量以外,Java语言还允许利用关键字final进行常量声明
final int MAX=100;
final double PI=3.1415926
将MAX和PI声明为常量,它们不能再次被赋值。为了区别于普通的变量,建议被声明为常量的标识符全部用大写字母表示。
2.1.4 变量
在程序运行过程中,数值可以改变的量称为变量。变量必须“先声明,后使用”,变量声明的格式为:类型 变量名;
int number;
在当多个变量属于同一数据类型时,可在一条语句中声明,变量之间用逗号隔开,例如:
int year, month, day;
Java语言可以在声明变量时直接进行初始化操作,格式为:
类型 变量名=数值;
其中的数值可以是常量、其他已赋值的变量或者表达式等
int number=123;
或者int c=a+b;。
2.1.5 数据类型转换
-
自动转换:不需要显式声明,由系统自动完成,低精度——>高精度
虚线表示数据转换过程中可能存在精度损失
规则:
-
有double,变double
-
否则,有float,变float
-
否则,有long变long
-
否则,两个都变int
例:两个byte数据进行运算,结果为int
此外,Boolean型只有true和false两种结果,与整型和字符型不兼容,所以不能对boolean型进行转换
-
-
强制类型转换:要求程序显式说明
(目标类型)变量名 double x=3.14; int n=(int)x;
例:整数运算如何得到小数
int a=10,b=3;
double a/b; //结果等于3,要得到3.33333,应采用以下表达式中任意一种
d=(double)a/b;
d=a/(double)b;
d=(double)a/(double)b;
2.2 运算符和表达式
Java运算符图表
运算符分类 | 结合顺序 | 运算符 | 优先级 |
---|---|---|---|
分隔符 | 左结合 | . [] ( ) ; , | 1 |
一元运算符 | 右结合 | ! ++ – - ~ | 2 |
算术运算符 | 左结合 | * / % + - | 3 |
移位运算符 | 左结合 | << >> >>> | 4 |
关系运算符 | 左结合 | < > <= >= instanceof = = != | 5 |
位运算符 | 左结合 | & ^ | | 6 |
逻辑运算符 | 左结合 | && || | 7 |
三目运算符 | 右结合 | 布尔表达式?表达式1:表达式2 | 8 |
赋值运算符 | 右结合 | = *= /= %= += -= <<= >>= >>>= &= *= |= | 9 |
2.2.2 关系运算符
运算结果为逻辑型的值true/false.
int a=5,b=4,c=3;
a>b = true
a>b>c //编译错误,a>b结果为true(逻辑型值),无法与c(整型)比较
由于浮点型数据存储时有舍入误差,可能导致逻辑上应该相等的两个数值不相等,因此应该避免对实数作相等比较。
例如,x,y均为浮点型,进行相等比较时,要避免使用x==y,可以写为Math.abs(x-y)<1e-6,表示x与y的差值绝对值小于10-6。
2.2.3逻辑运算符
简洁运算(&&和||)与非简洁运算(&和|)
例
int x=3,y=5;
boolean b=x>y & ++x=--y; //b=false,x=4,y=4
boolean b=x>y && ++x=--y; //b=false,x=3,y=5
2.2.4 位运算
|按位或 换位二进制运算,对应位有一个是1,就是1
&按位与 换位二进制运算,对应位有是0,就是0
^按位异或 换位二进制运算,对应位相同是1,不同是0
4 & 2 = 0 0100 & 0010 = 0000
6 | 2 = 6 0110 | 0010 = 0110
6 ^ 2 = 4 0110 ^ 0010 = 0100
9 >> 2 = 2 1001 右移2位为 0010
1 << 2 = 4 0001 左移2位为 0100
2.2.5 赋值运算
运算符 | 示例 | 等效表达式 |
---|---|---|
+= | a+=b | a=a+b |
-= | a-=b | a=a-b |
*= | a*=b | a=a*b |
/= | a/=b | a=a/b |
%= | a%=b | a=a%b |
&= | a&=b | a=a&b |
^= | a^=b | a=a^b |
>>= | a>>=b | a=a>>b |
<<= | a<<=b | a=a<<b |
>>>= | a>>>=b | a=a>>>b |
2.2.6 条件运算符
条件运算符是唯一的三目运算符,格式为:
表达式1?表达式2:表达式3
其中表达式1可以为关系表达式或者逻辑表达式,整个条件表达式的执行过程为:求解表达式1的值,若表达式1的值为true则取表达式2的值作为条件表达式的结果,若表达式1的值为false则取表达式3的值作为条件表达式的结果。
2.3 流程控制
2.3.1 顺序结构
- J语言不允许复合语句内声明的变量与复合语句外声明的变量同名。
2.3.2 if 语句
- 单分支形式
if(条件表达式)
语句块
- 双分支形式
if(条件表达式)
语句块1
else
语句块2
- 多分支形式
if(条件表达式1)
语句块1
else if(条件表达式2)
语句块2
~
else
语句块 n+1
else的就近匹配原则:else总是和与它最近的if配对,可用{}来改变匹配方式
if(x >=0)
{
if (y >=0)
sign = 1 ;
}
else
sign = 1
2.3.3 switch语句
switch(表达式) ///表达式的值只能是byte\short\int\char型
{
case 常量表达式 1:
语句块1
break;
case 常量表达式2;
语句块2
break;
default:
语句块n+1
}
2.3.8 跳转语句
2.3.8.1break 语句
结束本循环语句的执行