zoukankan      html  css  js  c++  java
  • Java try catch

    /*
     
    异常处理的捕捉形式:
    这是可以对异常进行针对性处理的方式。
     
    具体格式是:
    try
    {
    //需要被检测异常的代码。
    }
    catch(异常类 变量)//该变量用于接收发生的异常对象
    {
    //处理异常的代码。
    }
    finally
    {
    //一定会被执行的代码。
    }
     
     
    异常处理的原则:
    1,函数内容如果抛出需要检测的异常,那么函数上必须要声明。
    否则必须在函数内用trycatch捕捉,否则编译失败。
     
    2,如果调用到了声明异常的函数,要么trycatch要么throws,否则编译失败
     
    3,什么时候catch,什么时候throws 呢?
    功能内容可以解决,用catch。
    解决不了,用throws告诉调用者,由调用者解决 。
     
    4,一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。
    内部又几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。
    class FuShuIndexException extends Exception
    {
        FuShuIndexException()
        {}
    
        
        FuShuIndexException(String msg)
        {
            super(msg);
        }
    }
    
    
    class Demo
    {
        public int method(int[] arr,int index)//throws NullPointerException,FuShuIndexException
        {    
            if(arr==null)
                throw new NullPointerException("没有任何数组实体");
            if(index<0)
                throw new FuShuIndexException();
                
            return arr[index];
        }
    }
    
    class  ExceptionDemo4
    {
        public static void main(String[] args) 
        {
            int[] arr = new int[3];        
            Demo d = new Demo();
            try
            {
                int num = d.method(null,-1);
                System.out.println("num="+num);
                return;
            }
            
            catch(NullPointerException e)
            {
                System.out.println(e.toString());
                             return;
            }
            catch (FuShuIndexException e)
            {
                System.out.println("message:"+e.getMessage());
                System.out.println("string:"+e.toString());
    
                e.printStackTrace();//jvm默认的异常处理机制就是调用异常对象的这个方法。
    
                System.out.println("负数角标异常!!!!");
            }
            /*
            catch(Exception e)   //多catch父类的catch放在最下面。
            {
                System.out.println(e);
            }
                   finally       //一定会执行的代码
            {
                System.out.println("finally");
            }
            */
            System.out.println("over");
        }
        
    }
    
    
    /*
    try catch finally 代码块组合特点:
    
    1,
    try catch finally
    
    2,
    try catch(多个)当没有必要资源需要释放时,可以不用定义finally。
    
    3,
    try finally 异常无法直接catch处理,但是资源需要关闭。 
    */
    
    class FushuException extends Exception
    {
        public FushuException(String s)
        {
            super(s);
        }
    }
    
    class Person
    {
        int age;
        String name;
        public Person(String name,int age)
        {
            this.name = name;
            this.age = age;    
        }
        
        public Person()
        {
            
        }
        
        public int method(int[] arr,int index) throws FushuException 
        {
            if(arr == null)
            {
                throw new NullPointerException("数组不能为null");
            }
            if(index < 0)
            {
                throw new FushuException("数组下标不能为负数");
            }
            if(index > arr.length)
            {
                throw new ArrayIndexOutOfBoundsException("数组下标越界 ");
            }
            return arr[index];
        }
    }
    
    public class FieldDemo 
    {
        public static void main(String[] args) throws FushuException
        { 
            
            Person person = new Person("Tom", 50);
            int[] arr = {1,2,3};
            
            try {
                int rel = person.method(arr, -2);
                System.out.println(rel);
            } 
            finally
            {
                System.out.println("finally");
            }
            
            System.out.println("over");
          
        }  
      
    } 
  • 相关阅读:
    指针加减法运算的“定义域”
    将main()进行到底
    带命令行参数的main函数的误解[到处转载的垃圾]
    亡羊补牢还是越错越远——“C99允许在函数中的复合语句中定义变量”
    会错意表错情,搭错车上错床——“度日如年”的故事及“feof()”的故事
    狗屁不通的《C语言详解:什么是表达式、语句、表达式语句?》
    已知两边长求三角形面积
    用驴子拖宝马——怎样滥用结构体
    糟蹋好题——魔方阵问题
    怎样建立链表并同时造成内存泄露
  • 原文地址:https://www.cnblogs.com/xiarongjin/p/8308403.html
Copyright © 2011-2022 走看看