Week8

一、Throwable的子类

 Throwable的子类包括Error和Exception

错误和异常的区别是:Error不是程序需要捕获和进行处理的

Error:所有错误类的祖先类。致命异常。标识系统发生了不可控的错误。程序无法处理,只能人工介入。

Exception:所有异常类的祖先类。非致命异常。程序可处理,分为受编译器检测的checked异常(受检异常)和不受编译器检测的unchecked异常(非受检异常)

二、checked异常和unchecked异常

checked异常:继承自 Exception 类。代码需要处理 API 抛出的 checked exception,要么用 catch 语句,要么直接用 throws 语句抛出去。

import java.io.*;
class TestScreenIn{
    public static void main(String[] args)throws IOException{
        BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in));
        String c1;
        int i=0;
        String[] e=new String[10];
        while(i<10){
            c1=keyin.readLine();
            e[i]=c1;
            i++;
        }
    }
}

unchecked异常:也称 RuntimeException(运行时异常),它也是继承自 Exception。但所有 RuntimeException 的子类都有个特点,就是代码不需要处理它们的异常也能通过编译。RuntimeException不需要try...catch...或throws 机制去处理的异常。

import java.util.*;
class TestEmptyStack{
    public static void main(String[] args){
        Stack st= new Stack();
        Object ob=st.pop();
    }
}

将派生于Error或者RuntimeException的异常称为unchecked异常,所有其他的异常成为checked异常。

三、StackOverflowError和OutOfMemoryError发生情形和原因

 StackOverflowError:线程调用生成的栈桢深度超过了虚拟机允许的深度(比如一个方法A内调用了方法B,然后B又调用C...这样调用了很多很多层。)某个线程的线程栈空间被耗尽,没有足够资源分配给新创建的栈帧

OutOfMemoryError:当Java虚拟机在为对象分配内存空间时,剩余的空间不够,同时也没有可以释放的内容时,将会发生这样的错误。

四、简述异常处理的两种方法

1.声明抛出处理:使用throws关键字抛出异常。分为隐式声明抛出和显式声明抛出。谁调用我,我就抛给谁。抛给上一级。如果一直上抛,最终抛给了main方法,main方法继续向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果。终止java程序的执行。

2.程序捕获处理: try…catch…finally。有嵌套和非嵌套。可能会抛出一个或多个异常。一个catch执行,其他catch就不再执行。不管是出现异常,还是没有出现异常,finally 里的代码都执行。

五、RuntimeException类的五个子类

1.ArithmeticException 除数为0异常

public class TestArithmeticException{
	public static void main(String[] args){
		try{
			int a,b,c;
			a=1;
			b=0;
			c=a/b;
			System.out.println(c);
		}
		catch(ArithmeticException e) {
			System.out.println("ArithmeticException");
		}
	}
}

2.IOException 读写异常

(请看二、checked异常和unchecked异常)

3.ArrayIndexOutOfBoundsException数组下标越界异常

public class TestArgs {
	public static void main(String[] args) {
		try{
			String foo=args[1];
		}
		catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("IndexOut");
		}
	}
}

4.EmptyStackException 空栈异常

import java.util.*;
class TestEmptyStack{
    public static void main(String[] args){
        try{
            Stack st= new Stack();
            Object ob=st.pop();
        }
        catch(EmptyStackException e){
            System.out.println("EmptyStackException ");
        }
    }
}

5.NullPointerException 空指针异常

public class TestArray{
    private static int[] x;        
	public static void main(String[] args){
	    try{
    	    System.out.println(x[0]);
	    }
    	catch(NullPointException e){
	        System.out.println("NullPointException ");
    	}
    }
}

六、自定义异常类

throw new 异常类(可以是JDK中定义好的异常,也可以是自定义异常类)

public class SelfGenerateException extends Exception{
	SelfGenerateException(String msg){
		super(msg);
	}
	static void throwOne()throws SelfGenerateException{
		int a=1;
		if(a==1){    //如果a为1就认为在特定应用下存在异常,改变执行路径,抛出异常
		    throw new SelfGenerateException("a为1");
        }
	}
	public static void main(String args[]){
	    try{
            throwOne();
        }
	    catch(SelfGenerateException e){
            e.printStackTrace();
        }
	}
}

七、throws声明和throw语句

throws出现在方法函数头;而throw出现在函数体。
throws表示出现异常的一种可能性,不一定会发生这些异常;throw则是抛出了异常。

public class SelfGenerateException extends Exception{
	SelfGenerateException(String msg){
		super(msg);
	}
	static void throwOne()throws SelfGenerateException{
		int a=1;
		if(a==1){    //如果a为1就认为在特定应用下存在异常,改变执行路径,抛出异常
		    throw new SelfGenerateException("a为1");
        }
	}
	public static void main(String args[]){
	    try{
            throwOne();
        }
	    catch(SelfGenerateException e){
            e.printStackTrace();
        }
	}
}

八、finally子句的作用

try-catch-finally统一出口。一般用来进行一些善后清理操作,例如清理资源、释放连接、关闭文件、管道流等操作。可选部分,一旦选定,必定执行。

String readFileWithFinallyBlock(String path) throws IOException{
    BufferedReader br=new BufferedReader(new FileReader(path));
    try{
        return br.redLine();
    }
    finally{
        if(br!=null)br.close();//关闭文件流
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值