Java第九章

异常的相关概念

        
            Java在运行过程中或编译过程中,难免会出现一些报错,导致程序运行的中断,
            这些报错其实指的就是异常。
            
            所以我们需要如何解决这些错误,也就是如何解决异常。
            更需要看到报错信息,能够快速找到异常出现的位置,然后将它修改。
            异常的分类:


            第一级类:

            Java中所有异常或错误的顶级父类都是:Throwable类。
            第二级类:

            其中Throwable分为错误-error和异常-exception 两大类
            
            error         指的是:错误,无法通过代码解决的错误。
            exception指的是:异常,可以解决的错误。
            

            第三级类 :

error下的子类 和  exception下的子类。

            Error详解:一般是程序中较严重的出错,是虚拟机层面的异常,一旦发生将会导致系统崩溃,+
            无法由程序自身处理,只能通过修改虚拟机的设置,理解为修改虚拟机的相关参数,例如内存大小等。
            例如以下代码就会出现内存溢出错误。:
            int  arr [] = new int[1000000000];
            System.out.println(arr.length);
            
            OutOfMemoryError:又称OOM,表示内存溢出错误,通常发生在内存泄露或内存不足的情况。
            
            面试题:
            java的运行本质在运行在虚拟机的内存中。
            
            内存溢出的相关概念:如果程序占用的内存超过了 虚拟机的剩下内存,就会出现该错误。
            
            内存泄漏的相关概念:虚拟机特点自动垃圾回收,但是某些垃圾无法回收。例如Scanner类,需要手动了去close。
            但是如果没有手动的close。那么该对象就会长期占据内存。长期以往,内存也会慢慢的溢出、
Exception详解:

         
            Java中最常出现的就是异常,俗称BUG,没有   没有BUG的程序,如果某个程序没有BUG,那么说明这个程序是个垃圾程序。

            异常又分为两大类:
                        运行时异常和编译时异常。

  
            运行时异常:指的是运行过程中才出现的异常。
            编译时异常:指的是编译过程中就出现了异常。
            
            编译过程:理解为代码写完后都没运行,就报错。
            

            常见的运行时异常:


            空指针异常(NullPointException)
            数组越界异常(ArrayIndexOutOfBoundsException)
            数字格式化异常(NumberFormatException)
            算数运算符异常(ArithmeticException)
            
            一般来说:
            运行时异常不用去特意处理,而是通过仔细编写代码来避免这些异常。
        
        */
        
        //空指针异常(NullPointException)
        //指的就是  某个对象是null。你还去调用它的属性或方法。
//        String str = null;
//        System.out.println(str.length());
//        
        
//        数组越界异常(ArrayIndexOutOfBoundsException) 
//        获取的元素下标超过了数组原有的最大长度
//        int a[] = {1,2,3,4};
//        System.out.println(a[4]);
        
        
//        NumberFormatException 数字解析溢出
//        将非数字的字符串解析成数字
//        String str = "12/345";//假设用户从前台输入的这个数量  后台只能通过String接受
//        int num = Integer.parseInt(str);//将字符串转成数字
//        System.out.println(num);
        
//        算数运算符异常(ArithmeticException)
        
        System.out.println(1/0);
        
        
//        一般来说:
//        运行时异常不用去特意处理,而是通过仔细编写代码来避免这些异常。

            编译时异常:

            还没运行就报错了,根本就不让你运行
            由于知识点的局限性,导致13章才能解除到大量的编译时异常。
            暂时就以Class.forName("xxx");作为代替。
            上述代码的意思:加载指定的类。
            例如:常见面试题: 获取对象的几种方式:
            1.通过new来获取
            2.Class.forName
            3.Object中的clone方法
            4.序列化
        */
        
//        Class.forName("com.yyzy.test.Stud1ent");
        a1();
        
        
        /*
            以上代码就是典型的编译异常、

            需要去解决:  解决的方式分为2种  推荐用第二种
            1.抛异常(甩锅)
                直接在异常代码所在的方法的尾巴后面加上 throws XxxException   一般来说就加个throws Exception
                甩锅:谁调用它,谁去解决它,如果是Main方法调用,则不解决了。
                
                
            2.抓异常(当场解决)
                详情见Demo4
        
        */
    }
    
    
    
    public static void a1() throws Exception{
        Class.forName("com.yyzy.test.Stud1ent");
    }
    
    
}
    public static void main(String[] args) {
        
        //如何抓异常(当场解决) 语法如下:
        /*
            try{
                可能出现异常的代码;
            }catch (可能出现的异常类  变量名){
                哪一行如果出现了异常就立即进入这里而非报错;
            }
            
        */
        
//        try {
//            System.out.println("我没有出现异常");
//            Class.forName("com.yyzy.test.Student");
//        }catch(Exception abc) {
//            System.out.println("我是异常出现了");
//        }
        
        
        
        
        
        
        //抓异常的升级版
        /*
            try{
                可能出现异常的代码;
            }catch (可能出现的异常类  变量名){
                哪一行如果出现了异常就立即进入这里而非报错;
            }finally{
                不管有没有出异常,都要执行这里,
            }
        
        */
        
        
        
        
//        Scanner sc = new Scanner(System.in);
//        System.out.println("请输入你的id");
//        try {
//            int id = sc.nextInt();
//            System.out.println("你的id为" + id);
//            
//        }catch(Exception e) {//衍生: 如果想要知道异常的具体信息,可以通过e.getMessage获取即可
//            System.out.println("你输入的数字格式有误" + e);
//        }finally {
//            sc.close();
//            System.out.println("sc成功关闭");
//        }
        
        
        
        //衍生: try和catch的关系:
        //如果想对catch的异常进行分类,可以出现多个catch
        
//        try {
//            String str = null;
//            System.out.println(str.length());
//            int a = 1/0;
//        }catch (NullPointerException e) {
//            System.out.println("空指针报错了");
//        }catch (ArrayIndexOutOfBoundsException e) {
//            System.out.println("数组下标异常进入这里");
//        }catch (NumberFormatException e) {
//            System.out.println("数字解析异常");
//        }
        
        
        
//        //说明try后面可以不跟catch
//        try {
//            System.out.println(1);
//        }finally {
//            System.out.println(2);
//        }
//        
        
        //说明try不能单独使用,要么跟catch一起 要么跟finally一起
//        try {
//            System.out.println(1);
//        }
        
        //catch和finally必须要结合try使用
//        catch(Exception e) {
//            
//        }finally {
//            
//        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值