Java中的错误和异常及其处理方法

一.错误和异常

1.Thorwable类(表示可抛出)是所有异常和错误的超类(父类)。
2.Error错误:程序无法处理的错误,它是由JVM产生和抛出的,比如OutOfMemoryError、ThreadDeath等。
3.Exception异常:程序本身可以处理的异常,分为运行时异常(非受检异常)和非运行时异常(受检异常)。
4.运行时异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
5.非运行时异常从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。

二.解决异常的处理方法

1.try、catch、finally

(1)try、catch、finally三个语句块均不能单独使用,三者可以组成try...catch...finally、try...catch、try...finally三种结构,catch语句可以有一个或多个,finally语句最多一个
 (2)try、catch、finally三个代码块中变量的作用域为代码块内部,分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
(3)多个catch块时候,最多只会匹配其中一个异常类且只会执行该catch块代码,而不会再执行其它的catch块,且匹配catch语句的顺序为从上到下,也可能所有的catch都没执行。
(4)程序执行时先catch子类异常再catch父类异常。
(5)final中的代码一定会被执行,finally  异常中总能执行的代码区,final 用于定义常量的关键字,finalize() 垃圾回收,该方法是系统调用,不用程序员手动调用。

public static void main(String[] args) {
		int[] a = new int[5];
		try {
			for (int i = 0; i <10; i++) {
				a[i] = i;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		System.out.println("----------------");
	}

2.throws和throw

(1)throws

定义一个方法的时候可以使用throws关键字声明。使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用处进行处理。

public class ThrowsDemo01 {
	 public static void main(String args[]){
	        Math m = new Math() ;       
	        try{
	            System.out.println("除法操作:" + m.div(10,2)) ;
	        }catch(Exception e){
	            e.printStackTrace() ;    // 打印异常
	        }
	    }
}
class Math{
    public int div(int i,int j) throws Exception{    // 定义除法操作,如果有异常,则交给被调用处处理
        int temp = i / j ;    
        return temp ;
    }
};

如果在主方法的声明也使用了throws关键字呢,那么是不是意味着主方法也可以不处理异常?在本程序中,主方法不处理任何异常,而交给JAVA中最大头JVM,所以如果在主方法使用了throws关键字,则表示一切异常交给JVM进行处理。

public class ThrowsDemo01 {
	 public static void main(String args[]) throws Exception{
	        Math m = new Math() ;        
	        System.out.println("除法操作:" + m.div(10,0)) ;
            System.out.println("我还可以输出");
	    }
}
class Math{
    public int div(int i,int j) throws Exception{    // 定义除法操作,如果有异常,则交给被调用处处理
        int temp = i / j ;   
        return temp ;
    }
};

(2)throw

throw关键字作用是抛出一个异常,抛出的时候是一个异常类的实例化对象,在异常处理中,try语句要捕获的是一个异常对象,那么此异常对象也可以自己抛出。

public class ThisDemo06{
    public static void main(String args[]){
        try{
            throw new Exception("自己抛着玩的。") ;    // 抛出异常的实例化对象
        }catch(Exception e){
            System.out.println(e) ;
        }
    }
};

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值