2.4 常量和进制
常量
常量:程序中固定不变化的值。比如:整数1,2,3。小数3.14,false,true等。
常量分类
- 整数常量:所有整数 三类 正整数 零 负整数
- 小数常量:所有小数
- 布尔型常量:较为特有,只有两个数值。true false
- 字符常量:将一个数字字母或者符号用单引号(' ')标识
- 字符串常量:将一个或者多个字符用双引号(" ")标识
- null常量:只有一个数值就是null (有时需要给一个变量预留空间)
进制
- 二进制:每一个二进制数位用0,1;满2进1.
- 八进制:每一个八进制数位用0,1,2,3,4,5,6,7;满8进1。用0开头表示。
- 十进制:每一个十进制数位用0,1,2,3,4,5I6,7,8,9;满10进1。满10进1.
- 十六进制:每一个十六进制数位用0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;满16进1。满16进1。用0x开头表示
进制转化
十进制转二进制:十进制转成二进制-->除以2倒取余数
二进制数转十进制数:二进制转成十进制-->按2的幂数展开并累加
进制规律
计算机中是以二进制数据的形式表示所有数据,并且在计算机中把8个二进制数位当做一组,并“字节”来表示。
即:8bit=1Byte(八个二进制数位为一个字节)。那么一个字节能表示的数据是多大呢?也就是当八个二进制数位上全部是1时能表达多大一个数据呢
128+64+32+16+8+4+2+1=255
即当1个字节上全部存放的是1时,这个数据即就是255,0-255之间的任何一个正数都可以在用一个字节表示。
小技巧:对于任意一个十进制数,当要转成二进制时,也可以从上图中的128、64、32、16、8、4、2、1这
些数据加起来。当有某一个数时,就说明这个二进制数位上一定存放的是1,若没有这个数,就说明这个二进
制数位上一定存放的是0
其他进制转换
发现将一个十进制数转成二进制数时,需要使用很长的01这样的数字表示,很麻烦,不利于书写和阅读,于是就想能不能把这个较长的01数字使用其他形式表示呢?
如果把一个二进制数按照每三个二进制数位为一组划分,发现这三个二进制数位数字能表示大的最大值正好为7,正好符号了八进制的表示形式。于是可以把二进制数用八进制的形式表示二进制转八进制
0101 0111 0001 (4位一分开)
0x 5 7 1 ----十六进制的571
010 101 110 001 (3位一分开)
0 2 5 6 1 ----八进制的2561
负数的表示形式
对于一个负数,它的表示形式非常简单,即用这个负数所对应的正数的二进制数取反然后加1,即可得到这个负数的二进制表现形式。取反的意思是将当前二进制数位上的1变0,0变1
变量使用语法
数据类型 标识符 = 初始值
数据类型
布尔型boolean boolean类型
通常用于逻辑运算和程序流程控制 boolean类型数据只允许取值true或false
boolean flag;
flag true;
System.out.println("flag="+flag);
字符型char
char型数据用来表示通常意义上得“字符",char占2字节,的范围是[0,65535],但是前256个表示特殊字符:字符常量为用单引号括起来的单个字符。
例如:
char c ='A';
char c2='传';
char c3=97;
java字符采用Jnicode编码,可用十六进制编码形式表示char c1=\u0061';
转义字符
有部分符号在va有特殊含义,当需要使用符号自身原有的意思时,这时可以通过转义字符表示。
例如:键盘上的制表符tab键。可以使用'\t'表示。
如双引号,在)va中使用双引号表示字符串,若想使用双引号本身含义,即可使用"表示字符编码表"从前面的介绍知道计算机中所有数据都是采用二进制表示的,怎么才能把生活中的这些字符转成二进制表示呢?
为了解决这个问题,专门制作了一张码表,这张码表中就存放所有字符与整数的对应关系。
例如:
'A'->65
'B'.-->66
'a'-->97
'b'-->97
所以当把一个整型数据赋值给char类型数据时,计算机会查码表中这个整数所对应的字符是什么,然后将这个字符存放在char类型的空间中
char ch=65其实是将A存放在ch中
String类型
String不属于基本数据类型,但和字符有一定的联系。String是一个类,表示字符串(后面详讲):就是一串字符也就是多个字符连接在一起;字符串都得使用"括起来的,连接字符串使用+
String str;
str="西安鸥鹏互联";
//或String str="西安鸥鹏互联";
//字符串的连接采用+符号。
String s="西安"+"鸣鹏"+"互联";
System.out.println(s);//西安鸣鹏互联
整数类型
整型数据根据数据范围不同,需要使用不同的关键字来表示。
byte、short、int、long这四个关键字都可以在内存中开辟出存放整型数据的空间。
byte开辟1个字节的空间,short开辟2个字节空间,int开辟4个字节空间,long开辟8个字节空间。
byte b=2;//会自动把2转为byte类型存放在b空间
short s=3;
int i=4;
long l=5L;//当把一个值赋给1ong型空间时,需要在数值后面加L或l标注其为long类型
浮点类型
double和float关键字在内存中开辟的空间可以存放小数。double开辟8个字节的空间,float开辟4个字节的空间。
Java浮点类型常量有两种表示方式:
- 十进制形式:例如:3.14,168.0,.618
- 科学计数法形式:例如:3.14e2,3.14E2,1000E-2
Java浮点型常量默认是double,则要声明一个常量为float型,则需在常量后加上f或F,如:
double pi=3.14;//正确
float pi=3.14F;//必须加上f,或转型float pi3=(float)3.14;
注意:Java里只有浮点型的变量才可以接受科学计算式结果:
int num 314E2;//错误num为int类型,不可以使用科学计数法
数据类型转换
隐式类型转换
当在存储整数数据时,Java中所有的整数默认都是int类型的。所以在将-128~127之间的数据储在 byte类型空间中时,JVM会把这个int类型的数据自动转换成byte类型,然后存放在byte空间中。short同理。
byte b=2;//会自动把int类型2转为byte类型存放在b空间
short s=234;//也会把int类型234转为short类型存放在s空间
当把一个int类型的数据存放在char类型空间中时,也会发生隐式类型转换
char ch=65//这里会用int类型65,到编码表中查找对应的字符,然后将字符存放在ch空间中
char ch2='A';//直接将A字符存放在ch2空间中
【 注意:当把超过byte和shot范围的数据给他们开辟空间存放会发生编译时错误。同样把无法在编码表中查到对应字符的数据存放到char空间也会报错】
整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则
- 容量小的类型可自动转换为容量大的数据类型(类型自动提升)
- byte,short,char→int→long→float→double
- byte,shot,char之间不会相互转换,他们在计算时首先会转换为int类型
强制类型转换
容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度的降低或溢出,使用时要格外注意
强制转换格式:
(数据类型)(被转数据);
long l=123L;
int i=(int)l;
double d =3.14;
float f =(float)d;
byte b = 5;//默认5 是整数 int 把int转为byte类型
Byte. Max_Value 最大的范围到多少127
Byte. Min_Value 最小的范围到多少-128
byte的范围 -2^7~~2^7-1
short -2^15~2^15-1
char ch1=67;//int---->编码表(ascⅡ码,unicode码)
第三章 流程控制语句
3.1if条件语句
单分支if语句
当且仅当条件为true时执行一个动作。
if(布尔表达式){
语句;
}
省略括号可以让代码更加简短,但是容易产生错误。当你返回去修改略去代码的时候,容易忘记加上括号。这是一个常犯的错误。
双分支if-else语句
当指定条件为true时单分支if语句执行一个操作。而当条件为false时什么也不干。但是,如果你希望在条件为false时也能执行一些动作,那就用这个。
if(布尔表达式){
布尔表达式为真时执行的语句;
}else{
布尔表达式为假时执行的语句;
}
嵌套的if语句和多分支if-else语句
if或if-else语句中的语句可以任意合法的java语句,甚至可以是其他的if或if-else语句
3.2常见的错误
常见错误1:忘记必要的括号
如果块中只有一条语句,就可以忽略花括号。但是,当需要用花括号将多条语句括在一起时,忘记花括号是一个常见的程序设计错误。
常见错误2:在f行出现错误的分号
这个错误是很难发现的,因为它既不是编译错误也不是运行错误,而是一个逻辑错误,等价于一个空代码块。
常见错误3:对布尔值的冗余测试
为了检测测试条件中的布尔型变量是true还是false,使用相等比较运算符是多余的。
常见错误4:悬空else出现的歧义
所以还是该写括号写括号了
常见错误5:两个浮点数值的相等测试
浮点数具有有限的计算精度:设计浮点数的计算可能引入取整错误。因此,两个浮点数值的相等测试并不可靠。
常见错误6:简化布尔变量赋值
对布尔变量的赋值直接给出布尔运算结果即可,无需再判断。
常见错误7:避免不同情形中的重复代码
如果if和else语句中有重复的内容,应当提取出来。
3.3Switch语句
switch(switch表达式){
case值1:语句1;
break;
case值2:语句2;
break;
case值N:语句N;
break;
default:默认情况下执行的语句;
}
switch语句遵从下述规则
1.switch表达式必须能计算出一个char、byte、short、int或者String型值,并且必须总是要用括号括住。
2.值1、值2、值N必须与switch表达式的值具有相同的数据类型,且是确切的值不能是变量。
3.当switch表达式的值与case语句的值相匹配时,执行从该case开始的语句,直到遇到一个break语句或到达该switch语句的结束。
4.默认是可选的,当设有一个给出的case与switch表达式匹配时,用来执行该操作。
5.关键字break是可选的。break语句会立即终止switchi语句。
if和switch的区别
- if可以用于判断数值,也可以判断区间,只要运算结果是boolean类型,都可以进行判断。
- switch用于对固定的几个值,进行判断。判断的值的类型有限
不要忘记在需要的时候使用break语句。一且匹配其中一个case,就从匹配的case处开始执行,直到遇到breaki语句或到达switch语句的结束。这种现象称为落空行为。
3.4For循环
for(初始值;循环条件;循环完后的变动){
语句;
}
3.5while循环语句
while语法结构:
循环初始化
whi1e(循环继续条件){
循环体语句;
循环迭代;
}