您的位置:首页 > 编程语言 > Java开发

Java -- 异常

2020-01-15 12:00 1866 查看

异常:在程序执行过程中,出现的非正常情况,会倒是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("文件名不对");
}
}

 

 

  • 点赞
  • 收藏
  • 分享
  • 文章举报
AKUANer 发布了65 篇原创文章 · 获赞 0 · 访问量 1084 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: