1. 回顾
1) 开发环境自己必须能独立搭建.
2) 关键字: 被java语言赋予了特殊含义的单词,全部小写.
3) 标识符:
取值范围:
26个英文字母大小写、数字0-9、下划线 _ 和美元符 $
并且不能以数字开头。
注意事项:
命名时要符合见名知意和驼峰命名的原则。
2. 常量
概念:
值在程序运行过程中不发生改变的量。
整数常量
比如: 10 -20
实数常量
比如: 1.5 12.8
字符常量:
比如: 'a' 'D' '中'
字符串常量:
比如: "helloworld"
布尔常量:
只有两个值:true和false
空常量:
null (引用数据类型)
注意:
常量可以被输出语句直接输出.
3. 计算机中数据存储和传输的单位
数据存储和传输的最小单位 bit (比特)
数据存储和传输的最基本单位 byte (字节) 1byte = 8bit
4. 其他进制到十进制的转换
系数乘以基数的权次幂, 结果相加.
练习:
把下面进制数用十进制表示
0b100101 -- 37
074 -- 60
0xf4 -- 244
5. 十进制到其他进制的转换
除以基数 取余数 直到商为0, 余数反转.
练习:
把下面2个数转换成八进制和十六进制
60 -- 74 -- 3c
244 -- 364 -- f4
6. 快速转换
8421码
二进制到八进制 从右到左 三位一组合,算十进制,结果拼接
二进制到十六进制 从右到左 四位一组合,算十进制,结果拼接
7. 有符号数据的表示
计算机中的数据都是以补码形式存在.
正数:
原码 反码 补码 都一样
负数:
反码是原码 符号位不变,数值位取反
补码是反码加1
练习:
1、已知原码(10110100),求反码,补码。
2、已知补码(11101110),求原码.
8. 变量
内存中一小块区域,应该有自己的变量名和数据类型,它可以在同一数据类型范围内不断变化.
格式:
数据类型 变量名 = 初始化值;
变形格式:
数据类型 变量名;
变量名 = 初始化值; // 在使用前进行初始化即可
注意: 变量在使用前必须进行初始化.
9. 基本数据类型
4类8种 :
整数型
byte -- 1个字节 : -128 ~ 127
short -- 2个字节 : -2^15 ~ 2^15 - 1
int -- 4个字节 : -2^31 ~ 2^31 - 1
long -- 8个字节 :
浮点型
float -- 4个字节
double -- 8字节
字符型
char -- 2个字节
'a' 'D' '中'
布尔型
boolean
只有两个值: true false
整形默认是int,浮点型默认是double型.
注意事项:
1) 在一个{}内,不能存在重名的变量
2) 变量要先初始化再使用(在使用之前初始化即可)
3) 为某一个变量赋值的时候尽量不要超过其能表示的范围. 也就是说如果想定义byte或者short类型, 那么保证数据在相应的范围内即可.
4) 变量名称的定义要见名之意,不要写一写容易混淆的
5) 定义long类型或者单精度浮点型变量的时候,一定要在数据的后面加L或者加F (防止混淆,建议大家采用大写)
10. 数据类型转换
自动类型转换(隐式转换)
byte char short -- int -- long -- float -- double
强制类型转换(显式转换)
(数据类型) 变量或者常量值;
注意问题:
1) 当参与运算的多个数据类型不一致时,参与运算的值会自动转换成范围最大的那个类型然后运算.
2) 而强制类型转换必须保证数据在想转成的数据类型范围内.
3) boolean类型不可以转换成其他类型.
强制类型转换的结果:
以byte为例:
1) 拿到数据后先获取其补码;
2) 然后截取最后8位,得到的是补码;
3) 再通过补码获取其原码, 最后显示给我们的数据是原码的十进制形式.
注意: 计算机中的数据运算都是以补码的形式进行的.
例如:
byte b1 = (byte)140; // -116
分析:
140的原码:
00000000 00000000 00000000 10001100
这是一个正数,所以其补码也是:
00000000 00000000 00000000 10001100
做强制类型转换,截取最后8位,得到的是补码:
10001100
观察到这是一个负数,所以想获取其原码,先得到反码(补码减1):
10001011
最后获取原码(反码的符号位不变,数值位取反):
11110100
这是数的十进制是:
-116
补充: 最小的byte类型数据是 -128 它的二进制表示形式是:1000 0000
关于byte面试题:
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2; // 此行会报错,因为参与运算的byte类型会自动提升为int类型, 可能损失精度.
byte b4 = 3 + 4; // 没问题,对于字面值常量3和4, jvm会在编译期对其进行计算(优化), 并比较其值是否在byte范围内,如果未超出,则不报错.
上述面试题与下面关于字符串的面试题(模样长得差不多),经常被问到:
String s1 = "a";
String s2 = "b";
String s3 = "ab";
System.out.println(s3 == s1 + s2); // false
System.out.println(s3 == "a" + "b"); // true
ASCII 码表概述:
'a' -- 97
'A' -- 65
'0' -- 48
11. 算术运算符
注意除运算符 / :
1) 除数不能为0.
2) 整形与整形进行运算,结果还是整形.它会将余数舍弃.
比如: 5 / 2 -- 结果是2
++ 和 -- 运算符:
以 ++ 为例:
单独运算:
在前在后都一样,相当于把值加1
参与运算:
++在前,先加后用. ++a 相当于 a = a + 1
++在后,先用后加. a++ 会产生一个临时的量, 这个量相当于a的一个副本,然后将a的值自增, 将副本的值返回.
举例:
int x = 10;
int y = x++;
// 结果是y = 10; x = 11;
int a = 10;
a = a++;
System.out.println(a); // 结果是10
加法运算符的特殊用法:
+ 运算符可以用来做基本数据类型的加.
也可以作为字符串的连接符 -- 遇到字符串前,会当做算术运算符计算,一旦遇到"", 后面的都是连接符了.
12. 赋值运算符
把运算符右边的值赋值给左边, 那么左边必须是一个变量.
+= : 左右两边相加再赋值给左边.
short s = 8;
s+=2; // 相当于 s = (short)(s + 2);
13. 比较运算符
比较运算符的运算结果都是boolean型.
14. 逻辑运算符
& -- 逻辑与 : 有假则假,全真才真
| -- 逻辑或 : 有真则真,全假才假
! -- 逻辑非 : 取反
^ -- 逻辑异或: 相同为假, 不同为真
短路与 &&
结果与单&一致, 前面出现了false,后面就不再判断.
短路或 ||
格式问题:
一般在运算符的两端都会有一个空格.
具体其他很多的格式问题(代码规范),具体的公司会有具体的要求.
15. 提醒大家一个问题:
变量是会变的.
int a = 10;
int b = 20;
a = a + b;
b = a + b;
sop(a + "***" + b); // 30 50
|
|