Java基础知识体系
 (一)、计算机与java
 (二)、变量与类型
 (三)、运算符
 (四)、流程控制
 (五)、数组
(二)、变量与类型
 常量 程序运行中 其值 不可改变的量
 变量 在一定范围内 其值可以改变的量
1,常量
 自定义常量 面向对象
字面值常量:
 字符串常量 “世界,您好!”
 整数常量 10 20 300
 小数常量 1.10 12.33
 字符常量 用英文半角下的单引号引起来的单个字符 ‘a’ ‘A’ 空字符常量 ‘’
 布尔常量 true false
 空常量 vnull 即NullPointException
2,进制
 计算机中存储的最小单位是bit (比特) ,最小的计量单位是byte (一个字节)
 1 byte = 8 bit
 1 k = 1024 byte
 1 m = 1024 k
 1 g = 1024 m
 1 t = 1024 g
 1 p = 1024 t
单个字节表示的整数范围
 在计算机中单个字节表示八位二进制位,其中最高位(最左边)代表符号位,使用0代表非负数,使用1代表负数,具体表示的整数范围如下:
 非负数表示范围:0000 0000 ~ 0111 1111 => 0 ~ 127 => 0 ~ 2^7-1
 负数表示范围:1000 0000 ~ 1111 1111 => -128 ~ -1 => -2^7 ~ -2^0
 单个字节表示的整数范围是:-2^7 ~ 2^7-1 ,也就是-128 ~ 127.
进制分类
 二进制: 以0b(0B)开头, 由0和1组成 ; 举例:0b10100 ,最高位(最左边)代表符号位,若该位是0则表示非负数,若该位是1则表示负数
 在计算机的底层采用0和1组成的二进制序列进行数据的描述,逢二进一,二进制的权重是20、21、2^2、…
 十进制: 开头没有符号,由0…9 开头不能为0 举例:100,
 在日常生活中采用,逢十进一,十进制权重是:100、101、10^2、…
 八进制: 以0 开头, 由0-7 组成 ; 举例: 01237,对二进制的缩写
 十六进制: 以0x(0X)开头, 由0 - 9, a,b,c,d,e,f 举例: 0x3C 0X2B,对二进制的缩写
进制转换
 任意进制转换成十进制: 正进制数
 系数: 一个数每一位上的数就是系数
 基数: 几机制就是基数就是几 , 十进制基数是是10 , 八进制基数是8 …
 权: 从右向左,从0开始编号,每一位上的编号就是权
 结果: 系数 * 基数^权 之和
 十进制 位全展开法: 12345 = 1 * 10 ^ 4 + 2 * 10 ^ 3 + 3 * 10 ^2 + 4* 10 ^ 1 + 5 * 10 ^0
练习:
 二进制转十进制 0b111 = 12^2 + 12^1 + 1 * 2^0 = 7
 八进制转十进制 077 = 78^1 + 78^0 = 56+ 7 = 63
 十六进制转十进制 0x9a = 9* 16^1 + 10 * 16 ^0 = 144 + 10 = 154
 
 十进制变到其他任意进制: 正进制数
 除基倒取余,直到商为0
 举例: 80 算二进制除的是2, 商为0的的时候, 倒取语句
 结果:
 二进制 0b1010000
 八进制 o120
 十六进制 ox50
正十进制转换为二进制的方式
 a.除2取余法,使用十进制整数不断地除以2取出余数,直到商为0时将余数逆序排序。
 b.拆分法,将十进制整数拆分为若干个二进制权重的和,有该权重下面写1,否则写0
 
正二进制转换为十进制的方式
 a.加权法,使用二进制中的每个数字乘以当前位的权重再累加起来。
 
负十进制转换为二进制的方式
 a.先将十进制的绝对值转换为二进制,然后进行按位取反再加1,负数的需要补码:按位取反,再加1 。
 
 负二进制转换为十进制的方式
 a.先减1再按位取反,合并为十进制整数后添加负号。
 
 3,原码反码补码
 原码: 二进制的定点标示法. 0 和 1组成. 最高位是符号位 1负数, 0 代表正数
 -5 : 10000101
 5 : 00000101
 反码: 正数的反码和原码一样, 负数的反码符号位不变,其他为按位取反.
 5 的反码: 00000101
 -5 的反码: 11111010
 补码: 正数的补码和原码也相同, 负数的补码,在其反码的基础上 +1
 5 的补码: 00000101
 -5的补码: 11111011
 练习:
 10101011 (原码) ----- 求补码 - (32 + 8 + 2 + 1) = -43
 11010101
 10001110 (是补码) ----- 求原码
 11110010
4,变量
 变量概念
 当需要在程序中记录单个数据内容时,则声明一个变量,而声明变量的本质就是在内存中申请一个存储单元,由于该存储单元中的数据内容可以发生改变,因此得名为"变量"。
 由于存放的数据内容大小不一样,导致所需存储单元的大小不一样,在Java语言中使用数据类型加以描述,为了便于下次访问还需要给该变量指定一个名字,用于记录该变量对应的存储单元。
变量声明
 定义变量: 1)数据类型 2)变量名(标识符) 3) 变量值
 格式: 数据类型 变量名 = 变量值; //将变量值给变量名,变量值就相当于未知数x保存了这个数,变量值可以省略,后续再传递值
变量注意事项
 Java是强类型语言,变量在使用前必须声明来指明其数据类型。
 变量在使用之前必须初始化。
 变量不能重复声明
Java标识符
 由数字、字母、下划线以及$等组成,其中数字不能开头(后面讲到)。
 不能使用Java语言的关键字。
 区分大小写,长度没有限制但不宜过长。
 尽量做到见名知意,支持中文但不推荐使用。
 标识符可以给类/变量/属性/方法/包 起名
 
数据类型
 引用数据类型:String,数组,对象,接口,枚举,标注
 基本数据类型:4类8种
 byte 整型: 内存空间中占1个字节,表示范围是:-2^7 ~ 2^7-1
 short 整型: 2个字节,表示范围是:-2^15 ~ 2^15-1
 int 整型: 4个字节,表示范围是:-2^31 ~ 2^31-1.
 long 整型: 8个字节,表示范围是:-2^63 ~ 2^63-1
 在Java程序中直接写出的整数数据叫做直接量/字面值/常量,默认为int类型。若希望表达更大的直接量,则在直接量的后面加上l或者L
float 浮点型: 4个字节,叫做单精度浮点数,可以表示7位有效数字,范围:-3.403E38~3.403E38。
 double 浮点型: 4个字节,叫做单精度浮点数,可以表示7位有效数字,范围:-3.403E38~3.403E38。
 Java程序中直接写出的小数数据叫做直接量,默认为double类型,若希望表达float类型的直接量,则需要在直接量的后面加上f或者F
boolean 布尔型: 默认1个字节,Java语言中用于描述真假信息类型有:boolean,数值只有:true 和 false
char 字符型: 占2个字节并且没有符号位,表示的范围是:0 ~ 65535,Java语言中用于描述单个字符的数据类型 ‘a’、'中’等
 由于现实生活中很少有数据能够被单个字符描述,因此以后的开发中更多的使用由多个字符串起来组成的字符串,使用String类型加以描述,如:“hello”、“奇点”等。
计算机的底层只识别0和1组成的二进制序列,对于字符’a’这样的图案来说不满足该规则,因此该数据无法直接在计算机中存储,但现实生活中存在这样的图案数据需要计算机存储,为了使得该数据能够存储起来就可以给该数据指定一个编号,然后将编号存储起来即可,该编号叫做ASCII。
 常见ASCII有:‘0’ - 48 ‘A’ - 65 ‘a’ - 97 空格 - 32 换行符 - 10
 
Java字符类型采用Unicode字符集编码。Unicode是世界通用的定长字符集,所有的字符都是16位。
 常用的转义字符:" - " ’ - ’ \ - \ \t - 制表符 \n - 换行符
5,数据类型之间转换
 自动类型转换:从小类型到大类型之间的转换
 强制类型转换:从大类型到小类型之间的转换,语法格式如下:目标类型 变量名 = (目标类型)源类型变量名;
 
 注意:强转有风险,操作需谨慎!
 把大的数据类型的数据给小的数据类型, 就会发生数据溢出,导致损失精度
举例:
 int x = 20; // int x 是4个字节
 byte b = x; //会报错 // byte b是一个字节
 解决办法: byte b = (byte)x; //强制类型转换, 告诉编译器,你转把,我知道会发生精度损失.
class Demo3{
 public static void main(String[] args){
 char c = ‘a’;
 byte b = 10;
 short s = (short)(c + b);
 //byte char short 他们三个再做运算的时候都会提升为int数据类型.
 }
 }
 变量与常量参与运算
 byte b = 8 + 8; 常量优化机制, 8+8 的结果先运算出来, 判断是不是在byte的取值范围内,如果在就赋值,如果不在报错
 byte b1 = 10;
 short b2 = 20;
 byte b3 = b1 + b2; //变量相加没有优化机制, b1 + b2 都会提升为int类型, 会把一个int类型赋值给一个byte,损失精度,且报错
 小总结:byte,short,char,int 之间的运算,都先自动转换为int型,后再运算;小数,则自动转为double型再计算
6,变量作用域
- 1)一般变量的作用范围在一个大括号中,超过这个范围报错
 - 2)变量定义在上面,使用在下面
 -  
  
- 同一个作用域不能有相同名称的变量
全局变量
局部变量
成员变量
类变量
对象变量 
 - 同一个作用域不能有相同名称的变量
 










