目录
一.异常
描述:程序出现了问题;程序一旦遇到异常,后面代码无法正常执行,并且同时控制台中展示异常的详细信息|细节问题,便于程序猿的调试
1.异常体系
异常体系:都是类,所以首字母需要大写
Throwable(父类) Error Exception(子类)
Error(错误):一般指由虚拟机生成并脱出的,无需程序猿解决处理
Exception(异常):阻碍程序的正常运行,异常如果不处理,程序无法正常执行,需要程序猿在代码层面上处理异常
2.异常的分类
1.RuntimeException:运行时异常:运行期间才会发生的异常
1.CheckedException 编译时异常|检查时异常 : 编译期间发生的异常,不处理程序无法运行
3.*异常处理方案
所有的异常都可以通过异常处理方案来处理
运行时异常:一般通过增强程序健壮性的代码就可以解决 -> 即if判断;也可以通过异常处理方案来处理
编译时异常:只能通过异常处理方案来处理
1)异常处理方案
异常抛出(throws):将异常抛出到上一层,谁调用谁处理 异常捕获(try-catch):异常对象当前抓住,直接处理
2)try-catch语句
try { 可能会出现异常的代码; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); } catch (Exception e) { --> 接盘侠 System.out.println("出现了文件未找到异常, 捕获异常..."); e.printStackTrace(); }finally{ 无论try中是否会出现异常,最终都会执行的代码
3)注意
1.异常一旦处理,不影响程序的继续执行
2.try中代码可能出现异常,可能不会出现异常
如果没有出现异常,try{}中的代码执行完毕,try…catch结束 try中代码一旦异常,try后面的代码不会执行,直接执行catch的判断从上到下一次判断,判断当前的catch是否能够捕获出现的异常对象,如果能,执行后面 的{}中的代码 如果不能匹配,继续向下判断,如果所有的都不鞥匹配,当前的异常对象没有处理,中止 程序的执行
3.一个try后面可以跟1~n个catch
4.如果一个异常已经通过catch处理不影响后面代码的执行
5.接收范围较大的异常的catch,需要定义在后面
6.finally 最终的 无论try中是否会出现异常,finally中的代码肯定最后会执行 一般会定义一些资源的关闭等代码
4..常见的运行异常
-
NullPointerException 空指针异常 ArithmeticException 数学异常 ArrayIndexOutOfBoundsException 数组索引越界异常 NegativeArraySizeException 数组长度负数异常 ClassCastException 类型转换异常 NumberFormatException 转换格式异常
5.自定义异常
异常也是类,需要遵守类的规则与规范
需要直接或者间接的继承Exception类;如果是运行时期异常必须直接或者间接的继承RuntimeException
自定义异常:
class NameException extends Exception{
public NameException(){}
public NameException(String message){
super(message);
}
}
使用:if(判断不合法的语句) throw new NameException(name+"不合法"); NameException:按照见名知意的原则,按照需要自定义异常名
throw: 制造异常
二.常用类
学习API类型: 了解类的作用与特点 学习构造器 学习方法 成员 非静态 静态的
底层分析: jdk11 ->使用字节数组存储字符串数据 private final byte[] value; jdk8 -> 使用字符数组存储字符串数据 private final char[] value;
三.String字符串
String:不可变长字符序列,表示字符串,写在" "中
eg:“abc”,“123”,"张三"等
String str = “abc”; "abc"表示字符串常量,在方法区的字符串常量池中
new String() --------new创建对象,在堆中
执行效率: StringBuilder > StringBuffer > String
StringBuilder 与 StringBuffer(方法差不多,以StringBuilder为例)
方法名 描述 StringBuilder() 构造一个字符串构建器,其中不包含任何字符,初始容量为16个字符 StringBuilder(int capacity) 构造一个字符串构建器,其中没有字符,并且具有 capacity参数指定的初始容量–>能够确定容量的情况下可以选择使用 StringBuilder append(boolean b) 将 boolean参数的字符串表示形式追加到序列中 StringBuilder delete(int start, int end) 删除此序列的子字符串中的字符。 结束索引不包含 StringBuilder insert(int offset, String str) 将字符串插入此字符序列 StringBuilder reverse() 导致此字符序列被序列的反向替换 String 与 StringBuilder|StringBuffer 相互转换:
StringBuilder(String str)
构造一个初始化为指定字符串内容的字符串构建器。
String(StringBuffer buffer)
分配一个新字符串,其中包含当前包含在字符串缓冲区参数中的字符序列。
String(StringBuilder builder)
分配一个新字符串,其中包含当前包含在字符串构建器参数中的字符序列。
扩容机制: int newCapacity = (oldCapacity << 1) + 2; 原容量的2倍+2
四.Math(静态工厂)
方法 | 描述 |
static double ceil(double a) | 向上取整 |
static double floor(double a) | 向下取整 |
static double max(double a, double b) | 返回两个 double值中较大的 double |
static double pow(double a, double b) | 返回第一个参数的值,该值是第二个参数的幂(求一个数的次方) |
static double random() | 随机数,返回带有正号的 double值,大于或等于 0.0且小于 1.0 |
static long round(double a) | 返回与参数最接近的 int ,并将关系四舍五入为正无穷大。 -->小数点后1位四舍五入 |
static double sqrt(double a) | 返回 double值的正确舍入正平方根(开平方) |
五.基本数据类型和其包装类
引用数据类型的作用:
1.包装类是类,类中可以定义成员,增强使用能力(成员变量,成员方法…)
2.类似集合,要求只能存储引用数据类型的数据
3.基本数据类型与引用数据类型的默认值(null)
基本数据类型的优势:
基本数据类型比引用数据类型更节省内存空间,存在性能优势
基本数据类型与其对应的包装类:
基本数据类型 | 对应引用数据类型 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
自动拆装箱:
自动装箱 : 基本—> 包装
自动拆箱 : 包装—> 基本
比较:
使用 == :
基本数据类型->数据值
引用数据类型->地址值
1.两个基本数据类型int比较,只要数据值相等就相等
2.两个new Integer()比较,肯定不相等,因为new每个对象堆内存中地址不同
3.Integer与new Integer()比较肯定不相等.因为new不同的地址
4.基本数据类型int与Integer|new Integer比较,如果数据值相等肯定相等,因为包装类会发生自动拆箱,然后比较数据值
5.两个Integer比较,在缓冲区范围[-128,127]之间就相等,同一个缓冲区对象,否则返回new Integer()
public static void main(String[] args) {
int i1 = 127;
int i2 = 127;
//Integer.valueOf(127) Integer缓冲区对象能够表示的数据范围:[-128,127]
Integer i3 = 127;
Integer i4 = 127;
Integer i5 = new Integer(127);
Integer i6 = new Integer(127);
Integer i7 = 128;
Integer i8 = 128;
System.out.println(i1==i2); //true
System.out.println(i3==i4); //true
System.out.println(i1==i3); //true
System.out.println(i5==i6); //false
System.out.println(i1==i6); //true
System.out.println(i3==i6); //false
System.out.println(i7==i8); //false
}
六.Enum枚举类
枚举类 : 当能够确定一种事物的所有可能,一个类型的所有对象的时候 是类,定义枚举类型 enum java中所有的枚举类型都会隐式的继承自java.lang.Enum, 这是所有Java语言枚举类型的公共基类。 枚举类中的字段,就为做当前枚举类型的一个实例存在,默认被 public static final修饰
可以配合switch使用
1.Date日期
Date类表示特定的时刻,精度为毫秒
Date对象并对其进行初始化,使其表示分配时间,测量 Date到毫秒
2.方法
SimpleDateFormat 格式日期转换器
SimpleDateFormat simple = new SimpleDateFormat(); --> 默认格式 SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");----->自定义格式 1 2 format() 日期对象转换字符串
simple.format(date) 1 parse() 字符串转为日期对象
String datestr = "2021-06-10 17:22:53"; simple.parse(datestr)