异常---

目录

认识异常

自定义异常


认识异常

1.异常是什么?
2.异常的代表是谁?分为几类?
Error :代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题, s u n 公司会把这些问题封装成 Error 对象给出来,说白了, Error 是给 s u n 公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。
 Exception :叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用 Exception 以及它的孩子来封装程序出现的问题。
.运行时异常: RuntimeException 及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)

.编译时异常:编译阶段就会出现错误提醒的。(如:日期解析异常)
3.异常代码层面的处理有几种方式?

package com.xinbao.d3_exception;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Exception {public static void main(String[] args) throws ParseException {
//        try {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d = sdf.parse("2028-11-11 10:24");System.out.println(d);
//        } catch (ParseException e) {
//            e.printStackTrace();
//        }}
}

E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=61424:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.Exception
Exception in thread "main" java.text.ParseException: Unparseable date: "2028-11-11 10:24"at java.base/java.text.DateFormat.parse(DateFormat.java:399)at com.xinbao.d3_exception.Exception.main(Exception.java:11)进程已结束,退出代码为 1
自定义异常

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

异常有什么作用?
1、异常是用来查寻系统 Bug 的关键参考信息!

2、异常可以作为方法内部的一种特殊返回值,以便诵知上层调用者底层的执行情况!

package com.xinbao.d3_exception;
//年龄非法运行时异常
public class AgeIllegalRuntimeException extends RuntimeException{//必须让这个类继承自RuntimeException,才能成为异常类//重写构造器public AgeIllegalRuntimeException() {}public AgeIllegalRuntimeException(String message) {super(message);}
}
package com.xinbao.d3_exception;public class ExceptionTest2 {public static void main(String[] args) {//需求:保存一个合法年龄try {saveAge(88);saveAge(188);System.out.println("底层执行成功!");} catch (java.lang.Exception e) {e.printStackTrace();System.out.println("底层出现bug");}}public static void saveAge(int age){if (age>0 && age<150){System.out.println("年龄保存成功" + age);}else {//用一个异常对象封装这个问题//throw 抛出这个异常对象throw new AgeIllegalRuntimeException("/age is illegal, yoyr age is " + age);}}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=61657:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.ExceptionTest2
年龄保存成功88
底层出现bug
com.xinbao.d3_exception.AgeIllegalRuntimeException: /age is illegal, yoyr age is 188at com.xinbao.d3_exception.ExceptionTest2.saveAge(ExceptionTest2.java:22)at com.xinbao.d3_exception.ExceptionTest2.main(ExceptionTest2.java:8)进程已结束,退出代码为 0

编译时异常

package com.xinbao.d3_exception;public class AgeIllegalException extends Exception {public AgeIllegalException() {}public AgeIllegalException(String message) {super(message);}
}
package com.xinbao.d3_exception;public class ExceptionTest2 {public static void main(String[] args) {//需求:保存一个合法年龄try {
//            saveAge(88);
//            saveAge(188);saveAge2(355);System.out.println("底层执行成功!");} catch (java.lang.Exception e) {e.printStackTrace();System.out.println("底层出现bug");}}public static void saveAge(int age){if (age>0 && age<150){System.out.println("年龄保存成功" + age);}else {//用一个异常对象封装这个问题//throw 抛出这个异常对象throw new AgeIllegalRuntimeException("/age is illegal, yoyr age is " + age);}}public static void saveAge2(int age) throws AgeIllegalException{if (age>0 && age<150){System.out.println("年龄保存成功" + age);}else {//用一个异常对象封装这个问题//throw 抛出这个异常对象//throws 用在方法上 抛出方法内部的异常throw new AgeIllegalException("/age is illegal, yoyr age is " + age);}}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=61734:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.ExceptionTest2
com.xinbao.d3_exception.AgeIllegalException: /age is illegal, yoyr age is 355at com.xinbao.d3_exception.ExceptionTest2.saveAge2(ExceptionTest2.java:34)at com.xinbao.d3_exception.ExceptionTest2.main(ExceptionTest2.java:9)
底层出现bug进程已结束,退出代码为 0
异常的常见处理方法

捕获异常,记录异常并相应合适的信息给用户

package com.xinbao.d3_exception;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Exceptiontest3 {public static void main(String[] args) {
//        try {
//            test1();
//        } catch (ParseException e) {
//
//            e.printStackTrace();//打印出这个异常对象的信息,记录下来
//            System.out.println("日期异常");
//        } catch (FileNotFoundException e) {
//            System.out.println("文件读取异常");
//            e.printStackTrace();
//        }try {test1();} catch (Exception e) {System.out.println("您当前操作有问题~");e.printStackTrace();}}//public static void test1() throws ParseException, FileNotFoundException {public static void test1() throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");Date d = sdf.parse("2023-10-27 21:59");//如果有异常,直接抛出异常,不会再往下执行System.out.println(d);test2();}//public static void test2() throws FileNotFoundException {public static void test2() throws Exception {//读取文件InputStream is = new FileInputStream("E:\\社会实践\\社会实践报告(1).docx");}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=35733:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.Exceptiontest3
Fri Oct 27 21:59:00 CST 2023进程已结束,退出代码为 0

捕获异常,尝试重新修复

package com.xinbao.d3_exception;import java.util.Scanner;public class ExceptionTest4 {public static void main(String[] args) {//需求:调用一个方法,让用户输入一个合适的价格返回为止//重新修复while (true) {try {getMoney();break;} catch (Exception e) {//e.printStackTrace();}}}public static double getMoney(){Scanner sc = new Scanner(System.in);System.out.println("put in money:");while (true) {double money = sc.nextDouble();if (money >= 0){return money;}else {System.out.println("input again:");}}}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=35800:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.ExceptionTest4
put in money:
-89
input again:
joaj
put in money:
vnmio
put in money:
24123进程已结束,退出代码为 0

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/150831.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Makefile 基础教程:从零开始学习

在软件开发过程中&#xff0c;Makefile是一个非常重要的工具&#xff0c;它可以帮助我们自动构建程序&#xff0c;管理程序依赖关系&#xff0c;提高开发效率。本篇博客将从基础开始&#xff0c;介绍Makefile的相关知识&#xff0c;帮助大家快速掌握Makefile的使用方法 Makefil…

分组卷积的思想神了

大家好啊&#xff0c;我是董董灿。 最近&#xff0c;分组卷积帮我解决了一个大忙&#xff0c;事情是这样的。 这几天遇到一个头疼的问题&#xff0c;就是要在某一芯片上完成一个神经网络的适配&#xff0c;这个神经网络中卷积居多&#xff0c;并且有一些卷积的通道数很大&…

gitlab查看、修改用户和邮箱,gitlab生成密钥

查看用户、邮箱 git config user.name git config user.email 修改用户、邮箱 git config --global user.name “xxx” git config --global user.email “xxxxxx.com” 生成ssh密钥 ssh-keygen -t rsa -C “xxxxxx.com” 查看SSH秘钥 cat ~/.ssh/id_rsa.pub 将秘钥复制&…

玩转ChatGPT:批量下载Alphafold的蛋白pdb文件

一、写在前面 突发奇想&#xff0c;想批量下载Alphafold网站的蛋白pdb文件&#xff0c;后续再做个分子对接用。又不想手动下载&#xff0c;来求助CSDN和GPT。 二、CSDN白嫖基础代码 CSDN大神多&#xff0c;这不&#xff0c;找到一个&#xff1a;Alphafold批量下载蛋白的pdb文…

mysql-面试50题-2

一、查询数据 学生表 Student create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values(01 , 赵雷 , 1990-01-01 , 男); insert into Student values(02 , 钱电 , 1990-12-21 , 男); insert into Student v…

hadoop集群搭建

hadoop有三种部署方式 1、Local (Standalone) Mode&#xff08;单机模式&#xff09; 数据存储在本地 2、Pseudo-Distributed Mode&#xff08;伪集群模式&#xff09; 数据存储在HDFS 3、Fully-Distributed Mode&#xff08;集群模式&#xff09; 集群部署&#xff0c;数据存储…

网络扫描与网络监听

前言&#xff1a;前文给大家介绍了网络安全相关方面的基础知识体系&#xff0c;以及什么是黑客&#xff0c;本篇文章笔者就给大家带来“黑客攻击五部曲”中的网络扫描和网络监听 目录 黑客攻击五部曲 网络扫描 按扫描策略分类 按照扫描方式分类 被动式策略 系统用户扫描 …

Matter.js 插件:matter-wrap(世界是圆的)

本文简介 点赞 关注 收藏 学会了 记得以前看爆笑校园里有一集讲到&#xff0c;一个人对着前面开了一枪&#xff0c;过了一阵子弹打中他自己的后脑勺。作者想通过这个冷笑话告诉大家一件事&#xff1a;地球是圆的。 在 Matter.js 世界里&#xff0c;默认是没有边界的&#…

MSQL系列(八) Mysql实战-SQL存储引擎

Mysql实战-SQL存储引擎 前面我们讲解了索引的存储结构&#xff0c;BTree的索引结构&#xff0c;我们一般都知道Mysql的存储引擎有两种&#xff0c;MyISAM和InnoDB,今天我们来详细讲解下Mysql的存储引擎 文章目录 Mysql实战-SQL存储引擎1.存储引擎2.MyISAM的特点3. InnoDB的特…

11 结构型模式- 代理模式

结构性模式一共包括七种&#xff1a; 代理模式、桥接模式、装饰者模式、适配器模式、门面(外观)模式、组合模式、和享元模式。 1 代理模式介绍 软件开发中的代理&#xff1a; 代理模式中引入了一个新的代理对象,代理对象在客户端对象和目标对象之间起到了中介的作用,它去掉客…

Linux系列讲解 —— VIM配置与美化

目录 1. Vim基本配置2. 插件管理器Vundle2.1 下载Vundle2.2 在vimrc中添加Vundle的配置 3. Vundle的使用3.1 安装常用插件3.1.1 NERDTree 3.2 卸载插件 1. Vim基本配置 1.1 配置文件 vim的配置文件有两处&#xff0c;请根据实际情况选择修改哪个。 (1) 全局配置文件&#xff…

RT-Thread 7. RT-Thread Studio ENV修改MCU型号

1. 修改MCU型号 2.在ENV界面输入 scons -c scons --dist3. dist下为更新后完整源代码 4.导入RT-Thread Studio 发现GD32F330已经生效了。 5. 自己编写startup_gd32f3x0.S&#xff0c;准确性待验证 ;/* ; * Copyright (c) 2006-2021, RT-Thread Development Team ; * ; * SPD…