异常处理机制知识点总结:
1.try包围可能出错范围,catch 捕获代码抛出的错误,并解决
2.JVM在执行代码过程中发现一个异常会实例化这种情况的异常实例,并将代码整个执行过程完整设置到异常中来表示该错误报告,设置完毕后将异常抛出,若代码有try包围,则jvm会检查catch中是否关注,关注交给catch解决,否则会将异常抛出方法之外
由调用当前方法的代码解决该异常
3.为了防止程序中断最后加上Exception,但子类在上,父类在下。
4.finally块定义在异常捕获机制的最后,可以跟在try块后,或最后一个catch块之后
finally块中的代码一定执行,无论try块中的代码是否会抛出异常
一般把释放资源等操作放在finally中,例如关闭流案例
5.当一个方法使用throw抛出一个异常,就要在方法上使用throws,声明该异常的抛出以通知调用者解决,只有RuntimeException及其子类异常使用throw抛出时不强制要求。
其他异常都是强制要求的,必须使用throws声明,否则编译不通过, RuntimeException是常识错误,像空指针异常,太常见了,如果每次都是Exception,那么就要try-catch,太麻烦。
6.重写父类一个含有throws异常抛出声明的方法时,子类该方法的throws的重写原则
1.不处理异常
2.throws部分异常
3.子类异常
4.不可以抛出额外异常
5.不可以父类异常
7.
-可检查异常
-非检查异常
8. 当调用一个含有throws声明异常抛出的方法时,编译器要求必须处理该异常。处理手段两种,同时不要在main方法上使用throws,不负责任:
1.try-catch捕获并处理
2.当前方法继续使用throws声明该异常的抛出
***************************************************************************************************
public class A {
public static void main(String[] args) {
System.out.println("程序开始了");
try{
String str="";
System.out.println(str.length());
System.out.println(str.charAt(0));
}catch(NullPointerException e){
System.out.println("出现了空指针");
}catch(StringIndexOutOfBoundsException e){
System.out.println("下标越界了");
}catch(Exception e){
System.out.println("反正就是出了个错");
}
System.out.println("程序结束了");
}
}
public class B2 {
public static void main(String[] args) {
BufferedReader br=null;
try {
br=new BufferedReader(
new InputStreamReader(
new FileInputStream("src/day1/A.java")
)
);
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
}
} catch (Exception e) {
System.out.println("出错了");
}finally{
if(br!=null){
try{
br.close();
}catch(Exception e){
}
}
}
}
}
package day01;
//年龄不合法异常是自定义异常,通常用于描述某个业务逻辑上出现的问题。
//名字应做到见名知意
public class illegalAgeException extends Exception{
private static final long serialVersionUID = 1L;
public illegalAgeException() {
super();
}
public illegalAgeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public illegalAgeException(String message, Throwable cause) {
super(message, cause);
}
public illegalAgeException(String message) {
super(message);
}
public illegalAgeException(Throwable cause) {
super(cause);
}
}
public class Person {
private int age;
public int getAge() {return age;}
public void setAge(int age) throws illegalAgeException{
if(age<0||age>100){
throw new illegalAgeException("年龄不合法");
}
this.age = age;
}
}
public class C {
public static void main(String[] args) {
Person p=new Person();
try {
p.setAge(200);
} catch (illegalAgeException e) {
e.printStackTrace();
}
System.out.println("年龄为"+p.getAge());
}
}