java异常

本文详细介绍了Java中的异常处理机制,包括异常的层次结构、try-catch-finally语句的使用、throws关键字的作用以及如何自定义异常。通过实例展示了如何有效地处理程序运行过程中可能出现的各种错误。
JAVA 异常处理

0...

异常的层次结构

Object->Throwable->Exception(所有异常类的父类)

异常:程序运行过程中的错误

{

    1、逻辑错误

    2、输入错误

    3、物理错误

}

1.... try {..}catch(Exception e){..}

比如下面的一个案例:

public class ExceptionTest{

    public int devide(int x,int y){

        return x/y;

    }

    public static void main(String[] agrs){

        ExceptionTest e=new ExceptionTest();

        System.out.println(e.devide(3,0));

    }

}

->上面的这段程序 因为y=0了,这是算数错误是会报异常的。

但是为了不是程序中止,我们可以使用try{}catch{}语句

public class ExceptionTest{

    public int devide(int x,int y){

        return x/y;

    }

    public static void main(String[] agrs){

        ExceptionTest e=new ExceptionTest();

        try{

            System.out.println(e.devide(3,0));

        }catch(Exception e){

            System.out.println(e.getMessage());

            System.out.println("程序出现了算数错误,请查证。。");

        }

    }

}

->这样的话,程序在出现异常后,也能正常的运行,没有异常中止

->其中try是用来捕获异常的,而catch是用来处理异常的 捕获到错误时,跳到catch块

2....   finally关键字

->也有在try..catch..后面再加上finally的  不管前面是否捕获异常,都是会执行finally这个块的

public class ExceptionTest {

    public static void main(String[] args) {

        try{

            System.out.println("....");

            return;//这里是测试的关键

        }catch(Exception e){//其实即便出现了异常,执行了catch语句,下面的finally也是会执行了

            System.out.println(e.getMessage());

        }finally{//这个是无论如何都是会被执行的

            System.out.println("这个还是被执行了");

        }

        System.out.println("kkk");//由于在try的时候,就已经return了,所以这个是不会被执行的

    }

}

//程序输出的结果是:

try..

fianlly语句还是被执行了

3....   throws关键字

class ExceptionTest {

    public void show() throws Exception{//这里是有作出抛出异常的

        System.out.println("这是一个测试而已!");

    }

}

//下面的这个类调用了上面类中的方法,因为上面的方法是有抛出异常的

public class Exception1 {

public static void main(String[] args) throws Exception  {

        ExceptionTest e=new ExceptionTest();

        e.show();//这里这样是不行的,必须对异常作出处理  使用try..catch。。或抛出

        //我们这里直接抛出好了就是上面的 throws Exception 

    }

}

->这样子程序就能够编译成功了!因为先前写的类可能是由不同的人使用的,可能不止是否会有异常的

->情况出生,所以public void show() throws Exception   就相当于告知使用者必须进行处理

->但是要注意的是,这种在main中的抛出,一旦出现异常也是会异常终止的

4... 自定义的异常  &  Throw关键字

 

//自定义异常    ->  这个异常类继承与Exception或及其子类     

//AgeErrorException   ->    Exception

public class AgeErrorException extends Exception{//异常类继承与Exception

    public static final int errId=1;//错误的编号

    public AgeErrorException(String msg){//传进来一个信息 用于输出

        super(msg);

    }

    public AgeErrorException(){

        super("错误编号:"+errId+"\t年龄输入错误,请订正...");

    }   

}

 

public class Person {

    private int age;

    private String name;

    public void setAge(int age) throws Exception {  //多态  Exception ->  AgeErrorException

        if(age<0){//以面向对象的方式来处理异常

//          throw new AgeErrorException("lalalal....");  //有指定信息的错误类

            throw new AgeErrorException();  //默认输出的错误类      手动抛出异常对想

        }else{

            this.age = age;

        }

    }

    public Person() {

        super();

    }

    public Person(int age, String name) {

        super();

        this.age = age;

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

}

public class Test {

    public static void main(String[] args)   {

        Person p=new Person();

        p.setName("yht");

        try {

            p.setAge(-12); //如果这里出现了异常,就抛出异常 由catch中的语句进行处理

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值