Java -- 异常
异常:在程序执行过程中,出现的非正常情况,会倒是JVM的非正常停止
在Java等面向对象的程序语言中,异常本身是一个类,
产生异常就是创建了异常对象,并抛出了一个异常对象
java处理异常的方法是:中断处理
异常体系:
异常的根类(祖宗类):Throwable //全名:java.lang.Throwable
他的两个子类:Error 和 Exception //全名:java.lang.error 错误 / java.lang.exception 异常
java.lang.Throwable: 是java语言中所有错误或者异常的超类(父类)
Exceptio:编译器异常,进行编译(写代码)java程序出现的问题
RuntimeEcception:运行期异常,java程序运行过程中出现的问题
异常相当于程序得了一个小毛病(感冒,发烧),把异常处理掉,程序可以继续执行(吃点药)
错误相当于绝症(救不活那种),必须修改源代码,程序才能继续执行
⭐throw关键字:抛出指定异常,对于throw而言一般是用在抛出一个异常对象
作用:使用throw关键字在指定的方法中抛出指定的异常
格式:throw new xxxException("异常产生的原因");
注意:1.throw关键字必须卸载方法的内部
2.throw关键字后面new的对象必须是Exception 或者是Exception的子类对象
3.throw关键字抛出指定的异常对象,我们就必须处理这个异常对象
处理方式:throw关键字后面,创建的是RuntimeException或者是它的子类,
我们可以不处理,默认交给JVM处理(打印异常对象,并且中断程序)
throw关键字后面,创建的是编译异常,
我们就必须处理这个异常,要么throws,要么try catch
进入工作后,第一件事 应该对传递过来的参数,进行合法性校验,如果参数不合法,那么我们就必须抛出异常,告诉方法的调用者,传递的参数有问题
[code]//RuntimeException异常,后面不需要throws或者try catch去处理异常 //public static int getElement(int ar[],int index) { √ package demo02; public class Main_Class { public static void main(String[] args) { int[] array = new int [3]; int e = getElement(array,5); } public static int getElement(int ar[],int index) { if(ar == null) { throw new NullPointerException("传递的数组的值是null"); //空指针异常,是一个运行期异常 //交给JVM 处理,中断,并打印出异常原因 } if(index < 0 || index >ar.length-1) { throw new ArrayIndexOutOfBoundsException("传递的数组界"); //数组越界也是一个运行期异常 //我们可以进行对数组的索引index进行合法性校验 //如果index不在合法范围内,我们就抛出数组索引越界异常 //告知方法的调用者,“传递的索引超出数组使用范围 ” } int ele = ar[index]; return ele; } }
⭐异常处理的第一种方式:throws
作用:当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象,可以使用throws处理异常对象
注意:抛出默认抛出给方法调用的使用者(),找不到使用者就扔给JVM
格式:
public static void 函数名(参数) throws xxxxException
{
if(....){
throw new xxxxxException("异常原因");
}
}
[code] package demo02; import java.io.FileNotFoundException; import java.io.IOException; ///FileNotFoundException 是编译异常, //必须使用throw或者try处理异常, //throw就是交给调用该方法的对象(下下策就是给JVM),try就是自己解决 public class Main_Class { public static void main(String[] args) { } //public static void readFile(String fileName) throws FileNotFoundException //public static void readFile(String fileName) throws IOException // public static void readFile(String fileName) throws IOException,FileNotFoundException{ //由于FileNotFoundException extends IOException //抛出异常如果有父子关系,那么直接throws给父类即可 public static void readFile(String fileName) throws IOException{ if(!fileName.equals("C:\\a.txt")) { throw new FileNotFoundException("传递的路径不是C:\\a.txt"); } if(!fileName.endsWith(".txt")) { throw new IOException("文件的后缀名不对"); } } }
⭐异常处理的第二种方式:try...catch
格式:try {
可能产生异常的代码
}cath(定义一个异常的变量,用来接收try中抛出的异常){
处理异常对象,在工作中一般都是把异常的信息记录到一个日志中
}
catch(异常类型 异常变量){
...
}
[code] package demo02; import java.io.FileNotFoundException; import java.io.IOException; public class Main_Class { public static void main(String[] args) { try { readFile("C:\\a.tt"); }catch(IOException e) {//try中抛出什么异常对象,catch就定义什么异常变量(e),用来接收这个异常对象 System.out.println("catch里的代码"); } System.out.println("后续代码"); } public static void readFile(String fileName) throws IOException{ if(!fileName.equals("C:\\a.txt")) { throw new FileNotFoundException("传递的路径不是C:\\a.txt"); } if(!fileName.endsWith(".txt")) { throw new IOException("文件的后缀名不对"); } System.out.println("文件名不对"); } }
- 点赞
- 收藏
- 分享
- 文章举报
- Java学习笔记-异常
- 如何在Java程序出现异常时输出其文件和行号
- Eclipse 异常--A java is Exception
- java关于异常处理只使用try-finally而不使用catch
- java 异常大集合
- java常见异常
- Java异常处理原则与技巧总结
- Java内存区域与内存溢出异常——深入理解Java虚拟机读书笔记(一)
- Java程序异常处理的特殊情况
- 深入理解Java异常
- Java常见的异常,Java运行时异常和一般异常的区别
- java中排序报:Comparison method violates its general contract异常的解决
- Java并发编程-27-异常处理及取消任务
- java学习笔记61--异常的抛出与捕获
- Java异常处理机制以及try-catch-finally-return执行顺序
- Java学习笔记之异常
- 新手看JAVA异常处理机制
- RestTemplate异常no suitable HttpMessageConverter found for request type [java.lang.Integer]
- java.io.EOFException异常
- 异常--java.text.ParseException: Unparseable date