1、异常处理方案:
异常抛出 : throws 把异常抛出到上一层,谁调用谁解决
异常捕获 : try..catch
try{
有可能出现异常的代码;
}catch(FileNotFoundException e){
处理异常代码;
}catch(NullPointerException e){
处理异常代码;
}catch(Exception e){
所有异常都能接收;
}finally{
无论try中是否会出现异常,都会执行finally中的代码
//资源的关闭等代码
}
一个try的后面可以接 1~n个catch,try中如果一旦出现异常,try下面的代码不会执行,直接进入catch的判断,catch从上到下一次判断,满足哪一个catch捕获的类型,就执行对应的语句体,异常一旦捕获,程序执行过程中出现的异常按照指定方案解决,不会影响后续代码的执行
2、自定义异常:
自定义的异常类型
所有自定义的异常类型必须直接或者间接继承自Exception
如果自定义异常为运行时期异常,需要直接或者间接的继承自RuntimeException
throw 制造异常
3、常用类 --> 字符串
(1)String 不可变长字符序列
(2)StringBuilder 可变长字符序列,线程不安全|不同步,效率较高
(3)StringBuffer 可变长字符序列,线程安全|同步,效率较低
(4)学些一个类:
①类的作用 类的继承体系
②构造器
③方法(静态方法|成员方法)
(5)String类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。
(6)String str = "abc"; 创建一个字符串对象"abc",字符串常量 -->字符串常量池中
(7)String str2 = new String("haha"); 2个对象 第1个new->在堆中 第2个"haha"-->字符串常量池中
(8)String str2 = new String("abc"); 1个对象 第1个new->在堆中 "abc"->上面已经使用过,字符串常量池中已经存在
(9)字符串底层:
jdk11-->使用private final byte[] value; 字节数组存储字符串中的字符数据,jdk8--> private final char[] value;字符数组
4、可变长字符序列
(1)StringBuilder : 线程不安全,但不保证同步,相对效率较高,适合使用在单线程下大量操作字符串,效率高
(2)StringBuffer : 线程安全的,相对效率较低
多线程下大量操作字符串建议使用StringBuffer
(3)String : 少量修改字符串,适合使用String,因为表示字符串String对象简单,功能强大的API
(4)效率: StringBuilder > StringBuffer > String