昆仑山:眼中无形心中有穴之穴人合一

夫君子之行,静以修身,俭以养德;非澹泊无以明志,非宁静无以致远。夫学须静也,才须学也;非学无以广才,非志无以成学。怠慢则不能励精,险躁则不能冶性。年与时驰,意与岁去,遂成枯落,多不接世。悲守穷庐,将复何及!

 

Java:异常处理

异常分类


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class HandleException {
    public static void main(String[] args) throws ParseException {
        /**
         * java.Lang.Throwabte:类是Jova语言中所有错误或异常的超类。
         * Exception:编译期异常,进行编译(写代码)java置序出现的问题
         *
         * RuntimeException:运行期异常,javo程序运行过程中出现的问题
         *
         * 异常就相当于程序得了一个小毛病(感冒,发烧),把异常处理辩,程序可以继续执行(吃点药,继续革命工作)
         *
         * Error:错误   错误就相当于程序得了一个无法治愈的毛病(非典,艾浦).必须修改源代码,程序才能继续执行
         */
//Exceptton:编译期异常,进行编译(写代码)javo程序出现的问题
        /*SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-ddd");
        Date date=simpleDateFormat.parse("2019-12-15");
        System.out.println(date);*/

//RuntimeException:运行期异常,javo程序运行过程中出现的问题

        int[]num={5,4,3};

        try{
            System.out.println(num[5]);
        }catch (Exception e){
            System.out.println(e);
        }

//        Error:错误
        /**
         * 解决办法 修改数组 下标  
         */
        int[] indexs=new int[(int)Math.pow(1024,3)];//Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    }

}

throw关键字 使用

/**
 * throw关键字
 * 作用:
 * 可以使用throw关键字在指定的方法中抛出指定的异常
 *
 *1.throw关键字必须写在方法的内部
 *
 * 2.throw关键字后边new的对象必须是Exception或者Exception的子类对象
 *
 * 3.throw关键字抛出指定的异常对象,我们就必须处理这个异常对象
 *      throw关键子后边创建的是RuntimeException或着是RuntimeException的子类对象,我们可以不处理,默人交给JVM处理(打印异常对象,中断程序)
 *
 *      throw关键字后边创建的是编译异常(写代码的时候报错),我们就必须处理这个异常,要么throws,要么try...catch
 */


public class HandleException {
    public static void main(String[] args) {
//        int counts[]=null;
        int counts[]={5,3,4};
        System.out.println(getNumber(counts,5));
    }

    /**
     * 以后(工作中)我们首先必须对方法传递过来的参数进行合法性校验     *
     * 如果参数不合法,那么我们就必须使用抛出异常的方式,告知方法的调用者,传递的参教有问题
     * @param nums
     * @param index
     * @return
     */
    public  static int getNumber(int[] nums,int index){
        /**
         * 我们可以对传递过来的参数数组,进行合法性校验
         *
         * 如果数组nums的值是null
         * 那么我们就出空指针异常,告知方法的调用者"传递的数组的值是null"
         */
        if(nums==null){
//         注意:
//NullPointerException是一个运行期异常,我们不用处理,默认交给JVM处理
            throw new NullPointerException("传递的数组的值是null");
        }

        /**
         * 我们可以对传递过来的参数index进行合法性校验
         *
         * 如果index的范围不在数组的素引范围内
         * 那么我们就抛出数组索引越界异常,告知方法的调用者“传递的索引超出了数组的使用范围"
         */

        if(index<0||index>nums.length-1){
//            ArrayIndexOutOfBoundsException 运行期 异常
            throw new ArrayIndexOutOfBoundsException("传递的索引超出了数组的使用范围");
        }
        return nums[index];
    }

}







import java.util.Objects;

/**
 * throw关键字
 * 作用:
 * 可以使用throw关键字在指定的方法中抛出指定的异常
 *
 *1.throw关键字必须写在方法的内部
 *
 * 2.throw关键字后边new的对象必须是Exception或者Exception的子类对象
 *
 * 3.throw关键字抛出指定的异常对象,我们就必须处理这个异常对象
 *      throw关键子后边创建的是RuntimeException或着是RuntimeException的子类对象,我们可以不处理,默人交给JVM处理(打印异常对象,中断程序)
 *
 *      throw关键字后边创建的是编译异常(写代码的时候报错),我们就必须处理这个异常,要么throws,要么try...catch
 */


public class HandleException {
    public static void main(String[] args) {
//        int counts[]=null;
        int counts[]={5,3,4};
        System.out.println(getNumber(counts,5));
    }

    /**
     * 以后(工作中)我们首先必须对方法传递过来的参数进行合法性校验     *
     * 如果参数不合法,那么我们就必须使用抛出异常的方式,告知方法的调用者,传递的参教有问题
     * @param nums
     * @param index
     * @return
     */
    public  static int getNumber(int[] nums,int index){
//        Objects.requireNonNull(nums);
        Objects.requireNonNull(index,"数组下标越界");
        return nums[index];
    }

}




throws 关键字的使用

import java.io.FileNotFoundException;

/**
 * throws关键字:异常处理的第一种方式,交给别人处理作用:
 * 当方法内部抛出异常对象的对象,那么我们就必须处理这个异常对象
 *
 * 可以使用throws关健字处理异常对象,会把异常对象声明抛出给方法的调用者处理(自己不处理,给别人处理),最终交给JVM处理--->中断处理
 *
 *
 *
 * 注意:
 * 1.throws关键字必须写在方法声明处
 *
 * 2.throws关键字后边声明的异常必须是Exception或者是Exception的子类
 *
 * 3.方法内部如果抛出了多个异常对象,那么throws后边必须也声明多个异常
 *      如果抛出的多个异常对象有子父类关系,那么直接声明父类异常即可
 * 4.调用了一个声明抛出异常的方法,我们就必须的处理声明的异常
 *      要么继续使用throws声明抛出,交给方法的调用者处理,最终交给JVM
 *      要么try......catch自己处理异常
 */
public class HandleException {
    public static void main(String[] args) throws FileNotFoundException {
        readFile("d:\\demo.txt");
    }


    /**
     * FileNotFoundException是编译异常,抛出了编译异常,就必须处理这个异常
     *
     * 可以使用throws继续声明抛出FileNotFoundException这个异常对象,让方法的调用者处理
     * @param fileName
     * @throws FileNotFoundException
     */
    public static void readFile(String fileName) throws FileNotFoundException{
        if (!fileName.equals("c:\\demo.txt")){
            throw new FileNotFoundException("传递文件路径不对");
        }
        System.out.println("路径没问题,可以读取文件");
    }
}

try......catch

import java.io.IOException;

/**
 * try...catch:异常处理的第二种方式,自己处理异常格式:
 * try{
 * 可能产生异常的代码
 * }
 * catch(定义一个异常的变量,用来接收try中抛出的异常对象){
 * 异常的处理逻辑,异常异常对象之后,怎么处理异常对象
 *
 * 一般在工作中,会把异常的信息记系到一个日志中
 * ......
 * catch(异常类名变量名){
 *
 * }
 *
 * 注意:
 * 1.try中可能会挑出多个异常对象,那么就可以使用多个catch来处理这些异常对象
 *
 * 2.   如果try中产生了异常,那么我就会执行catch中的异常处理逻辑,执行完毕catch中的处理逻辑,继续执行try...catch之后的代码
 *      如果try中没有产生异常,那么就不会执行catch中异常的处理逻辑,执行完try中的代码,继续执行try...catch之后的代码
 */

public class HandleException {
    public static void main(String[] args)  {
        try {
//            可能产生异常的代码
            readFile("c:\\demo.xsl");
        } catch (IOException e) {
//            异常的处理逻辑,异常对象之后,怎么处理异常对象
            System.out.println("你的文件后缀有问题");
            e.printStackTrace();
        }
        System.out.println("继续执行下文");
    }

    /**
     * 如果传递的路径,不是.txt结果
     * 那么我们就抛出IO异常对象,告知方法的调用者,文件的后缀名不对
     * @param fileName
     * @throws IOException
     */
    public static void readFile(String fileName) throws IOException {
        if (!fileName.endsWith(".txt")) {
            throw new IOException("文件后缀名不对");
        }
        System.out.println("路径没问题,可以读取文件");
    }

}

posted on 2019-05-13 10:26  Indian_Mysore  阅读(141)  评论(0编辑  收藏  举报

导航