Java学习-异常

Java学习笔记:异常处理 Java学习笔记:异常处理 ! 阅读详情

一、概述

1.异常概念:在程序运行时,发生的不被期望的事件,阻止了程序按照程序员的预期正常执行;
2.异常处理(exception handing):
1)向用户报告错误信息;
2)保存所有的工作结果;
3)允许用户以妥善的形式退出程序;
3.异常结构:
Java中Throwable类异常类型的顶层父类,然后Throwable又派生出Error类和Exception类;
在这里插入图片描述
3.1根据Java异常产生原因区分:
1) Error:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现,因此程序员应该关注Exception为父类的分支下的各种异常类。
2) Exception:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件,可以被Java异常处理机制使用,是异常处理的核心。

3.2根据JavaC(编译器)对异常处理要求区分:
Unchecked Exception(非检查异常):Error 和 RuntimeException 以及他们的子类。Javac在编译时,不会提示和发现这样的异常,不强制要求在程序处理这些异常,这样的异常发生原因多半是代码写的有问题。

Checked Exception(受检查异常):除了Error 和 RuntimeException之外的其它异常。Javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally直接处理 或 throws向上抛出)。这样的异常原因是程序无法选择运行环境或控制用户如何操作,需要对可能产生的异常进行预处理。

二、异常产生过程
1.非检查异常-示例:

public class show {
	public static void main(String[] args) {
		
		System.out.println(multiply());
	}
	
	public static int obj(String str) {
		return str.length();
	}
	
	public static int multiply() {
		String s = null;
		int len = obj(s);
		return len;
	}
}
console结果:
Exception in thread "main" java.lang.NullPointerException
	at testexception.show.obj(show.java:10)
	at testexception.show.multiply(show.java:15)
	at testexception.show.main(show.java:6)

分析:当obj函数遇到空指针异常时,此时obj函数无法处理此异常,把异常提交给其caller即multiply函数,multiply也无法处理,又提交给其caller即main函数,main也无法处理,最终提交给JVM进入终止模式termination model (程序在异常抛出点停止执行,并输出异常信息);

2.受检查异常-示例:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class show {
	public static void main(String[] args) throws IOException {
		File file = new File("hello.txt");//此处的hello.txt实际不存在的;
		FileInputStream fis = new FileInputStream(file);
		byte[] b = "hello".getBytes();
		
		fis.read(b);
		
		fis.close();
	}
}
console结果:
Exception in thread "main" java.io.FileNotFoundException: hello.txt (系统找不到指定的文件。)
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(Unknown Source)
	at java.io.FileInputStream.<init>(Unknown Source)
	at testexception.show.main(show.java:11)

分析:此处的hello.txt实际不存在的,会抛出FileNotFoundException,所以也是不能开启流进行写入和关闭,会抛出IOException异常,FileNotFoundException是IOException的子类,所以main函数只需要抛出IOException异常即可,main抛出异常后无法处理依然只能提交给JVM执行终止模式;

三、异常处理机制

1.try…catch或try…catch…finally

1.1 简单示例:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class show {
	public static void main(String[] args){
		File file = new File("hello.txt");
		
		try {
			System.out.println("今日阳光明媚,程序跑的哇哇的!");
			FileInputStream fis = new FileInputStream(file);
			System.out.println("测试出错了这里还能跑不!");
			byte[] b = "hello".getBytes();
			fis.read(b);
			fis.close();
		} catch (IOException e) {
			System.out.println("大事不好了catch到异常了!先让我把数据保存一下!");
		}finally {
			System.out.println("烂摊子我finally来收尾!");
		}
		
		System.out.println("上面折腾完了继续运行!");
	}
}
	console结果:
	今日阳光明媚,程序跑的哇哇的!
	大事不好了catch到异常了!先让我把数据保存一下!
	烂摊子我finally来收尾!
	上面折腾完了继续运行!

分析:当想要开启输入流时发生异常,这条语句的后面的语句不会再执行,执行流跳转到最近的匹配的异常处理catch块去执行,异常被处理完后,执行流会接着在<处理了这个异常的catch块>后面接着执行,先执行finally块,再往下继续执行;

1.2 语法详解:

try{
     //try块中放可能发生异常的代码。
     //如果执行完try没有发生异常,忽略catch块,若存在finally块则接着去执行finally块。
     //如果执行完try发生异常,则尝试去匹配catch块。

}catch(异常类型 异常参数){
 ...
 
}catch(xxxException e){
    //每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。
    //在catch块中可以使用这个块的异常参数来获取异常的相关信息,异常参数是这个catch块中的局部变量,其它块不能访问。
    //Java7中可以将多个异常声明在一个catch中。
    
}finally{
  //finally块不是用来处理异常的,也不会捕获异常,主要做一些清理工作如流的关闭,数据库连接的关闭等。 
  //无论异常是否发生,异常是否匹配被处理,finally都会执行;只有一种方法让finally块不执行:System.exit()。

}

1.3 注意:

  • 一个try至少要有一个catch块,否则, 至少要有1个finally块;
  • try块中的局部变量和catch块中的局部变量(包括异常变量),以及finally中的局部变量,他们之间不可共享使用。
    在try…catch…finally语句块内部定义的变量,作用域在语句块内部,外部不可见。在try…catch…finally语句块外部定义的变量,在语句块内部可以对变量进行修改
  • 如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally,然后到这个函数的外部caller中去匹配异常处理器。
  • 如果方法中try,catch,finally中没有return返回语句,则会调用这三个语句块之外的return结果。
  • finally中最好不要包含return,否则会覆盖try或catch中保存的返回值,也会覆盖try中异常或catch到的异常。
  • finally中最好不要抛出异常,否则会覆盖try中异常或catch到的异常;
  • 异常匹配是按照catch块的顺序从上往下寻找的,只有第一个匹配的catch会得到执行。匹配时,不仅运行精确匹配,也支持父类匹配,因此,如果同一个try块下的多个catch异常类型有父子关系,应该将子类异常catch块放在前面,父类异常catch块放在后面,这样保证每个catch块都有存在的意义;

2.throw和throws

2.1 简单示例

//throw写在函数中,throw 异常对象
public class show {
	public static void main(String[] args) {
		try {
			int i = 0;
			if(i == 0) 
				throw new NumberException("i = 0");
		}catch(NumberException num){
			num.printStackTrace();
		}
	}
}

//throws写方法函数头,可以抛出多条异常,每个类型的异常中间用逗号隔开
public class show {
	public static void main(String[] args) throws FileNotFoundException,IOException {
		File file = new File("hello.txt");
		FileInputStream fis = new FileInputStream(file);
		
		byte[] b = "hello".getBytes();
		fis.read(b);
		fis.close();
	}
}

四、栈轨迹(StackTrace)

1.概念图:
栈轨迹( stack trace ) :是一个方法调用过程的列表, 它包含了程序执行过程中方法调用的特定位置;
异常抛出点:调用序列中的最后一个调用方法,是异常对象Throwable创建和抛出之处;
在这里插入图片描述
2.简单示例:

public class demo {

	public static void main(String[] args) {
		a();
		b();
	}
	public static void a() {
		try {
			throw new Exception();
		} catch (Exception e) {
			for (StackTraceElement ste : e.getStackTrace()) {
				System.out.println(ste.getMethodName());
			}
			for (StackTraceElement ste : e.getStackTrace()) {
				System.out.println(ste);
			}
			e.printStackTrace();
		}
	}
	
	public static void b() {
		a();
	}

}
	console结果:
	java.lang.Exception
		at testexception.demo.a(demo.java:11)
		at testexception.demo.main(demo.java:6)
	java.lang.Exception
		at testexception.demo.a(demo.java:11)
		at testexception.demo.b(demo.java:24)
		at testexception.demo.main(demo.java:7)
	a
	main
	testexception.demo.a(demo.java:11)
	testexception.demo.main(demo.java:6)
	a
	b
	main
	testexceptione.demo.a(demo.java:11)
	testexception.demo.b(demo.java:24)
	testexception.demo.main(demo.java:7)

分析:
2.1 printStackTrace()方法
printStackTrace()是Throwable 类的方法,异常处理中用来打印栈轨迹的文本描述信息;

2.2 getStackTrace()方法
getStackTrace()也是Throwable 类的方法, 返回的是StackTraceElement对象(StackTraceElement 类含有能够获得文件名、当前执行的代码行号、类名和方法名的方法)的一个数组,数组内存放的栈轨迹元素,索引0(数组第一个元素)是栈顶(抛出点),索引末尾(数组的最后一个元素)是栈底(调用序列中的第一个方法调用);

3.重抛异常
重抛异常:将异常再次抛给上一级异常处理程序,同一个try块的后续catch块将会被忽略;
3.1 示例:

public class demo {

	public static void main(String[] args) {
		b();
	}
	public static void a() throws Exception {
		try {
			throw new Exception();//java:10
		} catch (Exception e) {
			e.printStackTrace();
			throw e;//java:13
		}
	}
	
	public static void b() {
		try {
			a();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
	console结果:
	java.lang.Exception
		at testexception.demo.a(demo.java:10)
		at testexception.demo.b(demo.java:20)
		at testexception.demo.main(demo.java:6)
	java.lang.Exception
		at testexception.demo.a(demo.java:10)
		at testexception.demo.b(demo.java:20)
		at testexception.demo.main(demo.java:6)

分析:两次printStackTrace()输出结果是一样的,第一次异常抛出点在(java:10),重抛异常后输出的仍是第一次异常抛出点的栈轨迹,如果想将第二次异常抛出点(java:13)的栈轨迹也表示出来,需要用到fillInStackTrace()方法;

3.2 fillInStackTrace()方法
原理:在当前线程下将最新抛出的异常对象的栈轨迹信息保存下来,重新返回一个Throwable异常对象,这样再printStackTrace()就会输出最新的栈轨迹信息,printStackTrace()方法是给它什么异常对象就输出此对象的异常信息;
使用:将throw e;改成throw (Exception)e.fillInStackTrace();等同于Throwable fst = e.fillInStackTrace(); throw (Exception)fst;

public class demo {
	public static void main(String[] args) {
		b();
	}
	public static void a() throws Exception {
		try {
			throw new Exception();
		} catch (Exception e) {
			e.printStackTrace();
			Throwable fst = e.fillInStackTrace();
			throw (Exception)fst;//注意强制转换
		}
	}
	public static void b() {
		try {
			a();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
	console结果:
	java.lang.Exception
		at testexception.demo.a(demo.java:10)
		at testexception.demo.b(demo.java:19)
		at testexception.demo.main(demo.java:6)
	java.lang.Exception
		at testexception.demo.a(demo.java:13)
		at testexception.demo.b(demo.java:19)
		at testexception.demo.main(demo.java:6)

五、异常链

异常链:在捕获一个异常后,抛出另一个异常,此时将原始异常信息通过Throwable类型的对象作为cause参数传递给新的异常,而Throwable子类构造器支持cause作为参数传入,这样可以形成异常链(类似链表结构,每个异常既存有上一个异常对象信息,也携带自己的异常对象信息),即使当前位置创建并抛出新的异常,也能通过异常链追踪到异常发生的最初位置;

示例:

public class demo {
	public static void main(String[] args) {
		b();
	}
	
	public static void a() throws Exception {
		try {
			throw new IOException("IO");
		} catch (IOException e) {
			e.printStackTrace();
			Exception ex = new Exception("EX",e);
			throw ex;
		}
	}
	
	public static void b() {
		try {
			a();
		} catch (Exception e) {
			e.printStackTrace();
			e.getCause();
		}
	}
}
	console结果:
	java.io.IOException: IO
		at testexception.demo.a(demo.java:12)
		at testexception.demo.b(demo.java:22)
		at testexception.demo.main(demo.java:7)
	java.lang.Exception: EX
		at testexception.demo.a(demo.java:15)
		at testexception.demo.b(demo.java:22)
		at testexception.demo.main(demo.java:7)
	Caused by: java.io.IOException: IO
		at testexception.demo.a(demo.java:12)
		... 2 more

分析:
注意:
1)getCause()方法用来获取原始异常信息;
2)Throwable子类中只有Erro、Exception和RuntimeException这3个类提供了带cause参数的构造函数,如果要把其他类型的异常 链接起来,使用initCause()方法;

六、自定义异常

在Java 中自定义异常需要注意以下几点:

  • 所有异常都必须是 Throwable 的子类;
  • 如果想写一个受检查异常类,则继承 Exception类;
  • 如果想写一个运行时异常类,则继承 RuntimeException类;
  • 一般尽量将构造函数都写全,参考下例;
    示例:
public class IOException extends Exception
{
    static final long serialVersionUID = 7818375828146090155L;

    public IOException()
    {
        super();
    }

    public IOException(String message)
    {
        super(message);
    }

    public IOException(String message, Throwable cause)
    {
        super(message, cause);
    }

    public IOException(Throwable cause)
    {
        super(cause);
    }
}

七、异常机制使用技巧
7.1 异常处理不能代替简单的测试
与执行简单的测试相比, 捕获异常所花费的时间大大超过了前者, 因此使用异常的基本规则是:只在异常情况下使用异常机制。

简单测试语句:if (!s.empty()) s.popO;

异常处理:
try{
s.popO;
}catch (EmptyStackException e){
}

7.2 不要过分地细化异常
新手容易将每一条语句都分装在一个独立的 try语句块中,导致易读性变差,代码量增多。因此有必要将整个任务包装在一个 try语句块中,这样当任何一个操作出现问题时, 整个任务都可以取消。

一句一异常写法:
Stack s;
for (i = 0;i < 100; i++){
	try{
	n = s.popO;
	}catch (EmptyStackException e){
	//stack was empty
	}
	
	try{
	out.writelnt(n);
	}catch (IOException e){
	//problem writing to file
	}
}
改进后:
try{
	for (i = 0; i < 100; i++){
	n = s.popO ;
	out.writelnt(n);
	}
}catch (IOException e){
// problem writing to file
}
catch (EmptyStackException e){
//stack was empty
}

7.3 利用异常层次结构
不要只抛出 RuntimeException 异常,应该寻找更加适当的子类或创建自己的异常类。
不要只捕获 Throwable 异常, 否则会使程序代码更难读、 更难维护。

深入解析MTK DRM初始化流程:从KMS模块到组件框架 本文深入解析了联发科(MTK)平台上DRM显示框架的初始化流程。从内核模块加载、Component框架管理依赖,到核心的mtk_drm_bind函数构建KMS对象(CRTC、Plane、Encoder、Connector),最终完成DRM设备注册并创建用户空间接口。文章结合调试经验,为开发者梳理了从驱动启动到屏幕点亮的完整路径与关键排查点。 阅读详情

相关推荐

双硬盘下Ubuntu 16.04与Win10双系统的安装

之前写过一个双系统安装过程,今天再次整理的原因是想重点强调双硬盘的区别。标红的一定要注意看,那就是我自己一步一步踏出来的坑啊...   基础步骤就不再重复,重点讲区别,需要看详细步骤的童鞋(或者你只有一个硬盘)请看我上一篇博客https://blog.csdn.net/weixin_40308540/article/details/80157444   区别:双硬盘和单硬盘的区别是什么呢?...

不吃包子 1122

java通过异常堆栈查找发生异常的直接原因(使用e.getCause())

java通过异常堆栈查找发生异常的直接原因(使用e.getCause())

liaomingwu的专栏 2844

华为海思IC设计岗位笔试全解析:物理、电路与工艺三大方向备考指南

本文全面解析华为海思IC设计岗位笔试的物理、电路与工艺三大方向备考要点。针对物理设计方向,重点讲解半导体能带理论、载流子输运机制等核心考点;电路设计方向涵盖Verilog语法、UVM验证等关键技术;工艺方向则深入探讨FinFET工艺、光刻技术等前沿知识。提供高效备考策略和应试技巧,助力考生提升通过率。

weixin_29196613的博客 1084

getCause()、e.getMessage()产生的结果

(1)e.getMessage()  e.getMessage(); 只会获得具体的异常名称. 比如说NullPoint 空指针,就告诉你说是空指针...  (2)e.getCause() (3)e.getCause().getMessage(); 这样的话就会获取到错误原因        ...

qq_36826506的博客 1万+

LIGGGHTS颗粒模拟入门:从DEM原理到工程实践

离散元法(DEM)是一种用于模拟颗粒物质行为的数值方法,其核心原理是通过计算每个颗粒的运动和相互作用来预测颗粒系统的宏观行为。该方法基于牛顿第二定律和接触力学模型,能够精确描述颗粒间的碰撞、摩擦和粘结等微观机制。在工程实践中,DEM技术为优化工业设备设计、预测材料流动和减少实验成本提供了重要价值。它广泛应用于制药造粒、矿石破碎、粉体输送和农业加工等领域,帮助工程师和研究人员深入理解颗粒系统的复杂动力学。LIGGGHTS作为一款基于LAMMPS的开源DEM软件,继承了其高效的并行计算架构,并针对颗粒模拟进行了

weixin_33979203的博客 417

计算机视觉——SIFT特征匹配

文章目录一、SIFT特征检测原理1.1基本思想1.2二、SIFT特征检测图片兴趣点三、SIFT特征检测描述子匹配四、输入图片检测与之 一、SIFT特征检测原理 1.1基本思想 1.2 二、SIFT特征检测图片兴趣点 代码: 检测结果: 三、SIFT特征检测描述子匹配 四、输入图片检测与之 ...

weixin_43869874的博客 3855

方法套用try catch以及e.getCause().getMesage()与e.getMessage()使用异常的处理

在项目中难免会遇到多个方法套用try catch的情况。今天主要针对该情况,用一个简单的小demo来区别该情况。 1.方法都使用e.printStackTrace()来输出错误堆栈信息。会在最先的catch到异常并且抛出,套在外面的try catch不会catch异常。 demo: public class DemoController { private static final ...

answer94的博客 4947

从零搭建企业级AI网关:基于LiteLLM的安全防护体系设计

本文详细介绍了如何从零搭建企业级AI网关,基于LiteLLM构建全面的安全防护体系。内容涵盖分层防御架构、敏感数据处理、合规性配置与审计追踪,以及生产环境部署策略,助力企业安全高效地集成LLM技术,确保数据安全和合规性。

qq_27496129的博客 1291

java获取异常信息

java如何采用反射机制来调用方法, 若要获取异常信息   try{ Method m = ...; m.invoke(...);//反射调用方法 }catch(Exception e){ System.out.println(e.getMessage);//获取不到异常信息 }  这样是不行的。   应该这样:     try{ Method ...

yang 1374

LPDDR5 学习笔记05:WCK操作详解

LPDDR5 SDRAM采用双时钟设计,写时钟(WCK)频率为命令时钟(CK)的2倍或4倍,需要通过WCK2CK同步机制解决时钟域对齐问题。该同步操作由带特殊标志位的CAS命令触发,控制器需提供半频WCK脉冲进行状态校准。同步完成后才能执行读写操作,且支持多存储体组同步和WCK常开模式以优化性能。掉电后必须重新执行同步流程,确保时钟域正确对齐。该机制有效解决了高速内存接口的时序挑战,为LPDDR5性能提升提供关键技术支撑。

一只豌豆象的博客 2003

Python + Playwright:集成 Applitools 进行视觉回归测试(快速入门)

Applitools是一款基于人工智能的视觉验证测试工具,专门用于自动化和验证应用程序的用户界面(UI);Applitools使用视觉回归测试来检测应用程序界面的变化,确保 UI 在不同版本之间的一致性;Applitools的核心功能是通过视觉比较,检测 UI 元素的差异,而无需手动编写复杂的界面检查代码;通过集成Applitools,测试人员可以轻松捕捉和验证界面中的视觉差异,无论是在Web移动端或桌面应用的测试环境;

blues_C的博客 2920

java语言中异常处理的getCause()方法

今天在公司源码里看到这样一段语句 // 调用函数         Integer rc;         Object[] args = new Object[] { request, inputNode, outputNode };                 try {             rc = (Integer) method.invoke(this, args);       ...

u012501054的博客 1万+

用 Docker 一键部署 SillyTavern酒馆 mac/windows/linux通用教程,我再也不手动折腾了!

本文介绍了如何使用 Docker 一键部署 SillyTavern 项目,适用于 Mac、Windows 和 Linux 系统。SillyTavern 是一个本地部署的大语言模型聊天界面,支持多种插件和扩展。文章详细说明了安装 Docker、拉取项目、启动容器、配置白名单、启用插件等步骤,并提供了常见问题的解决方法。通过 Docker 部署,用户可以避免繁琐的手动配置,快速搭建和运行 SillyTavern,适合希望简化部署流程的用户。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2620

java异常的思考与学习心得

最近几日在学习java中的异常处理,颇费心思,自己也终于从一片迷云中走了出来,恰好看到前几天论坛里有一位bei7318的朋友曾经发帖问道:“什么抛出啊,引发啊?谁能说说异常的心得?” 却无人回应,刚好趁着周末,在这里好好总结一下学习异常的思路与心得,希望能帮到那些对异常感到困惑的朋友。 我开始学习异常时,就像我在http://topic.csdn.net/u/20111108/12/0

open4u的专栏 771

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java异常机制学习

异常的体系结构 Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception。 异常类Exception又分为运行时异常(RuntimeException)和非运行时异常,也可以叫不受检查异常(Unchecked Exception)和检查异常(C...

小打小闹~各位看官随意 280

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

关于Java中异常的学习

Exception代表我们程序中容易出现的问题,程序员通常会用Exception以及他的孩子来封装程序中出现的问题。与此同时,我们的主函数中还可以添加try,catch结构用于监视代码,观察用户在操作的过程中是否出现异常,其中第十五行代码用于运行时打印异常信息。我们注意到第25行代码中的parse出现了红色提示,此时就是出现了编译式异常,其目的就是提醒程序员这里的程序很容易出错,请注意!以下是自定义运行式异常的书写格式和使用方法,与自定义编译式异常类似。以下是自定义编译式异常的书写格式和使用方法。

ciiidee的博客 546

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java学习笔记-异常

异常就是代表程序出现的问题。上面代码,出现数组索引越界异常。代表的系统级别错误(属于严重问题)。系统一旦出现问题,sun公司会把这些错误封装成Error对象,Error是给sun公司自己用的,不是给程序员用的。叫做异常,代表程序可能出现的问题,通常会用Exception以及他的子类来封装程序出现的问题。**运行时异常: ** RuntimeException及其子类,编译阶段不会出现异常提醒,运行时出现的异常,如:数组索引越界异常编译阶段就会出现异常提醒的。

qq_45773654的博客 775

Java学习-异常-反射

在大型项目中可以定义一个根异常,从runtimeexception 派生;自定义异常时,应该提供多种构造方法。!!!!

m0_52533650的博客 1018

Java学习笔记——异常处理

这里就很自由了,就算考试中有些异常记不住也可以通过自定义躲过一劫(当然了这种机会怕是不多)常见步骤大致如下:(1)常见自定义异常类(2)在方法中通过throw关键字抛出异常对象(3)如果在当前异常的方法中处理异常,可以使用try…catch语句块进行捕获和处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。(4)在出现异常的方法的调用者中捕获并处理异常。

2301_79907302的博客 620

JAVA-异常学习

JAVA异常捕获学习

m0_56147097的博客 934

Java学习之异常(图示)

weixin_45073487的博客 193

java异常学习

实际开发中也会出现很多异常,这些异常很可能在JDK中没有定义过,例如年龄负数问题,考试成绩负数问题.那么能不能自己定义异常呢?在开发中根据自己业务的异常情况来定义异常类.自定义一个业务逻辑异常:。一个登陆异常类。自定义一个编译期异常: 自定义类 并继承于。自定义一个运行时期的异常类:自定义类 并继承于。还要重写前两个构造方法要求:我们模拟登陆操作,如果用户名已存在,则抛出异常并提示:亲,该用户名已经被注册。// 业务逻辑异常/*** 空参构造*//**

2402_87235067的博客 748

Java异常学习

系列博客   从学java异常        

zy19982004的专栏 135

Java中异常的学习

在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等。异常:程序在。

zyb1147582433的博客 1003

Java异常处理学习

今天才开通了博客园的博客,希望可以记录自己学习的点点滴滴。最近去处理了一些私人事情,有点烦人,希望自己不要被这些破事所影响。 最近在看马士兵老师的Java基础的视频,(中断了一周)发现本科时候的胡老师讲的课和马老师好像啊,我在想胡老师是不是马老师的“信徒”呢?极有可能啊,他上课的ppt感觉就是截图的马士兵老师的ppt。我在想我们的胡老师这么厉害都是拜马士兵老师所赐,所以嘛,加油! 先把马士兵老...

weixin_33701617的博客 157

Java异常学习总结

Java异常学习总结 文章目录Java异常学习总结一、Java异常1.什么是异常2.Error和Exception3.可查异常和不可查异常4.运行时异常和非运行时异常二、异常处理机制1.抛出异常1.throws2.throw2.捕获异常1.try-catch2.try-catch-finally3.异常链三.自定义异常 一、Java异常 1.什么是异常 Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提

偶滴博客 609
上一篇: Java学习-数据操作高级篇
下一篇: Java学习-Eclipse的使用
Jagger_Lin
博客等级 码龄8年 17粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值