【Java面向对象】java学习之旅19-异常

Educoder/头歌JAVA——JAVA面向对象:JAVA中的异常 相信大家在学习 Java 的过程中或多或少都遇到了很多错误,这些错误一般都是以Exception结尾的,这些都是 Java 异常类的衍生类,我们会好奇 Java 中的异常到底是怎么工作的,又是如何起作用的,如何在我们程序出错的时候提醒我们的?其中的原理又是什么呢? 本次实训我们就来系统的学习 Java 中非常重要的模块 —— Java 异常。 阅读详情

定义:

程序在运行过程中遇见的不正常的情况

相关的概念:

java针对程序运行时出现的异常都包装成了异常类,便于程序员调试,也便于编程中统一处理异常

分类:

  1. 编译时异常、检查时异常、非运行时异常:必须在编程时进行处理,否则无法通过编译,在java文件编译成.calss文件时出现的异常。例:
  • IOException
  • FileNotFoundException
  • ClassNotFoundException
  1. 运行时异常、非检查性异常、非编译时异常:不必处理,在程序运行时由于虚拟机操作出现的异常,例:
  • ArithmeticException
  • ArrayIndexOutOfBoundsException
  • ClassCastException

异常的体系分支:

                      			Throwable
                      			  __|__
                      			 |     |
                      		   Error Exception
                      				 __|__
                      				|     |
                      		编译时异常	RuntimeException
                      						|
                      					运行时异常

Error和Exception的区别:

  1. Error的父类是java.lang.Error,Exception的父类是java.lang.Exception
  2. 错误一般情况下是jvm出现了不正常的情况,会导致程序崩溃,错误无法处理

异常的处理:

  1. 关键字:try catch finally throw throws
  2. 处理方式:
  • 通过逻辑判断规避异常,需要程序员编写大量的代码去补漏洞,容易遗漏、导致代码很繁杂。
  • 使用try…catch…finally…代码块处理异常:try:尝试执行可能有异常的代码、catch:用于捕获可能发生的异常,可以有多个、finally:无论是否发生异常,都会执行。会在return之前执行。遇到System.exit(0);不会执行。
  • 注意:1、多个catch捕获的异常,必须从小到大。2、建议try代码块中的代码尽可能少,尽可能小的影响代码的执行效率,也便于定位异常。3、try必须有,catch和finally二选其一。都可以构成代码块。
  1. 使用throws声明异常:在可能出现异常的方法上声明可能出现的异常类。这个方法的调用者需要做统一处理。
	private static void test1() {
		 int i = 1 / 0; // ArithmeticException
		
		 int[] array = new int[2];
		 array[2] = 1;
		
		File file = new File("d://test.txt");
		try {
			FileInputStream fis = new FileInputStream(file);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}		
	}

通过try…catch…处理异常但是过程过于繁琐

private static void test2() {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入被除数:");
		try {
		
			int a = input.nextInt();
			
			System.out.println("请输入除数:");
			int b = input.nextInt();
			
			// 1.通过逻辑判断规避异常
	//		if (b == 0) {
	//			System.out.println("除数不能为0");
	//			return; // 结束当前方法
	//		}
			
			
			System.out.println(a / b);
		} catch(ArithmeticException e) {
			System.out.println("除数不能为0");
			// return;
			// System.exit(0);
		} catch(InputMismatchException e) {
			System.out.println("必须输入整数");
		} catch(Exception e) {
			System.out.println("其他异常");
		} finally {
			System.out.println("finally");
		}
		
		System.out.println("end");		
	}

通过throws声明异常,进行统一处理:

private static void test3() throws ArithmeticException, InputMismatchException {
		int a = 0;
		int b = 0;

		Scanner input = new Scanner(System.in);
		System.out.println("请输入被除数:");

		a = input.nextInt();

		System.out.println("请输入除数:");

		b = input.nextInt();

		System.out.println(a / b);

		System.out.println("end");

		input.close();
	}
public static void main(String[] args) {
		
		try {
			test3();
		} catch (ArithmeticException e) {
			System.out.println("除数不能为0");
		} catch (InputMismatchException e) {
			System.out.println("请输入整数");
		}
		
		
	}

自定义异常的使用:

public class AgeOutOfRangeException extends Exception {

	private static final long serialVersionUID = 1L;

	public AgeOutOfRangeException() {
		super();
	}

	public AgeOutOfRangeException(int age) {
		super(age + "不在0~200之间");
	}
	
}
public class NameIsHWZException extends RuntimeException {

	private static final long serialVersionUID = 1L;

	public NameIsHWZException() {
		super("姓名不能是胡维柱");
	}
	
}
public class Student {
	
	private String name;
	private int age;
	
	public Student() {
		super();
	}
	/**
	 * 在需要抛出异常的地方new一个异常对象,然后在用throws把异常声明出来
	 */
	public Student(String name, int age) throws NameIsHWZException, AgeOutOfRangeException {
		super();
		
		if (name.equals("胡维柱")) {
			throw new NameIsHWZException();
		}
		
		this.name = name;
		
		if (age < 0 || age > 200) {
			throw new AgeOutOfRangeException(age);
		}
		
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
}

/**
 * 在实例中要去捕获这些异常
 */
	private static void test4() {
		Student stu = null;
		try {
			stu = new Student("胡维柱", 300);
		} catch (NameIsHWZException e) {
			e.printStackTrace();
		} catch (AgeOutOfRangeException e) {
			e.printStackTrace();
		}
		System.out.println(stu);
	}

程序员中可以看到的调试的方法:

			e.printStackTrace(); // 打印异常栈跟踪信息
			System.out.println(e.getMessage()); // 获取异常详细详细
java面向对象学习心得体会 java面向对象学习心得体会 类与对象 java中所有属性和方法都在类中,一个程序可以包含一个主类,和若干类 主类public class的名称只能与文件名相同。 java的类中包括属性和方法,一般由主类进行对象实例化,new一个对象的时候,系统统一开辟了一个堆内存存放属性数据,栈内存存放其堆内存的地址。给属性赋值就是与对象建立联系。 封装性 java中常使用private对类中属性进行封装,使用... 阅读详情

相关推荐

从NASA DataPort下载到PyTorch Dataset:手把手处理USGS光谱库的AVIRIS数据

本文详细介绍了如何从NASA DataPort下载USGS光谱库的AVIRIS高光谱数据,并将其转化为PyTorch Dataset对象。内容涵盖数据获取、预处理、辐射定标及高效数据加载技巧,特别针对AVIRIS数据的水吸收波段剔除和波段分组标准化进行了重点讲解,为环境监测、地质勘探等领域的研究者提供实用指南。

weixin_30607659的博客 281

Java学习之旅:从入门到进阶的系统总结

Spring MVC是Java EE中一个流行的框架,它基于Spring框架,提供了MVC设计模式的实现。Spring MVC通过注解和配置文件简化了Web开发,支持请求映射、数据绑定、视图解析等功能。Java是一门功能强大、应用广泛的编程语言,学习Java不仅可以掌握一门实用的编程技能,还可以深入了解面向对象编程、多线程编程、网络编程等重要概念。通过本文的系统总结,希望你对Java的学习有了更清晰的思路和方向。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 3647

105. replace( )函数

【目录】

weixin_63986098的博客 1万+

深入Java编程世界:我的学习之旅

学习Java是一个漫长而有趣的过程。在这个过程中,我们需要不断地学习、实践、思考和总结。只有这样,我们才能真正掌握Java的精髓并应用于实际的项目中。希望我的学习经历和经验能够对广大读者有所帮助和启示,让我们一起在Java编程的道路上不断前行!

2303_81296512的博客 1123

史上最全的Logisim运算器实验教程(基于华中科技大学计算机组成原理实验)

本博客是实现了Logisim的运算器设计,有具体的运算器设计的思路和运算器设计的电路,适合一步一步的按照思路做。

qq_62325622的博客 4万+

SQL注入:联合查询的三个绕过技巧

在SQL注入中,可以利用科学计数法来绕过对输入的限制。例如,可以使用科学计数法来绕过对字符串长度的限制,通过将字符串拆分成多个部分并使用科学计数法来表示。此外,还可以利用数据库的特定特性或语法来替代原始的查询语句,从而执行联合查询或其他恶意操作。另外,还可以尝试利用无列名注入的技巧,通过在原始查询中使用通配符或其他方式来绕过对列名的限制,从而执行恶意操作。

qq_68163788的博客 3792

java面向对象与异常

初识面向对象方法回顾和加深对象的创建和分析面向对象的三大特性抽象类和接口内部类和oop实战初识面向对象面向过程&面向对象: 类=属性+方法对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍需要面向过程的思路去处理面向对象编程(oop)面向对象编程本质:以类的方式组织代码,以对象的形式封装数据抽象三大特性:封装,继承,多态 方法回顾和加深 方法的定义:方法的调用:(静态方法和非静态方法)非静态方法直接通过类名调用(类名.方法)非静态方法要

qq_74146366的博客 1348

系统架构设计(以飞控系统、航电系统、机电管理系统、电子电气架构为例)

系统架构涉及对系统的结构和行为进行高层次的描述。它包括系统的组成部分、这些部分之间的关系、与外部环境的交互方式,以及满足特定功能和非功能性需求的方法。系统架构定义了系统的总体设计蓝图,指导系统的开发、集成、部署和维护。系统架构设计的目的是通过合理的结构和设计原则,确保系统能够高效、稳定、安全地运行,满足当前和未来的需求,同时具备良好的维护性、扩展性和可持续性。良好的系统架构不仅能够提高系统的开发效率和运行性能,还能降低长期的维护和运营成本,支持系统的持续演进和技术更新。

qq_41854911的博客 3051

Java面向对象异常学习

Java面向对象之异常 一、异常 1.1 异常概述 异常:就是程序出现了不正常的情况 1.2 异常体系 Error:严重问题,不需要处理 Exception:称为异常类,它表示程序本身可以处理的问题 RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码 非RuntimeException:编译期必须处理的,否则程序不能通过编译,就更不能正常运行了 public class ExceptionDemo { public static void main(Stri

hua226的博客 499

Python 复现AlexNet框架代码

【代码】Python 复现AlexNet框架代码。

Quintin 2418

vue3:html2canvas+jspdf将页面以A4导出为PDF文件,解决内容截断+在分页处截断问题详细排查和解决教程(jsPDF + html2canvas A4分页截断、内容分页时存在截断)

html2canvas + jsPDF 解决内容截断问题,vue3 jspdf-html2canvas生成多页pdf防截断处理(包含代码),vue3解决html2canvas + jsPDF导出pdf分页内容截断问题,jsPDF + html2canvas A4分页截断 完美解决方案(含代码 + 案例),html页面导出pdf截断问题,html2canvas 与 jspdf 相结合生成 pdf 内容被截断的终极解决方案,提供html2canvas+jsPDF将HTML页面以A4纸方式导出为PDF后,内容分页

✅ 精选推荐文章 2243

Java学习之旅第三季-1:异常处理机制之捕获异常

异常处理部分详细介绍了Java异常机制,包括Throwable类层次结构(Error和Exception的区别)、try-catch-finally语法使用,以及多异常捕获的两种实现方式:通过instanceof判断异常类型或使用多个catch块分别处理。文中通过除零异常和数组越界异常的具体案例,演示了异常捕获后程序继续执行的流程控制。

摸鱼的老谭 780

(14-3)值分布式算法:QR-DQN (Quantile Regression DQN)算法

QR-DQN(Quantile Regression DQN)是一种强化学习算法,它是深度 Q-网络(Deep Q-Network,DQN)的一个变种,旨在更好地处理值函数的不确定性。QR-DQN的实现步骤与传统的DQN类似,但在目标分布计算和损失函数方面有一些不同之处,这使得它能够更好地处理值函数的不确定性。QR-DQN(Quantile Regression DQN)算法的核心思想是将值函数表示为一个分布,而不是传统的单一值估计。在下面的内容中,将讲解一个使用QR-DQN算法的例子。

码农三叔 2052

Java面向对象—异常

Java面向对象

JavaMrs的博客 1232

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java面向对象 - Java中的异常

第1关:Java 中的异常处理机制 任务描述 本关任务:完成异常类选择题。 为了完成本关任务,你需要掌握: 1.什么是异常; 2.如何使用异常。 什么是异常 异常:程序在运行过程中产生的不正常情况。 程序在运行的时候,发生了一些不被预期的事件,从而没有按照我们编写的代码执行,这就是异常。 异常是Java中的错误,但是并不是所有的错误都是异常,比如说,你在定义变量名的时候没有依照Java的规则,在语句的结尾少了一个分号,那么运行出来结果是提示是错误 java.lang.Error; 不过如果你用System.

wangyongqi的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

26、Java面向对象——异常

一、异常 1、异常的含义 二、Throwable类 三、 Error类和Exceptio类 1、Error类 2、Exception类 3、RuntimeException类 4、异常体系 四、异常处理机制 1、Jvm的默认处理方案 2、使用try-catch处理异常 3、Throwable中的成员方法 4、使用try-catch-finally处理异常 5、使用throws声明异常 6、使用throw手动抛出异常 7、 自定义异常 五、常见异常类

优快云_Loveletter的博客 1568

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

JAVA头歌实训 Java面向对象-Java中的异常

异常是Java中的错误,但是并不是所有的错误都是异常,比如说,你在定义变量名的时候没有依照Java的规则,在语句的结尾少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;前面谈到的都是系统自带的异常,但是如果我们是在开发一个复杂项目,就经常会遇到系统自带的异常不能满足我们的需求的情况,所以这个时候就需要我们自己来定义异常了。通过第一关我们知道,有一部分异常是需要程序员提前处理的,这种异常统一称为检测性异常,如果我们不处理,程序是不能编译通过的,在IDE中也会出现一条红线。

banana_778的博客 4717

Java面向对象-异常

了解异常概念、理解Java异常处理机制、捕捉异常、抛出异常、了解Java异常体系结构。

FreedomLifepa的博客 1642

JAVA-面向对象之异常处理

面向对象之异常处理 ---云智科技学习笔记 异常 异常的体系 •    Throwable •    Error •    通常出现重大问题如:运行的类不存在或者内存溢出等。 •

yixuan_1的专栏 787

正式开始JAVA学习之旅

今天开始,博主正式开始学习java相关知识,期间也会发布与算法相关的题目和自己的感悟理解,通过博客记录学习生活,结交志同道合的朋友.今天我将会介绍java入门java起源java学习思路开发工具常用快捷键(基于IDEA)

m0_71685576的博客 1148

java面向对象程序设计学习感受

姓名:黄烨豪 学号:202302151810 第一章、初识java与面向对象程序设计 在初识 Java 面向对象章节的学习中,我仿佛打开了一扇通往编程新世界的大门,收获颇丰,感触良多。 Java 面向对象编程的理念让我对编程有了全新的认识。它将现实世界中的事物与程序中的概念紧密结合,把一切都看作是对象,每个对象都有自己的属性和行为4。这种思维方式非常直观和自然,使我能够更轻松地理解和描述复杂的问题。比如,在学习过程中,我可以把一个 “人” 看作一个对象,他的姓名、年龄等就是属性,而吃饭、走路等就是

huangyehao123的博客 861

【Java学习系列】Java面向对象之异常

Java面向对象之异常小知识

Tuerlechat,的博客 271

java必备——通过异常处理看面向对象

在看java视频的时候,看到异常处理的时候,我认识到自己编程上的一个缺憾,就是以前的错误处理他范范,我们应该针对不同的错误,做不同的处理,我拿出自己c#和vb的代码,看了看错误处理代码,发现,他们的格式很相似,想到面向对象和面向过程的对比,我想,咱们也许可以在这里,再挖掘一把!     在编写VB的时候,我作为一个小白,基本没有用过错误处理,心中的他是个很高大上的技术,而随着学习了c#,java

ESOO 2655

《JAVA面向对象学习总结》

主要讲解了计算机编程语言的发展史,机器语言→汇编语言→高级语言;Java是一门简单的、面向对象的优秀编程语言,它具有跨平台性、可移植性、安全性、健壮性、编译和解释性、高性能和动态性等特点,支持多线程、分布式计算与网络编程等高级特性。1.2面向对象程序设计思想分为两种,一种是面向过程程序设计,一种是面向对象程序设计;面向过程是程序设计的核心是分析出问题的解决步骤,“先干什么后干什么”,然后用函数把这些步骤一个一个实现,最后按照流程调用,而面向对象程序设计的思维方式是一种更符合人们思考习惯的思想。

weixin_59546835的博客 789

Java面向对象——异常

面向对象 异常

新长城 1366

Java之旅 面向对象

面向对象 面向对象VS面向过程 面向对象:问题由不同的部分组成 面向过程:问题由顺序步骤组成 面向对象编程的本质:以类的方式组织代码,以对象的组织(封装)数据。类:某一类对象都有的属性和方法;对象:个性 new实例化 类是个性抽象出的共性 三大特性:封装,继承,多态 Alt+Enter IDEA快捷创建对象 静态方法和类一起加载,非静态方法是类实例化(和对象一起)加载,这样做可能可以优化资源的使用,真正实例化后才占用内存。 值传递和引用传递

qqaazzhyh的博客 230
上一篇: 【Java面向对象】java学习之旅18-lambda表达式
下一篇: 【Mysql】mysql的主从复制,一主一从,以及分布式集群环境下多主多从环境配置
JeffHan^_^
博客等级 码龄7年 1万+粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值