Java 基础要点

188 阅读7分钟
Java 的数据分类主要分为两大类
  • 基本数据类型:byte,char,short,int,long,float,double,boolean
  • 引用数据类型:数据、类、接口、枚举、标注(注解)
正十进制转换为二进制
  • 除二取余法:不断除以2取出余数,直到商为0时将余数逆序排序:45--->10 1101 (0b/0B可以作为二进制的前缀)
  • 拆分法:把十进制整数拆分为若干个二进制权重的和,有该权重下面写1,否则写0
                           128   64   32   16   8   4   2   1

45--->32+8+4+1-------->     0    0     1    0   1   1   0   1------>   10 1101
正二进制转换为十进制

加权法:使用二进制中的每个数字乘以当前位的权重在累加起来(拆分法的逆运算)

0010 1101---> 0*2^7+0*2^6+1*2^5+0*2^3+1*2^3+1*2^2+0*2^1+1*2^0 ----> 32+8+4+1=45

负十进制转换为二进制

先将十进制的绝对值转换为二进制,然后按位取反再加一

-45->45->0010 1101->(取反)1101 0010->(+1)1101 0011

负二进制转换为十进制

先减一,在取反,在使用加权法,再在数字前添加负号

1101 0011->(-1)1101 0010->(取反)0010 1101->45->-45

单个字节表示的整数范围

在计算机中单个字节便是八位二进制位,其中最高位(最左边)代表符号位,使用0代表非负数,使用1 代表负数,具体表示的整数范围如下

非负数所能表示的整数范围: 0000 0000 ~ 0111 1111---> 0 ~ 2^7-1
  负数所能表示的整数范围: 1000 0000 ~ 1111 1111
 	            其中:1000 0000->(-1)0111 1111->(取反)1000 0000->(加权法)128->(添加负号)-128
                    其中:1111 1111->(-1)1111 1110->(取反)0000 0001->(加权法)1->(添加负号)-1

综上所述:单个字节所能表示的整数范围是 -128 ~ 127 -> (-2^7~2^7-1)

整数类型
  • Java语言中描述整数数据的类型有:byte、short、int、long,推荐 int 类型
  • 其中 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,推荐L。
//考点
int i1 = 250250006;      //错误:整数太大    默认为 int 类型,这个数据已经出错,无法表示
int i1 = 250250006L;     //错误:不兼容的类型  从long转换到int可能会有损失
//----------------------
int i = 25;
byte a = i;		//错误:不兼容的类型,从int转换到byte可能会有损失(因为i1是变量,无法确定直接值的大小)
浮点数类型
  • Java 语言中用于描述小数数据的类型:float 和 double ,推荐 double 类型
  • float 类型在内存空间占 4 个字节,叫做单精度浮点数,可以表示7位有效数字,范围: -3.403E38 ~ -3.403E38。
  • double 类型在内存空间占 8 个字节,叫做双精度浮点数,可以表示15位有效数字,范围: -1.798E308 ~ 1.798E308。
float f1 = 3.14123; //错误:不兼容的类型,从double转换到float可能会有损失  小数数据叫做直接量,默认为double类型
//---------------------
float f2 = 3.14131232F; //结果 f2 = 3.1413124  因为float的有效数字为7位,所以第八位以后的数字不保证正确

System.out.println(0.1 + 0.2);  //结果 0.30000000000000004   浮点数运算时可能会有误差,不能得到精确的结果,如果需要精确运算,则借助BigDecimal类型
字符类型
  • Java 语言中用于描述单个字符的数据类型:char 类型。如:'a','中' 等。
  • char 类型在内存空间中农占2个字节,并且没有符号位,表示的范围是:0 ~ 65535,由于现实生活中很少有数据能够被单个字符描述,因此以后的开发中更多的使用由多个字符串起来组成的字符串,使用 String 类型加以描述,如 :"hello" 等。
  • 计算机的底层只识别 0 和 1 组成的二进制序列,对于字符 'a' 这样的图案来说不满足该规则,因此该数据无法直接在计算机中存储,但现实生活中存在这样的图案需要计算机存储,为了使得该数据能够存储起来就可以给该数据指定一个编号,然后将编号存储起来即可,该编号就叫做ASCII。
  • 要求掌握的ASCII有:'0' - 48,'A' - 65,'a' - 97, 空格 - 32,换行符 - 10
  • Java 字符类型采用 Unicode 字符集编码。Unicode是世界通用的定长字符集,所有的字符都是16位。
  • 转义字符(\):转换字符原有的含义
    • 要求掌握的转义字符:\" - ",\' - ' ,\\ - \ ,\t - 制表符,\n - 换行符
基本类型转换
  • Java语言基本数据类型之间的转换方式:自动类型转换和强制类型转换
  • 其中自动类型转换主要指从小类型到大类型之间的转换 byte -> short -> int -> long -> float - >double | char -> int
  • 其中强制类型转换只要指从大类型到小类型之间的转换,语法格式如下: 目标类型 变量名 = (目标类型)源类型变量名
为什么强制转换可能会丢失精度:
short 占两个字节               128-> 0000 0000 1000 0000
byte 占一个字节,转换后默认取低八位->           1000 0000
1000 0000(代表负二进制)->(-1)0111 1111->(取反)1000 0000->(加权法)128->(添加负号)-128
所以强制转换丢失了精度

运算符

  • 自增/自减运算符:++/--
自增运算符在前在后的区别:i++ 整体叫表达式,i  叫做操作数/变量,
i++ 表示先让变量的数值作为整个表达式的最终结果,然后在让 i 自身的数值加 1。
++i 表示先让变量 自身的数值加1,再让变量的数值作为整个表达式的结果。
  • 赋值运算符:+=、-=、*=、/=
//考点:b1 = b1 + 1 与 b1 += 1 的区别
byte b1 = 10;
System.out.println("b1 = " + b1);
b1 = b1 + 2; //错误:不兼容的类型。从 int 转换到 byte 可能会有损失      byte + int 的结果还是 int 类型
b1 = b1 + (byte)2; //错误:不兼容的类型。从 int 转换到 byte 可能会有损失     byte + byte 的结果还是 int 类型,编译器优化
b1 = (byte)( b1 + 2 );	//正确,编译通过
b1+=2;     //正确,编译通过,真正等价于 b1 = (byte)( b1 + 2 );