1 关键字
关键字在定义的时候,全部小写
2 标识符
标识符由「英文大小写、数字、$、_」组成,对于常见的命名格式为:
A:包,全部小写
B:类与接口,每个单词首字母大写
C:方法与变量,首字母小写,从第二个单词开始大写
D:常量,全部大写,多个单词使用_隔开
3 注释
注释分为三类,
A:单行注释 //
B:多行注释 /**/
C:文档注释
4 常量、进制与进制转换
4.1常量
常量被分为两大类,
A:字面值常量
- 字符串常量
- 整数常量
- 小数常量
- 字符常量
- 布尔常量
- 空常量(null)
B:自定义常量
4.2 原码、反码、补码
需要说明:
原码
- 正数原码的最高位是0;负数的原码最高位是1;
反码
- 正数的反码与原码相同
- 负数的反码与原码符号位相同,数值位取反(0变1,1变0)
补码
- 正数的补码与原码相同
- 负数的补码在反码的基础上+1
4.3进制转换
进制转换可以分二类,A:「x进制转换到10进制」;B:「10进制到x进制」;C:「x进制转换到x进制」;
A: 基权系数法
系数:就是每一个位上的数值
基数:x进制的基数就是x
权:对每一个位上的数据,从右,并且从0开始编号,对应的编号就是该数据的权。
结果:系数*基数^权次幂之和。
B:短除法
除基取余,直到商为0,余数反转。
C:快速转换法
8421码
5 变量
使用变量的时候要注意的三个问题:
A:作用域
变量定义在哪个大括号内,它就在这个大括号内有效。
并且,在同一个大括号内不能同时定义同名的变量。
B:初始化值
没有初始化值的变量不能直接使用。
你只要在使用前给值就行,不一定非要在定义的时候立即给值。
推荐在定义的时候给值
C:定义格式
a:数据类型 变量名 = 初始化值;
b:数据类型 变量名;
变量名 = 初始化值;
int a;
...
...
a = 5;
6 数据类型和类型转换
6.1 数据类型
Java是强类型语言,数据类型被分为两类
- 基本数据类型(4类8种)
- 引用数据类型(类、接口、数组)
基本数据类型 | 占用字节 |
---|---|
整数(byte) | 1 |
整数(short) | 2 |
整数(int) | 4 |
整数(long) | 8 |
浮点数(float) | 4 |
浮点数(double) | 8 |
字符(char) | 2 |
布尔(boolena) | 1 |
- 整数默认为int型
- 浮点数默认为double型
- long型整数需要加L
- 单精度浮点需要加F
6.2 数据类型转换
- boolean类型不参与转换
- 默认转换
- 从小到大
- byte,short,char-----int —long—float—double(转换顺序)
- byte,short,char三者不参与转换
- 强制转换
- 从大到小
- 可能会有精度的损失,一般不建议这样使用。
- 格式:目标数据类型 变量名 = (目标数据类型) (被转换的数据);
为什么float类型4字节,long类型8字节,但是在转换时long会被提升为float?
因为它们底层的存储结构不同,float表示的数据范围比long的范围要大
long:2^63-1
float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1
9 思考题
1.两种方式的区别?
A:float f1 = 12.345f;
B:float f2 = (float)12.345;
浮点数默认的精度为double类型,A方法在赋值阶段确定了浮点数为单精度的float类型,B方法进行强制转换,将原本默认的double类型转换为float类型,这个过程损失了精度
2.下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
有问题,第三句「byte b3 = b1 + b2;」出现问题,
变量相加会参照给定类型,b1,b2为byte类型,相加自动提升为int类型,这时类型冲突报错。
那为什么第四句「byte b4 = 3 + 4;」不报错?
因为3+4为常量,而常量会先把结果计算出来,进行判断是否在byte允许的范围内,在就不报错
第三句「byte b3 = b1 + b2;」b1,b2为变量,不会进行数值允许的判断
3.下面的操作结果是什么呢?
byte b = (byte)130;
粗略看下来这个问题是有问题的,因为byte的范围在-128-127之间,但又是没有问题的,因为强制转换了
计算结果分为三部
(1)计算二进制
130 = 00000000 00000000 000000000 10000010
(2)截取为byte类型
得到:10000010
(3)已知补码求原码(计算机中的计算是针对补码的计算)
符号位 数值位
补码 1 0000010
反码 1 0000001
原码 1 1111110
所以最终看到的结果为11111110 = -126
4. 连接符号
System.out.println("hello"+'a'+1); // helloa1 这里的+不是加法运算,而是字符串连接符。
System.out.println('a'+1+"hello"); // 98hello 加法运算(字母与数字相加)
System.out.println("5+5="+5+5); // 5+5=55 这里的+不是加法运算,而是字符串连接符。
System.out.println(5+5+"=5+5");// 10=5+5 +是加法的意思
int a = 100;
int b = 20;
5. 交换a和b数据
方法1:异或法,一个数据对另一个数据位异或两次,该数本身不变。
a = a ^ b;
b = a ^ b; //b = a
a = a ^ b; //a = a ^ b ^ a
方法2:第三个变量
int c = a;
a = b;
b = c;
方法3:变量相加的做法
a = a + b; // 120
b = a - b; // 100
a = a - b; // 20
方法4:一句话搞定
b = (a + b) - (a = b); // 120 - 20