1.编译与运行
javac.exe——编译工具,编译java文件,生成.class字节码文件
java.exe——运行工具,在类中,找到入口方法执行
.java文件编译时不区分大小写
.class文件运行时区分大小写,因为是.java文件中的类名。
class不用public时,可以不用文件名与类名一致。
反之,则必需一致,推荐保持一致方便后续管理
2.final关键字
最终变量
final int MAX=100;
//声明常量
//==const MAX=100
3.不同进制表示
十进制: 10
二进制:0B10 || 0b10
八进制:010 //最独特的直接以0为始
十六进制:0x10 || 0X10
4.一字节表示十进制范围
一字节表示的是存储在计算机里的8bit(位)数据,字节是最基本的单位,bit(位)是最小的单位。针对基本单位一字节在计算机里存储的是以反码的形式,且最高位是符号位,不会参与到换算里或被取反,只表示数据的正负。
0不是正数。
正数三码相同(原码,反码,补码),所以8bit正数最大的就是(0111 1111)= 127
最小正数就是(0000 0001)=1
(0000 0000)=0
负数,以补码形式存储,所以先取两个边界——(1000 0001)、(1111 1111)
(1000 0001)补码 = (1000 0000)反码 = (1111 1111)原码 = (-127)十进制
(1111 1111)补码 = (1111 1110)反码 = (1000 0001)原码 = (-1)十进制
最后特殊情况之(1000 000)补码(本来应表示-0,可是已经有表示0的字节了,无意义,所以另外表示一个数字):
计算情况=(1000 0001)补码-(0000 0001)补码=(1000 0000)补码
-127 - 1 = -128
所以一字节表示十进制范围(-128~127)
5.java基本数据类型存储
- 为什么float(4个字节)比long(8个字节)的存储范围大?
- 为什么float和double不精确?
- 为什么double(8个字节)比float(4个字节)精度范围大?
- 以上问题涉及到小数在计算机中存储问题。
6.编码表
编码表就是用数字来代表字符,ASCII编码表就是有1个字节(0~255)表示256个字符。
unicode编码表俗称万国表,以两个字节(0~65535),表示全球范围内的字符。
Java使用Unicode字符集来表示每一个字符,即每一个字符对应一个唯一的Unicode编码值。char类型的数值参与算术运算或比较大小时,都是用编码值进行计算的。
7.转义字符
某些特殊字符需要使用转义的方式表示
可运用场景:System.out.println("edison\tcheng")
\n:换行
\r:回车
\t:Tab键
\\:\
\":"
\':'
\b:删除键Backspace
8.m++与++m的区别
int m=1;
m=m++;
System.out.println(m);
你能说出上式的结果吗?m打印出来是多少呢?
结果为1。
m=++m
1.先对变量进行自增
2.再将m值放入到操作数栈中
3.取出操作数栈中的值赋值给m.
m=m++
1.先将m值放入到操作数栈中
2.再对变量进行自增
3.取出操作数栈中的值赋值给m,覆盖掉前面自增的m值
9.位运算符
注意位运算符针对的都是补码,负数位移后需要转换为原码才能得到正确的值
<<
左移运算符,左移几位,相当于乘以2的几次方。
如果左移的位数超过变量的数据类型的总位数,需要先减去总位数,再用剩余的值进行位移。
例如:3>>34 3是int型,占4字节,32位。 其等价于3>>(34-32)即3>>2 = 12.
>>
右移运算符,右移几位,相当于除以2的几次方。
如果右移的位数超过变量的数据类型的总位数,需要先减去总位数,再用剩余的值进行位移。
负数进行右移运算时,高位补1。
Tips
注意byte、short数据类型在进行运算时会自动提升到int。
例如:byte b=3 b<<7 结果:384
>>>
无符号右移,无论负数还是正数,高位都补0。
10.运算符优先级
11.重载与重写
重载:
方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
重写:
1.必须保证父子类之间重写方法的名称相同。
2.必须保证父子类之间重写方法的参数列表也完全相同。
2.子类方法的返回值类型必须【小于等于】父类方法的返回值类型(小于其实就是是它的子类,例如:Student < Person)。
注意:如果返回值类型是基本数据类型和void,那么必须是相同
3.子类方法的权限必须【大于等于】父类方法的权限修饰符。
注意:public > protected > 缺省 > private
父类私有方法不能重写
跨包的父类缺省的方法也不能重写