当前位置: 首页 > news >正文

Java Se—异常

目录

1.认识异常 / 什么是异常

1.1、Java的异常体系

1.2、异常的基本处理

2、异常的作用

3、自定义异常

4、异常的处理方案

5、异常两种处理方式


1.认识异常 / 什么是异常

        异常(Exception) 指的是程序在运行过程中发生的、打断正常指令执行流程的非正常事件或错误情况。说白了异常代表程序出先了问题。(比如下标越界)。

1.1、Java的异常体系

1.2、异常的基本处理

代码:

ExceptionDemo1 类

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class ExceptionDemo1 {public static void main(String[] args) throws ParseException {  //这里可以抛出多个异常,用逗号隔开//目标:认识异常的体系,搞清楚异常的基本作用show();try {show1();} catch (ParseException e) {e.printStackTrace();} catch (FileNotFoundException e) {throw new RuntimeException(e);}
//        show1();}//定义一个方法认识运行时异常public static void show(){//运行时异场特点:编译不报错,运行时异常,继承自 RuntimeException//案例1:数组越界
//        int[] arr = {10,20,30};
//        System.out.println(arr[3]);  //ArrayIndexOutOfBoundsException//案例2://分母不能为0
//        System.out.println(10/0); //ArithmeticException//案例3://空指针错误
//        String str = null;
//        System.out.println(str.charAt(0));//NullPointerException}//定义一个方法认识编译异常public static void show1() throws ParseException, FileNotFoundException {  //抛出多个异常,用逗号隔开。可以直接抛出Exception,抛出所有异常//编译异常:编译阶段报错,编译不通过,运行时异常String str = "2025-10-31 10:10:10";//把字符串时间解析成Java中的日期对象。SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = sdf.parse(str); //编译时异常:提醒程序员这里的程序很容易出错,请你注意!System.out.println(date);//在d盘读一个图片String path = "d:\\1.jpg";FileInputStream fis = new FileInputStream(path);}
}
/*
运行时异常:*/

2、异常的作用

作用1:异常是用来定位程序bug的关键信息。

作用2:可以作为内部的一种特殊返回值以便通知上层调用者,方法的执行问题。

ExceptionDemo2 类

public class ExceptionDemo2 {public static void main(String[] args) {//目标:搞清楚异常的作用System.out.println("程序开始执行~~");try {System.out.println(div(10,0));} catch (Exception e) {e.printStackTrace();  //输出异常信息}//System.out.println(div(10,0));System.out.println("程序结束执行~~");}public static int div(int a,int b) throws Exception {if(b== 0){System.out.println("除数不能为0,你输入的参数有误~~");//这时候就需要结束词方法//return ; //如果这里直接return ;会报错。//我们可以返回一个异常给上层的调用者,返回的异常还能告知上层是执行成功了还是失败了throw new Exception("除数不能为0,你输入的参数有误~~"); //这里用throw抛出异常,}return a/b;}
}
/*
程序开始执行~~
除数不能为0,你输入的参数有误~~
程序结束执行~~
java.lang.Exception: 除数不能为0,你输入的参数有误~~at demo1_exception.ExceptionDemo2.div(ExceptionDemo2.java:21)at demo1_exception.ExceptionDemo2.main(ExceptionDemo2.java:8)*/

3、自定义异常

 Java无法为这个世界上全部的问题都提供异常类来代表,如果企业自己的某种问题,想通过异常类表示,以便于用异常来管理该问题,那就需要自己来定义异常类。

自定义编译异常.

代码:定义一个异常类

AgeException类,年龄异常类

/*** 自定义的编译时异常* 1.继承Exception类(父类)* 2、重写Exception类中的构造器* 3.哪里需要这个异常返回、哪里就抛这个异常*/
public class AgeException extends  Exception{ //继承了Exception类public AgeException() {}public AgeException(String  message) {super(message); //调用父类的带参构造器}
}

ExceptionDemo3类:测试异常类

public class ExceptionDemo3 {public static void main(String[] args) {//目标:认识定义自定义异常。try {checkAge(130);}catch (AgeException e){e.printStackTrace(); //输出异常信息}}//需求:我们公司的系统只要受到了年龄小于1岁或者大于120岁就是一个异常。public static void checkAge(int age) throws AgeException {if(age<1 || age>120){//自定义异常类throw new AgeException("年龄范围在1~120之间");}else{System.out.println("年龄范围正确");System.out.println("年龄:"+age);}}
}
/*
demo1_exception.AgeException: 年龄范围在1~120之间at demo1_exception.ExceptionDemo3.checkAge(ExceptionDemo3.java:16)at demo1_exception.ExceptionDemo3.main(ExceptionDemo3.java:7)*/

运行时异常

RuntimeException类

/*** 自定义的运行时异常* 1.继承RuntimeException类(父类)* 2、重写RuntimeException类中的构造器* 3.哪里需要这个异常返回、哪里就抛这个异常*/
public class AgeRuntimeException extends  RuntimeException{ //继承了Exception类public AgeRuntimeException(String s) {super(s);}public AgeRuntimeException() {}
}

RuntimeExceptionDemo4

4、异常的处理方案

方案一:代码

ExceptionDemo5类方案一的演示

import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.Date;public class ExceptionDemo5 {public static void main(String[] args) {//目标:掌握异常的处理方案1:底层异常都抛出去给最外层调用者,最外层捕获异常,记录异常,响应合适信息给用户观看System.out.println("程序开始执行~~");try {show1();System.out.println("程序正常结束~~");}catch (Exception e){e.printStackTrace();System.out.println("程序出现异常,请稍后再试~~");}System.out.println("程序结束执行~~");}public static void show1() throws Exception{  //抛出多个异常,用逗号隔开。可以直接抛出Exception,抛出所有异常//编译异常:编译阶段报错,编译不通过,运行时异常String str = "2025-10-31 10:10:10";//把字符串时间解析成Java中的日期对象。SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM-dd HH:mm:ss");Date date = sdf.parse(str); //编译时异常:提醒程序员这里的程序很容易出错,请你注意!System.out.println(date);//在d盘读一个图片String path = "d:\\1.jpg";FileInputStream fis = new FileInputStream(path);}
}
/*
程序开始执行~~
java.text.ParseException: Unparseable date: "2025-10-31 10:10:10"at java.text.DateFormat.parse(DateFormat.java:366)at demo1_exception.ExceptionDemo5.show1(ExceptionDemo5.java:27)at demo1_exception.ExceptionDemo5.main(ExceptionDemo5.java:12)
程序出现异常,请稍后再试~~
程序结束执行~~*/

方案二代码

ExceptionDemo6 类

import java.util.Scanner;public class ExceptionDemo6 {public static void main(String[] args) {//目标:方案二掌握异常的处理方案二:捕获异常对象,尝试重新修复//接收用户输入的数字System.out.println("程序开始执行~~");while (true) {try {double price = userInputPrice();System.out.println("用户输入的数字是:"+price);break;} catch (Exception e) {System.out.println("你输入的信息有误请程序输入!");}}System.out.println("程序结束执行~~");}public static double userInputPrice(){Scanner sc = new Scanner(System.in);System.out.println("请输入商品价格:");double price = sc.nextDouble();return price;}
}

5、异常两种处理方式

http://www.dtcms.com/a/556799.html

相关文章:

  • JSON.stringify() 方法详解
  • DevOps工具链对比,Azure 和 TikLab哪款更好用?
  • 安徽省住房城乡建设厅门户网站深圳百度快速排名优化
  • 一种无需IP核的FPGA RAM初始化方法:基于源码定义与赋值实现
  • openpnp - 坐标系统只有一个
  • 前端新技术解读:WebAssembly、Web Components 与 Tailwind CSS
  • 做a爱片网站做山西杂粮的网站
  • mysql保存二进制数据
  • 目标跟踪 deepsort
  • 网站建设前的分析第一小节内容好看网页设计
  • SAP PP生产版本批量维护功能分享
  • 【Linux】当遇到不是root用户,无法进入root用户,却仍需要使用sudo命令时
  • Python 生成书法字体(以瘦金体为例)
  • Advanced Science 国防科大开发1.8克人仿生眼球,实现微型化与功能集成度兼具!
  • 数据结构05:顺序表经典算法
  • 静态网站开发课程深圳东门网红打卡地
  • Ubuntu 24.04下编译支持ROCm加速的llama.cpp
  • 如何在DCU上面编译llama.cpp
  • 具身导航轨迹规划与主动想象融合!DreamNav:基于轨迹想象的零样本视觉语言导航框架
  • AWS + SEO:让网站从服务器层面赢在搜索引擎起跑线
  • 深度学习(9)导数与计算图
  • 好看的网站建设公司中企动力网站建设公司
  • JavaSe—泛型
  • ssm面试题梳理
  • 基于MATLAB的二维图像三维重建算法比较研究
  • SVG 参考手册
  • 微软Copilot+企业版亮相:GPT-5赋能,效率激增47%,多模态操控金融级安全
  • 我在高职教STM32(新08)——初识LCD1602
  • 购买qq空间访客的网站一般app开发费用多少
  • 有没有个人做网站的长沙装修公司排行榜