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 阅读(145) 评论(0) 编辑 收藏 举报