Java学习笔记02——Java语言基础

时间:2023-02-26 17:44:26

一、Java数据类型

1.数据类型分为8种基本数据类型和引用数据类型,视频中所说的自定义数据类型应该也属于引用数据类型。
2.字符类型char占用2个字节。
3.布尔类型boolean占用空间详细解释:
(1)4字节:在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,对32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),具有高效存取的特点;
(2)1字节:boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。


二、为什么使用包装类

1.包装类提供了一些常用的静态属性(常量)和静态方法,可以由类直接调用(如该数据类型的最大值、最小值,将字符串变为基本数据类型);
2.Java中一切皆对象,包装类将基本数据类型包装成类的形式,因此可以在集合中用来定义集合元素的类型。


三、原码、补码、反码

【计算机中用一个数的最高位存放符号,正数为1,负数为1。】
【原码】:符号位+真值的绝对值。
【反码】:正数的反码是其本身,负数的反码是其原码的符号位不变,其余各位取反。
【补码】:正数的补码是其本身,负数的补码是其原码的符号位不变,其余各位取反+1。补码只有+0,用1000表示-8,-8没有原码和反码表示。
【计算机中的数据都用补码存储】,原因在于:
1.可以将表示的范围折半,如4位补码可表示-8~7;
2.可以将符号位和其他位统一处理,做加法运算就能实现加减法,如有进位则进位舍弃(补码运算结果保留在补码范围内,超范围则出错)。
【补码原理——模】:正数+负数=模,即某种数据类型的总数。
如4位二进制的模为16,7+(-7)=16。
因此 负数=模-正数,就是逐位取反+1的结果→补码。
【阶码】:机器中浮点数的指数,如二进制数N=S×2^P,P为阶码。
【移码/增码】:符号位取反的补码,一般用指数的移码-1做浮点数的阶码,使得浮点数的机器零(小到机器数的精度达不到的数)为全0.。


四、数据类型转换

条件:数据类型兼容,除开boolean类型。
byte < short/char < int < long,int<double,float<double。
以上情况下:
小类型→大类型:自动转换/隐式转换,不会丢失信息。
大类型→小类型:强制类型转换,可能丢失信息。
*由于float类型数据的有效位为7~8位,double为15位,数据类型转换和计算时容易丢失精度,需要精确计算的结果,应使用BigDecimal类。
*byte/short/char在运算是自动转换成int类型。


五、Java参数传递

Java中方法参数由两种类型:基本数据类型和对象引用类型。
基本数据类型:值传递,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,方法中的操作是对形参的修改,不影响实参的值。
引用数据类型:方法调用时,实际参数把它的引用(地址)传递给方法中对应的形式参数,函数接收的是原始值的内存地址,对参数的修改会影响到实际的对象。
*特别地,对String、Integer、Double等一旦创建不可修改的类,每一次改变值都是改变栈内存到新建的堆内存的引用;或者方法中为形参对象重新分配内存空间,最后操作将不会改变实参对象。


六、String、StringBuilder、StringBuffer的区别

1.String对象值的改变都是创建了一个新的对象,旧对象会变成垃圾被GC回收,操作少量数据且不需要较多更改的时候使用;
2.StringBuffer与StringBuilder在对字符串做操作时,实际上是在一个对象上操作的,其中:
a.StringBuffer是线程安全的,适合多线程操作字符串缓冲区下操作大量数据;
b.StringBuilder是非线程安全的,适合单线程字符串缓冲区下操作大量数据,速度最快,使用方法与StringBuffer类似。


七、throws和throw

throws:方法并不处理异常,而是将异常抛出,若调用一个抛出已检查异常的方法,就必须对它进行处理,或者将它继续进行传递。
throw:抛出异常,直接抛出异常类的实例对象。


八、异常分类

所有异常都由Throwable类继承而来,派生出Error和Exception两类。
1.Error类:Java运行时系统的内部错误和资源耗尽错误,只能通告用户,尽力使程序安全终止,如JVM崩溃、机器内存不够等。
2.Exception类:派生出以下两类——
a)RuntimeException:由程序错误导致的异常,常见的有数组越界异常、空指针异常、算数异常、错误的类型转换异常。
b)IOException:程序本身没有问题,但由于I/O错误导致的异常,如试图打开一个不存在的文件、试图根据给定字符串查找不存在的类、试图在文件尾部读取数据。
*Java将派生于Error类和RuntimeException类的所有异常称为未检查异常;其他异常为已检查异常,调用时需要捕获或声明Exception。一个方法必须声明所有可能抛出的已检查异常,未检查异常要么不可控制,要么应该避免发生。
*自定义异常:定义一个类继承自Exception类。