2_标识符,基本数据类型,Scanner,类型转换,二进制原码
Java学习笔记2
南山的风吹散了谷堆,北海的水淹没了墓碑.
不是每个人,在蓦然茴首时,都可以看得到灯火阑珊处的那个人
Debug 工具
Debug调试,又被称为断点调试,断点其实是一个标记,告诉Debug从标记的地方开始查看;
可以运行两个断点之间的代码
标识符命名规则
- 由数字、字母、下划线(_)和美元符($)组成
- 不能以数字开头
- 不能是关键字
- 区分大小写
标识符命名规范
小驼峰命名法:变量
规范1:标识符是一个单词的时候,所有字母小写 name
规范2:标识符由多个单词组成的时候,从第二个单词开始,首字母大写 firstName
大驼峰命名法:类
规范1:标识符是一个单词的时候,首字母大写 Student
规范2:标识符由多个单词组成的时候,每个单词的首字母大写 GoodStudent
基本数据类型
整数默认是int 当long时数据尾部加L
浮点数默认是double 当float时数据尾部加F
byte型数据取值范围-128~127
Scanner
输入字符串是scanner.next()
整数浮点数是scanner.nextInt;scanner.nextDouble;
字符串拼接
当 + 操作中,遇到了字符串,这时 + 就是字符串连接符,而不是算术运算。
1 | |
输出:1+1=11
原因:逐个分析数据,先+1,然后整体再+1;就是”1+1=1“+1,结果1+1=11
自增自减
只操作变量。(常量不行)
- 如果放在变量的后边,在变量的后面,先拿变量的值进行运算,再对变量的值进行+1、-1
- 如果放在变量的前边,先对变量进行+1、-1,再拿变量的值进行运算。
1 | |
类型转换
隐式转换
介绍: 将取值范围小的数据或变量, 给取值范围大的变量赋值, 可以直接赋值
取值范围从小到大
1 | |
问题: float占用4个字节, 为什么放在了long(8个字节)的后面*
解释: 虽然float占用4个字节, 但是 [取值范围] 要比8个字节的long 更大
- 小数的二进制存储形式, 更加节省内存*
基本的隐式转换:
把一个取值范围小的数值或者变量,赋值给另一个取值范围大的变量
运算中的隐式转换:
取值范围小的数据,和取值范围大的数据进行运算,小的会先提升为大的之后,再进行运算
byte short char 三种数据在运算的时候,都会提升为int,然后再进行运算
强制转换
介绍 : 将取值范围大的数据或变量, 给取值范围小的变量赋值, 不允许直接赋值, 需要加入强转
注意 : 强制转换 [有可能] 会出现精度损失
强转中的精度损失
1 | |
解释:
1.整数130 :默认为int,int占用4个字节,也就是4组8个二进制位
00000000 00000000 00000000 10000010
2.强转到byte:4个字节,强制转换为1个字节,就是砍掉前3组8位
10000010
3.根据运算后的补码,反向推原码
11111110 即-126
计算机中进制的分类∶
1 | |
类型转换两种实例:
类型转换面试题 : 下列代码是否存在错误, 如果有, 请指出说明, 并改正
1 | |
错误原因:
b1和b2是两个byte类型, 在运算的时候, 会提升为int类型
提升之后, 就是两个int在运算了, 运算的结果还是int.
将int类型的结果, 赋值给byte类型的变量, 属于大给小, 不能直接给.
修改后:
1 | |
下面代码是否能编译通过:
1 | |
可以解释:Java存在常量优化机制 : 在编译的时候 (javac) 就会将3和4这两个字面量进行运算.
产生的字节码文件 : byte b = 7;
反编译
可以将编译好的.class文件拖到IDEA中(或者直接jdk工具),查看编译后的文件变化。
如上述:byte b = 3+4 ;
反编译后 :byte b = 7;
反码 原码 补码
计组中的知识点,简单汇总
原码
数据的二进制体现形式,一个字节由 8 个二进制位组成
高位:二进制数据中,最左侧的数据,通过高位代表符号位
0 代表正数
1 代表负数
其余位,表示数值大小
弊端:遇到负数运算,可能会出现错误
反码
正数的反码与其原码相同
负数的反码是对其原码逐位取反,但符号位除外
补码
正数的补码与其原码相同
负数的补码是在其反码的末位加1