首页 > 编程语言 >Java异常

Java异常

时间:2022-11-10 04:22:18浏览次数:48  
标签:... java System Java 异常 public out

异常

一、异常:就是程序出现不正常的情况。

Throwable Error
Exception RuntimeException
非RuntimeException
  1. Error:严重问题,不处理
  2. Exception:异常类,程序本身可以处理
    • RuntimeException:编译期间不检查,程序出现问题再修改代码
    • 非RuntimeException:编译期间处理,否则程序不能通过编译,更不能运行

二、异常处理方案:

1. try...catch...
2. throws

1. try...catch...

//系统默认处理异常方式
   public class ExceptionDemo {
    public static void main(String[] args) {
        System.out.println("开始");
        method();
        System.out.println("结束");
    }

    public static  void method (){
        int[] arr = {1,2,3};
        System.out.println(arr[3]);
    }
}

运行结果:当出现异常时,程序不能继续往下执行

开始
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at com.chawaner.test2.ExceptionDemo.method(ExceptionDemo.java:17)
at com.chawaner.test2.ExceptionDemo.main(ExceptionDemo.java:11)
//try...catch..处理异常
public class ExceptionDemo {
 public static void main(String[] args) {
     System.out.println("开始");
     method();
     System.out.println("结束");
 }

 public static  void method (){
     int[] arr = {1,2,3};
     try {
         System.out.println(arr[3]);
     } catch (ArrayIndexOutOfBoundsException e) {
         e.printStackTrace();
     }
 }
}

运行结果:当出现异常时,程序能继续往下执行

开始
结束
java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
	at com.chawaner.test2.ExceptionDemo.method(ExceptionDemo.java:18)
	at com.chawaner.test2.ExceptionDemo.main(ExceptionDemo.java:11)

2. Throwable:所有异常的父类,包含的一些方法

public String getMessage()		返回异常信息
public String toString()		返回可抛出的简短说明
public void printStackTrace()	打印详细异常信息
public class ExceptionDemo {
    public static void main(String[] args) {
        System.out.println("开始");
        method();
        System.out.println("结束");
    }

    public static  void method (){
        int[] arr = {1,2,3};
        try {
            System.out.println(arr[3]);
        } catch (ArrayIndexOutOfBoundsException e) {
            //e.printStackTrace();
            //返回异常信息
            System.out.println("异常信息:"+e.getMessage());
            //返回可抛出的简短说明
            System.out.println("简短说明:"+e.toString());
            //打印详细异常信息
            e.printStackTrace();
        }
    }
}

运行结果:

开始
异常信息:Index 3 out of bounds for length 3
简短说明:java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
结束
//详细异常信息
java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
	at com.chawaner.test2.ExceptionDemo.method(ExceptionDemo.java:18)
	at com.chawaner.test2.ExceptionDemo.main(ExceptionDemo.java:11)

3. 编译时异常和运行时异常的区别
运行时异常:

public class ExceptionDemo1 {
    public static void main(String[] args) {
        method();
    }

    public static void method (){
        int[] arr = {1,2,3};
        //这个索引越界了,但是写代码时没有报错,运行的时候才报错
        //所以,这是个运行时异常
        System.out.println(arr[3]);
    }
}

运行结果:ArrayIndexOutOfBoundsException

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
	at com.chawaner.test2.ExceptionDemo1.method(ExceptionDemo1.java:17)
	at com.chawaner.test2.ExceptionDemo1.main(ExceptionDemo1.java:10)

编译时异常:不一定会出问题,但有可能会出问题
编译时异常
4. throws
有时候异常能够用try...catch...处理,有时候可能出现的异常是我们处理不了的,这个时候用throws解决。

在方法括号后跟上throws 异常类名
在这里插入图片描述
运行结果:throws可以解决编译时异常那个红色波浪线的提示。

Wed Nov 09 00:00:00 CST 2022

在这里插入图片描述
运行结果:运行时异常用throws解决不了,只是抛出异常。还得用try...catch...处理,才能在提示报错后,继续执行后面的程序。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
	at com.chawaner.test2.ExceptionDemo1.method(ExceptionDemo1.java:24)
	at com.chawaner.test2.ExceptionDemo1.main(ExceptionDemo1.java:14)

在这里插入图片描述
总结:

  • 运行时异常用try...catch...
  • 编译时异常用throws或者try...catch...
  • try...catch...是有显示处理的,就是用try...catch...你可以自己处理异常
  • throws是抛出异常,控制台显示的是系统给的异常结果

自定义异常

写一个类,让类继承Exception

//自己写的JException异常类
public class JException extends Exception{
    public JException() {
    }

    public JException(String message) {
        super(message);
    }
}
/*
	IntNumber类,里面有个检查数字范围的方法checkNum(int i)
	checkNum(int i)方法是由JException抛出的
	JException抛出的异常结果显示为:输入的数字有误,范围应为:0-100
*/
public class IntNumber {
    public void checkNum(int i) throws JException{
        if (i < 0 || i > 100) {
            //抛出异常,并显示自己写的异常结果信息
            throw new JException("输入的数字有误,范围应为:0-100");
        }else {
            System.out.println("正常");
        }
    }
}
//测试类:输入数字,并检查数字的范围
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数字:");
        int i = sc.nextInt();
        IntNumber in = new IntNumber();
        try {
            //编译时异常
            in.checkNum(i);
        } catch (JException e) {
            e.printStackTrace();
        }
    }
}
//运行结果:控制台显示了自定义异常类JException
//以及自己处理的异常显示结果:输入的数字有误,范围应为:0-100
请输入一个数字:
120
com.chawaner.test3.JException: 输入的数字有误,范围应为:0-100
	at com.chawaner.test3.IntNumber.checkNum(IntNumber.java:12)
	at com.chawaner.test3.Test.main(Test.java:18)

throws和throw的区别

throws throw
用在方法声明后,后面跟异常类名 用在方法体内,后面跟异常对象
抛出异常,由方法调用者处理 抛出异常,由方法内的语句处理
表示可能发生异常,但不一定会发生 执行throw时,一定抛出了异常

标签:...,java,System,Java,异常,public,out
From: https://www.cnblogs.com/chawaner/p/16875783.html

相关文章

  • java异步读取文件2种实现
    `importcom.sun.tools.jconsole.JConsoleContext;importjava.io.;importjava.lang.reflect.Array;importjava.math.BigDecimal;importjava.nio.ByteBuffer;impor......
  • [JavaScript-05]函数和箭头函数
    1.函数functionaddNums(num1=1,num2=2){console.log('num1+num2:',num1+num2);returnnum1+num2;}addNums();addNums(5,6);console.log('addNums(......
  • Java创建对象的5种方式
    new:最常见的方法Employeeemp1=newEmployee();newInstance()用newInstance()创建对象分2种1、使用class类的newInstance()方法需要有一个无参的构造方法,这个n......
  • Java集合简单介绍
    Java集合框架主要包括两种类型的容器,一种是Collection,存储一个元素集合,另一种是Map,存储键/值对映射。一、Collection集合List集合特点:有序可重复ArrayList集合(内部......
  • 关于Java中枚举Enum的深入剖析
    在编程语言中我们,都会接触到枚举类型,通常我们进行有穷的列举来实现一些限定。Java也不例外。Java中的枚举类型为Enum,本文将对枚举进行一些比较深入的剖析。什么是EnumEnum是......
  • JAVA-this关键字
    packagecom.itheima;/*学生类*/publicclassstudent02{//成员变量privateStringname;privateintage;publicvoidsetAge(intage){......
  • [JavaScript-03]IF 三元表达式 逻辑运算 == ===
    1.语句//if语句letx=10;if(x==10){console.log('xis10')};//ifelseifelsex=20;if(x===10){console.log('xis10');}elsei......
  • Java代码块运行顺序细节阐述
    以下这个例子非常好的阐述了父子类同时存在时静态代码块/静态变量初始化,普通代码块/普通成员变量初始化,构造器之间的具体运行顺序。注意,在构造器开头,我们可以看作按顺序隐......
  • [JavaScript-04]Switch
    1.Switch//Switch语句constcolor='green';switch(color){case'red':console.log('colorisred');break;case'blue':......
  • JAVA-private关键字
    packagecom.itheima;/*学生类*/publicclassstudent01{//成员变量privateStringname;//给name设置privateprivateintage;publicvoid......