java基础
2019-01-23 本文已影响1599人
会摄影的程序员
1. 常量
- 字符串常量
- 整数常量
- 小数常量
- 字符常量:单个数字,单个字母,单个符号
- 布尔常量
- 空常量
2. 进制
- 二进制:0/1组成,以0b开头,b大小写都可以,JDK7可以表示二进制
- 八进制:0-7,0开头
- 十进制:整数默认
- 十六进制:0-F,0x开头
- 进制转换:
3. 源码反码补码
3.1. 源码
就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
通过一个字节,也就是8个二进制位表示+7和-7
0(符号位) 0000111
1(符号位) 0000111
3.2. 补码
正数的补码与其原码相同;
负数的补码是在其反码的末位加1。
3.3. 反码
正数的反码与其原码相同;
负数的反码是对其原码逐位取反,但符号位除外。
4. 变量
4.1. 基本数据类型
4.1.1. 整数型
- Byte 占一个字节 -128~127
- Short 占两个字节 -215~215-1
- Int 占四个字节 -231~231-1
- long 占八个字节 -263~263-1
4.1.2. 浮点型
- float 占四个字节 -3.403E38~3.403E38
4.1.3. 字符型
- char 占两个字节 0~65535
- java中char可以存放中文吗?
可以 英文java中char采用的是unicode编码占两个字节,中文也是两个字节
4.1.4. 布尔型
- Boolean boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小
4.1.5. 注意点
- byte与byte,short,char 会提升为int
- java有常量优化机制,等式中的常量会在编译时进行运算
- 在混合运算时,(byte,short,char)不会相互转换,都会提升为int,其他提升一个等级;int--long-double
- float比long大
Long: 8个字节
float:4个字节
IEEE754
4个字节是32个二进制位
1位是符号位
8位是指数位
00000000 11111111
0到255
1到254
-126到127
23位是尾数位
每个指数位减去127
A:它们底层的存储结构不同。
B:float表示的数据范围比long的范围要大
long:2^63-1
float:3.410^38 > 210^38 > 28^38 = 22338 = 2*2^114 > 2^63-1
4.2. 引用数据类型
4.2.1. 数组
- 整数类型:byte,short,int,long——初始值0
- 浮点型:float,double——初始值为0.0
- 布尔型:boolean——初始值为false
- 字符型:char——默认值为‘\0000’
5. 内存分配
- 栈 存储局部变量
- 堆 new出来的对象
- 方法区 编译之后 的class文件进入内存
- 本地方法区 与系统相关
- 寄存器 给CPU使用
6. 运算符
6.1. 基本运算符
- 加
- 减
- 乘
- 除
- 取余
对二取余可以最为判断条件 - 自增减
++a 为先加再用
a++ 为先用再加
6.2. 逻辑运算符
6.2.1. &&与&的区别
效果相同,但是&&左边为false,右边就不会执行了
6.2.2. ||与|的区别
效果相同,同上与短路效果
6.3. 位运算
-
位与—— &
有0则0
-位或—— | -
位且—— ^
-
位非—— ~
-
^ 的特点
一个数据对另一个数据异或两次,该数不变- 交换两个数据,不需要定义第三方变量
public class NoTemp { public void one(int x, int y){ x = x + y; y = x - y; x = x - y; System.out.println("x的值为:"+x+" "+"y的值为:"+y); } private void two(int x, int y) { x = x^y; y = x^y; x = x^y; System.out.println("x的值为:"+x+" "+"y的值为:"+y); } public static void main(String[] args){ NoTemp noTemp = new NoTemp(); int x = 100; int y = 1200; noTemp.one(x,y); noTemp.two(x,y); } }
-
<<左移
左边高位丢弃,右边补齐0:左移即为就是乘以2的几次幂 -
>>右移
无论最高位是0还是1,左边补齐0: 向右移动几位就是除以2的几次幂
6.4. 三元运算符
(关系表达式)? 表达式 1 : 表达式2
如果表达式成立则为1反之为2
三元运算符可以做的if都ok
if可以的三元运算符不一定可行
三元运算符 是一个运算符,不能输出
7. 流程控制
7.1. switch注意点
- case的值:可以提升到int 的都ok,java7开始支持String
- case的值不能相同,且不能为变量
- default可以省略,但是不建议省略|写在switch任意位置都有效果会影响程序在switch中执行的位置
- break省略会造成case穿透
- 建议switch固定值,建议if为区间