异常概念
1.程序不管产生什么异常都会导致程序中断return,这就需要我们去处理异常,保证程序能运行到最后,保证了程序的健壮性,runtimeException可以不用处理,程序不会报错,但还是会中断
2.Throwable所有错误以及异常的父类
|-Error
|-Exception
|-RuntimeException
|-NUllPointException空指针异常,对象没有实例化
|-IndexOfBound下标越界
|-ClassCastException类转换异常
3.处理异常有两种方法:
throws:在方法名后面,表示该方法可能会产生异常,自己如果不try可以选择抛出去,如果调用者不去try...catch...程序依然崩溃
try...catch...catch...finally:try代码块如果没有错误,catch代码块被忽略,如果有异常,从上到下逐个匹配catch代码块,匹配到执行代码块里的内容,匹配不到程序中断,finally是程序必须执行的代码块,try代码块中的return执行前先执行finally,程序崩溃前也要先执行finally,除非杀死进程Sysotem.exit(0);一般多个catch范围小的先写
4.自定义异常:throw可以在程序你喜欢的任意位置抛出(new)一个异常
5.父类方法抛异常,子类覆盖方法必须抛该异常或该异常的子类;父类方法抛多个异常,子类方法要抛父类异常的子集;父类没抛异常,子类不允许抛异常
小练习
1.写一个login方法,形参账户名密码,判断如果不是zhangsan和123456,则抛出异常,异常信息为账户名或密码不正确,main方法从键盘输入账户名和密码,调用login方法,捕获(try)并处理异常(catch)
package com.ccb;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("输入账户名:");
String name = input.next();
System.out.println("输入密码:");
String password = input.next();
Test t = new Test();
try {
System.out.println(t.login(name,password));
} catch (Exception e) {
System.out.println("账户名或者密码不正确");
}
input.close();
}
public boolean login(String name,String password){
if (name.equals("zhangsan") &&
password.equals("123456")) {
return true;
}
throw new ArithmeticException();
}
}
2.建立一个三角形类,其中有三条边长,如果构建的三条边不能组成一个三角形,抛出非法参数
3.创建一个点类型xy,输入4个点,判断是否能组成一个四边形,如果不能,抛出非法参数异常
4.默认10道算术题,循环判断是否错误,错误抛异常,打印getMessage,打印出正常运算结果