异常

    
    什么是以异常?
    Java代码在运行时期发生的问题就是异常。
    比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等
一、异常的分类
    1、ERROR错误:java虚拟机的错误,程序无法解决
    2、Exception 异常:编程时出现的错误;
二、异常结构
    java.lang.Object
        java.lang.throwable
            java.lang.Error    java 虚拟机的错误
            java.lang.Exception  编程时出现的错误
            编译异常:编译时出现的异常
            运行时异常:运行时出现的异常
    常见的异常:
        1、数组下标越界异常
            java.lang.ArrayIndexOutOfBoundsException  
            int [] num = new int[5];
            System.out.println(num[5]);
          
        2、空指针异常
            java.lang.NullPointerException
            Person p = new Person();
            p = null;
            System.out.println(p.toString());
        
        3、算数运算异常
            java.lang.ArithmeticException        
            int i = 10/0;
            System.out.println(i);
        
        4、类型转换异常
            java.lang.ClassCastException
            Object date = new Date();
            String dt = (String)date;
        
        5、数字转换异常
            java.lang.NumberFormatException
            String s = "1a3";
            int n = Integer.parseInt(s);
            System.out.println(n);
            
三、处理异常
    1、处理异常的方式:捕获(抓取),抛出异常
        方式1:try{
                //可能会出现异常的代码,
                //编译时出现错误的代码
                //作用域(局部变量或对象)
                    
                }catch(抓取或捕获异常对象的类型 e){
                //捕获错误信息
                //捕获错误信息常用的两种方式:
                    1.e.getMessage()
                    2.e.printStackTrace();
                //输出自己定义的错误信息
                        
                }finally{
                        
                }
            注意:1、catch块:异常类型如果是子父类关系,子异常在前,父异常在后
                    2、写多个catch块的目的是更详细捕获不同的错误
                       3、finally 块无论如何都会执行
                       4、如果说有异常,同块中后面的代码都不执行
                           try-catch
                           try-catch-finally
                           try-finally
                          
        方式2:throws抛出(不能输出异常消息,是一个声明)
        一个方法中可能会发生多种异常,但是不能确定,可以用抛出的方式,将异常抛给调用者
            throws进行抛出    
            声明:在方法名的后面throws异常类型,异常类型
    2、抛出异常(真正地把异常抛出去)
        1、自动抛出:int i= 10/0;
        throw
        2、手动抛出
        方式:throw new RuntimeException("比较对象有误");
          

 package com.lulei.abnormal;

            public class TestRectangle {
                public static void main(String[] args) {
                Rectangle r1 = new Rectangle(2, 3);
                Rectangle r2 = new Rectangle(2, 2);
                try {
                    int n = r1.getArea(new String("haha"));
                } catch (RuntimeException e) {
                    // TODO Auto-generated catch block
                    System.out.println("run"+e.getMessage());
                
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    System.out.println(e.getMessage());
                    
                }
            }
            

            }
            class Rectangle{
                int i;//
                int j;//
                public Rectangle(int i, int j) {
                    super();
                    this.i = i;
                    this.j = j;
                }
                //比较面积
                public int getArea(Object obj) throws Exception {
                    if(this == obj) {
                        return 0;
                    }else if(obj instanceof Rectangle) {
                        Rectangle r = (Rectangle)obj;
                        if(this.i*this.j>r.i*r.j) return 1;
                        else if(this.i*this.j<r.i*r.j) return -1;
                        else return 0;
                    }else {
                    
                            throw new RuntimeException("比较对象有误");
                        
                    }
                    
                }
            }
View Code

 


四、自定义异常:
  

 1  package com.lulei.abnormal;
 2 
 3 
 4     public class MyException extends Exception {
 5         
 6         static final long serialVersionUID = -338751893124229948L;
 7 
 8         public MyException() {}
 9 
10         public MyException(String msg) {
11             super(msg);
12         }
13         
14     }

 



                    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
       

转载于:https://www.cnblogs.com/lulei111/p/10975913.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值