Java中的异常
概念
代码正常的执行流程中发生意外,必须处理
代码传入的参数不合适,导致一些问题
* 异常后面想要执行的代码,执行不到了,需要处理异常之后,代码能够继续往下走
* 常见异常:
* 1.除数不能为零java.lang.ArithmeticException:类
* 2.java.lang.NullPointerException
* 3.java.lang.StringIndexOutOfBoundsException
* 4.java.lang.ArrayIndexOutOfBoundsException
* 5.类型转换异常java.lang.ClassCastException
* 运行时…异常:编译完成,运行的时候才抛出的异常…运行
* 6.编译时异常java.text.ParseException
异常信息的获得而方式
1.直接打印异常对象
2.通过异常对象,调用getMessage()方法获得
3.通过异常对象,调用printStackTrace 打印异常信息
try{
System.out.println(1/0);
}catch(Exception e){
System.out.println(e);
String message = e.getMessage();
System.out.println(message);/// by zero
e.printStackTrace();
}
异常处理
方式1:try-catch *
- try{
- //放的可能发生异常的代码块:发生异常…搞一个对应异常类型的对象
- }catch(异常类型 形式参数){
- }catch(ParseException e){
-
//来到这个语句块,写功能代码
- }catch(){
- }catch(){//—异常链
- }finally{
- //结构一定会执行的语句块:一般用来释放锁,关闭流资源
- }
- 1.try语句块,执行代码
- 2.发生异常:根据类型,匹配对应的catch语句块…进入语句块。
- 3.finally语句块,一定要执行
- 3.try-catch执行完毕,继续往下走
finally
finally语句块的测试
1.finally:try-catch一定会执行的语句块:一般用来释放锁,关闭流资源2.return已经结束方法了,但是finally还是执行了,所以finally一定会执行
3.finally一定会执行的前提,虚拟机不能关闭
4.finally中建议不要写return语句…不好理解!
static int test1(){
int i=10;
try {
System.out.println(1/1);
return i;
} catch (Exception e) {
i = 20;
System.out.println(“i”+e);
return i;//return 结束方法了
}finally{
i= 30;
//return i;
}
}
方式2:抛出
1.方法头:throws关键字,抛出异常类型[根据实际情况…后面的代码不需要执行…不管抛出…]
2.异常抛出,可以在方法头,抛出多个异常的
3.直接抛出一个大的异常Exception: 数据类型的兼容
主动抛出异常:
static String[] str={"a","k","s","dk","a","1","2"};
static void test(String s){
for (int i = 0; i < str.length; i++) {
if (s.equals(str[i])) {
throw new NullPointerException("该字符已存在");
}
}
System.out.println("可以输入");
}
自定义异常类型
1.写的代码,问题:账户已经存在的这种异常现象:对应的异常类型取描述…用NullPointerException不符异常类型
2.java 可以写很多的异常,可能写完所有的异常么?
3.自己定义异常类型,表达,自己实际开发中的意外情况
4.异常:继承体系的,异常都有异常信息…【直接在父类搞一个字段…存信息…父类提供对应的方法处理打印异常新…】
public class UserNullException extends Exception{
UserNullException(String s){
super(s);
}
}
static String[] str={“a”,“k”,“s”,“dk”,“a”,“1”,“2”};
static void test(String s)throws UserNullException {
for (int i = 0; i < str.length; i++) {
if (s.equals(str[i])) {
throw new UserNullException(“该字符已存在”);//自定义类UserNullException继承Exception
}
}
System.out.println(“可以输入”);
}