进制:某一位置上的数运算时是逢X进一位。
特点:进制越大,表现形式越短。
表现形式:
- 二进制:由0,1组成。以0b开头
- 八进制:由0,1,…7组成。以0开头
- 十进制:由0,1,…9组成。整数默认是十进制的
- 十六进制:由0,1,…9,a,b,c,d,e,f(大小写均可)。以0x开头
byte = 8bit | 1k = 1024b |
---|---|
1m = 1024k | 1g = 1024m |
1t = 1024g |
硬盘大小:500g = 500*1000*1000*1000/1024/1024/1024 ≈465g(实际硬盘大小)
X进制转换十进制:系数*基数的权次幂相加
- 2转10:0b100 = 1*2^2+0*2^1+0*2^0 = 4
- 8转10:0100 = 1*8^2+0*8^1+0*8^0 = 64
- 10转10:100 = 1*10^2+0*10^1+0*10^0 = 10
- 16转10:0x100 = 1*16^2+0*16^1+0*16^0 = 256
系数:就是每一位上的数据
基数:X进制,基数就是X
权:在右边,从0开始编号,对应位上的编号即为该位的权。
十进制转换X进制:除积倒取余数
比如:60 =74(8进制)
快速进制转换法:8421码
每一位二值代码的1都是代表一个固定数值,把每一位的1代表的十进制数加起来,得到的结果就是它所代表的十进制数码。
原码反码补码
注意:超过符号位就直接被砍掉
- 常量:其值不可以发生改变
- 变量:在某个范围内其值可以发生改变的量(用来不断的存放同一类型的常量,并可以重复使用)
定义格式:数据类型 变量名 = 变量值;
数据类型:对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。
分类:基本数据类型、引用数据类型
- 整数型
byte: 占一个字节 -128到127
short:占两个字 -2^15~2^15-1
int :占四个字节 -2^31~2^31-1
long:占八个字节 -2^63~2^63-1 - 浮点型
float :占四个字节 -3.403E38~3.403E38 单精度
double :占八个字节-1.798E308~1.798E308 双精度 - 字符型char :占两个字节 0~65535
- 布尔型boolean:理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小
- 整数型
注意事项:
- 同一个区域不能使用相同的变量名
- 局部变量在使用之前必须赋值
- 数据类型之强制转换:
- 如果超出了被赋值的数据类型的取值范围得到的结果会是意想不到的结果。
- 进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的。
byte,short,char – int – long – float – double
字符char可以存储一个中文汉字吗?为什么呢?
可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。中文也是占的两个字节。
所以,Java中的字符可以存储一个中文汉字。
JDK5特性:
自动装箱:把基本类型转换为包装类类型
自动拆箱:把包装类类型转换为基本类型
运算符:对常量和变量进行操作的符号。
注意事项:
- +号在java中有三种作用:代表正号;做加法运算;字符串的连接符。
- 整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型。
- /获取的是除法操作的商,%获取的是除法操作的余数。
- %运算符
当左边的绝对值小于右边绝对值时,结果是左边。
当左边的绝对值等于右边或是右边的倍数时,结果是0。
当左边的绝对值大于右边绝对值时,结果是余数。
%运算符结果的符号只和左边有关系,与右边无关。
任何一个正整数%2结果不是0就是1可以用来当作切换条件。
算术运算符
- ++:自加。对原有的数据进行+1
- –:自减。对原有的数据进行-1
- 放在操作数的前面,先自增或者自减,然后再参与运算。
- 放在操作数的后面,先参与运算,再自增或者自减。
赋值运算符
- 基本赋值运算符:=
- 把=右边的数据赋值给左边。
- 扩展的赋值运算符:+=,-=,*=,/=,%=
- += 把左边和右边做加法,然后赋值给左边。
关系运算符(比较运算符,条件运算符): == , != , > , >= , < , <=
注意事项:
- 结果是boolean类型。
- “==”不能写成”=”。
“==”和”equals”的区别
- “==”是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值。
- “equals”是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性。
逻辑运算符:&,|,^,!,&&,||
- &逻辑与:有false则false。
- |逻辑或:有true则true。
- ^逻辑异或:相同为false,不同为true。
- !逻辑非:非false则true,非true则false。偶数个不改变本身。
位运算符:& , | , ^ , ~ , >> , >>> , <<
- &:有0则0
- |:有1则1
- ^:相同则0,不同则1。 一个数据对另一个数据位异或两次,该数本身不变。
- ~:按位取反
- <<:左移 左边最高位丢弃,右边补齐0;向左移动几位就是乘以2的几次幂
- >>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1; 向右移动几位就是除以2的几次幂
- >>>:无符号右移 无论最高位是0还是1,左边补齐0
- 最有效率的算出2 * 8的结果是:2<<3
三元运算符:(关系表达式) ? 表达式1 : 表达式2;
流程控制语句:可以控制程序的执行流程(顺序结构:从上往下,依次执行)。
选择结构: if语句,switch语句
if语句
if(比较表达式1) {
语句体1;
}else if(比较表达式2) {
语句体2;
}else if(比较表达式3) {
语句体3;
}
...
else {
语句体n+1;
}
注意:最后一个else可以省略,但是建议不要省略,可以对范围外的错误值提示。
switch语句
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}
- 先计算表达式的值。
- 然后和case后面的匹配,如果有就执行对应的语句,否则执行default控制的语句。
注意事项:
- case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的。
- break:最后一个可以省略,其他最好不要省略。省略会发生case穿透。建议不要省略。
- default可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。它可以在任意位置。但是建议在最后。
- 结束条件:遇到break或执行到switch的右大括号就结束了。
实用场景:
- switch建议判断固定值的时候用。
- if建议判断区间或范围的时候用。
什么时候if语句实现不能用三元改进呢?
当if语句控制的操作是一个输出语句的时候就不能。
因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。
循环结构
for(初始化表达式;条件表达式;循环后的操作表达式) {
循环体;
}
注意事项:
- 判断条件语句结果是boolean类型。
- 循环体语句如果是一条语句,大括号可以省略;
- 如果是多条语句,大括号不能省略。建议永远不要省略。
- 一般来说:有左大括号就没有分号,有分号就没有左大括号。
while循环
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
循环结构do…while
初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
增强for循环
for(元素数据类型 变量 : 数组或者Collection集合) {
使用变量即可,该变量就是元素
}
for与while 和do while的区别:
- do…while循环至少执行一次循环体。
- for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
- for语句执行后变量会被释放,不能再使用。提高内存的使用效率。
- while语句执行后,初始化变量还可以继续使用。
return和break以及continue的区别?
return:不是结束循环的,而是结束方法。
break的使用场景:只能在switch和循环中(跳出循环)
continue的使用场景:只能在循环中(终止本次循环,继续下次循环)
标号的使用场景:嵌套循环语句(跳出外循环)
标号:标记某个循环**对其控制
标号组成规则:其实就是合法的标识符
三种迭代的能否删除?
- 普通for循环,可以删除,但是索引要–。
- 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常。
- 增强for循环不能删除。
转移字符
‘\x’ x表示任意,\是转义符号,这种做法叫转移字符。
- ‘\t’ tab键的位置
- ‘\r’ 回车
- ‘\n’ 换行
- ‘\”’ 双引号
- ‘\” 单引号