javaException异常

文章详细介绍了Java中的异常处理,包括异常的抛出和捕获机制。当程序遇到异常时,Java会抛出对应类的对象,如果程序员不处理,程序会终止。异常分为Error和Exception,Error通常由系统处理。示例代码展示了如何使用try-catch-finally结构来处理异常,以及如何通过throws声明方法可能抛出的异常。此外,文章还提到了自定义异常类的概念。
摘要由CSDN通过智能技术生成
异常:

程序即便写的很完美,也会由于用户的输入格式问题,文件路径问题,网络中断问题
导致运行期间出现一些异常,导致jvm非正常停止,程序终止


异常的抛出机制:
java中将可能出现的每一种异常,都封装成了一个个的类,当出现某种异常时,虚拟机会抛出对应的类的对象
程序员可以根据不同的类型来进行处理
如果不处理,虚拟机就会停止工作,程序终止


异常的抛出机制:
1.不管不顾,程序停止
2.在写程序的时候,把可能出现的异常的处理机制也写好,一旦发生异常就可以使用处理机制进行处理


import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class Demo1 {
    /*
    异常:


    程序即便写的很完美,也会由于用户的输入格式问题,文件路径问题,网络中断问题
    导致运行期间出现一些异常,导致jvm非正常停止,程序终止


    异常的抛出机制:
    java中将可能出现的每一种异常,都封装成了一个个的类,当出现某种异常时,虚拟机会抛出对应的类的对象,
    程序员可以根据不同的类型来进行处理
    如果不处理,虚拟机就会停止工作,程序终止


    异常的抛出机制:
    1.不管不顾,程序停止
    2.在写程序的时候,把可能出现的异常的处理机制也写好,一旦发生异常就可以使用处理机制进行处理
     */
    public static void main(String[] args) throws FileNotFoundException {
        //Integer a = new Integer("a");//java.lang.NumberFormatException  数字转换格式异常
        int b = Integer.parseInt("10");
        System.out.println(b);

        int c = 10;
        int d = 0;
        System.out.println(c/d);//java.lang.ArithmeticException  算数异常
        System.out.println("除数不能为0");

       // 当程序中出现异常时,程序终止,下面的程序无法继续运行



        new FileInputStream("D:/d.txt");
        //文件目录损坏 或者被删除
        Object x = new Integer("0");
        System.out.println((String) x);
        //格式转换错误    java.lang.ClassCastException

        String s = "abcdefg";
        System.out.println(s.charAt(20));
        //java.lang.StringIndexOutOfBoundsException


    }
}

广义上的异常(Throwable)包括Error和Exception

  Error
    java.lang.OutOfMemoryError  内存溢出错误  程序无法解决
    java.lang.StackOverflowError 栈溢出错误 程序无法解决

而Exception有编译期异常和运行期异常(RuntimeException)

编译期异常在编译期间就会提示报错,但是运行期异常只有在运行期间才会报错,编译期间不会提示

而运行期异常里边包括很多类异常

算数异常

ArithmeticException

是在计算遇到问题时

编码转换异常

unsupportEncodingException

是在编码时,例如utf-8与utf-811("abc".getBytes)

格式化转换异常

NumberFormatException

是在格式化日期出现异常

文件查找异常

FileNotFoundException

在查找文件路径,文件被删除或者移动

索引异常

(数据类型)IndexOutOfBoundsException

是在超出数据范围的查找时

空指针异常

NullPointerException

是在栈中创建的对象为null时,引用变量指向的对象为空

public class Demo4 {
    public static void main(String[] args) {
        /*
        异常处理机制:
        在写代码时,需要编写相应地异常处理程序,一旦程序运行时出现异常,就可以执行处理异常的程序代码
        处理完成后,后面的代码可以继续执行

        注意:异常处理,在发生不正常情况下保证程序可以正常执行的机制,而不是将异常代码改好
         */
        int a = 10;
        int b = 0;
        try {
            int c = a/b;
            //此处是判定可能会出现异常的的代码
        }catch (ArithmeticException ar){//此处是相应的异常类型捕获
            System.out.println("除数不能为0!");
        }
        catch (NumberFormatException nu){
            System.out.println("格式化日期错误");
            nu.printStackTrace();//方便在开发编写调试过程中程序员明白异常的地方在哪   所以打印在控制台内,以后会打印在日志中方便查找
        }
        System.out.println("后续代码");
    }
}
import java.io.UnsupportedEncodingException;

public class Demo7 {
    public static void main(String[] args) {
        try {
            test();
        } catch (UnsupportedEncodingException e) {
            System.out.println("葫芦娃之火娃");
            e.printStackTrace();
        }
       try {
           test1();
       } catch (ArithmeticException e) {
           System.out.println();
           e.printStackTrace();
       }
        System.out.println("爷爷爷爷,我来救你啦");

    }
    public static  void test() throws UnsupportedEncodingException {
        "abc".getBytes("utf-811");
    }
    public  static  void test1() throws ArithmeticException{
        int a = 10;
        int b = 0;
        int c = a/b;
    }
}

而这里边涉及到了异常的捕获处理

用到的就是try{}catch{}方法

try{
可能会出现异常的代码  可能会出现多个异常
}catch(要捕获的异常类型1){
写针对出现的异常要处理的代码。例如:对用户做出一个提示
}}catch(要捕获的异常类型2){
写针对出现的异常要处理的代码。例如:对用户做出一个提示
}}catch(要捕获的异常类型n){
写针对出现的异常要处理的代码。例如:对用户做出一个提示
}finally{
finally中代码块的内容,无论是否出现异常,都会被执行
}

public class Demo5 {
    public static void main(String[] args) {
        /*
        异常处理机制:
        在写代码时,需要编写相应地异常处理程序,一旦程序运行时出现异常,就可以执行处理异常的程序代码
        处理完成后,后面的代码可以继续执行

        注意:异常处理,在发生不正常情况下保证程序可以正常执行的机制,而不是将异常代码改好
         */
        try {
            int a = Integer.parseInt("10");
            int b = 0;
            int c = a/b;
            //此处是判定可能会出现异常的的代码
        }catch (ArithmeticException ar){//此处是相应的异常类型捕获
            System.out.println("除数不能为0!");
            ar.printStackTrace();//此处的作用是方便开发人员了解异常发生的具体代码
        } catch (NumberFormatException nu){
            System.out.println("格式化日期错误");
            nu.printStackTrace();//打印
        }finally {
            System.out.println("finally 代码块");
            //无论程序异常与否都要输出执行的一段代码
        }
        System.out.println("后续代码");
    }
}

这里不得不提到异常的抛出

throws     是声明该方法可能会出现异常,并且对该异常不做处理    谁要调用,谁处理

throw    不满足条件时,主动的在程序中使用throw关键字抛出一个异常对象,发生了异常

public class Demo8 {

  
    public static void main(String[] args) {

        //System.out.println(10/0);

        char c = 0;
        try {
            c = myCharAt(-1,"abcdefg");
        } catch (StringIndexOutOfBoundsException e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
        System.out.println(c);
    }

    public static char myCharAt(int index,String s)throws StringIndexOutOfBoundsException{
        if(index<0||index>=s.length()){
            //不满足条件时,主动的在程序中使用throw关键字抛出一个异常对象,发生了异常
            throw  new StringIndexOutOfBoundsException("非法索引");
        }
        return s.charAt(index);
    }
}

自定义异常类就是自己创建一个异常,用于自己设计的具体的程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值