异常类

本文深入探讨了Java中的异常处理,包括异常的分类、处理方式如try-catch-finally、throws关键字的使用,以及编译时期异常和运行时期异常的区别。还介绍了如何自定义异常,并分析了try-catch块中return语句与finally块的关系。同时,讨论了在处理异常时的注意事项和面试常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常

什么是异常
 		程序出现了问题,使用"异常"来描述问题
  
  java.lang.Throwable:异常类( Java 语言中所有错误或异常的超类(父类))
  
  			error:严重错误(严重问题)	
  				比如:内存异常!OOM(Out Of Memory) 
  				通过加入内存条...或者将Linux虚拟机的内存空间设置小一点!
  				
  			Exception: 可以捕获合理的程序!
  				编译时期异常:只要不是RuntimeException中的子类都是属于编译时期
  							必须要处理的,不处理编译通不了,没有办法运行的!
  				运行时期异常RuntimeException:
  							程序在执行过程中出现的问题
                            代码逻辑不够严谨导致的!

异常的处理方案

异常的处理方案有哪些:
  	
  	1)try...catch...finally:标准格式   捕获异常
  	2)throws:抛出异常 (抛出到方法上)
  
  方式1:捕获异常的变形格式
  		try...catch...
  		try...catch...catch...
  		try...finally...  (线程中:Lock锁)
  
  格式:流程
  		try{
  				...
  				...
  				可能出现问题代码
  		}catch(异常类名 变量名){//具体异常的类
  			//处理异常
  			//自己手动处理
  			//Throwable类中一些方:处理方式(jvm将异常信息输出在控制台并且可以跟踪异常类源码)
  		}


try中存在多个异常
            1)一个一个try...catch...
            2)一个try多个catch...
          try...catch...finally(标准格式)
          变形格式:
                try...catch...
                try...catch...catch...(推荐)
 
 
 JDK7以后:提供一种处理方式
	
	  try{
	 	可能出现问题的代码
	  	..
	  }catch(异常类名1 | 异常类名2 | 异常类名3 ...... 变量名){ //平级关系
	  	 //处理异常
	  }
	 
	 
 注意事项:
	
	 如果使用try...catch...catch...catch...
	 那么后面的catch语句中的异常类要么是同级关系要么是前面异常的类父类!

捕获的标准格式

捕获的标准格式
 		try{
  			//可能出现问题的代码
  		}catch(异常类名 对象名){
  		  对象名.printStackTrice() ;
  		}finally{
  			//释放相关系统资源close()
 			//举例:IO流中: createNewfile():创建文件的方法
 			//举例:JDBC:java 连接数据库  
 			//Connection: 连接对象---- 使用完毕需要关闭相关的系统资源!
 			//Statement:执行对象(增删查改的操作):---使用完了也需要释放系统资源
  		}
  
  try中代码如果不存在问题,代码正常执行,需要执行finally语句,释放系统资源!
  finally特点:
  			释放相关的系统资源,而且finally中的代码一定会执行的;除非在执行finally语句之前
  JVM退出了! System.exit(0) ;

编译时期异常和运行时期的区别

编译时期异常和运行时期的区别?
  
  		编译时期的异常:
  				举例:
  					String---Date---解析的方法parse(String source) throws ParseException{}
  			
  					IO流:IOException
  					...
  			开发者必须要进行显示处理,否则编译通过不了!
  			
  		运行时期异常:
  				1)代码逻辑的问题,不进行显示处理,在代码中加入一些逻辑判断
  				2)也可以进行显示处理:try...catch...

关于Throwable中的一些方法

关于Throwable中的一些方法
  
  public String getMessage():获取异常的消息字符串
  	
  public String toString():获取异常信息的简单描述
  	异常的全限定名称:包名.类名: 调用该异常对象的getMessage()详细的消息字符串
  
  public void printStackTrace():
  	将此对象的信息追踪到堆栈中,具体获取到具体源码中哪一块出问题了

针对异常处理的另一种方式:throws

针对异常处理的另一种方式:
  
  	throws:抛出异常
  		抛出在方法声明上,如果方法中的语句体出现了异常,将异常交给jvm,jvm将异常信息输出控制台上...

异常的注意事项

异常的注意事项:
  	1)子类继承父类的时候,对父类的成员方法进行重写,如果父类的成员方法有异常
  那么子类的该方法针对异常处理,要么是跟父类的异常类名一致,要么是父类异常类的子类
  	2)子类继承父类重写父类的方法的时候
  			父类的成员方法没有抛出异常,子类的该方法不能抛出异常,只能try...catch...

自定义的异常

自定义的异常!
  	1)自定义一个类,继承自Exception或者RuntimeException
  	2)提供无参构造方法 /有参构造 传递String参数(消息字符串)

面试题:throws和throw的区别

 面试题
  		throwsthrow的区别
  
  throws:抛出
  			1)书写位置是在方法声明上
  			2)throws的后面跟的异常类名,而且可以跟多个异常类名,中间使用逗号隔开
  			3)对于throws它是由调用者进行处理,必须要对带throws的方法进行处理!
  			4)throws表示抛出异常的一种可能性(这个方法可能出现问题/可能没有问题!)
  throw:抛出
  			1)书写位置是在方法体中
  			2)throw的后面跟的异常对象,一般都是匿名对象 new XXXException()
  				而且只能跟一个异常对象
  			3)由方法中逻辑判断进行处理(由方法体中语句进行处理)
  			4)throw:表示抛出异常一种肯定性(执行到逻辑的时候,一定会执行这个异常!)

面试题

面试题
  		如果捕获异常的时候,
  try...catch...finally,catch中如果有return语句,那么finally中的代码还会执行吗?return之前执行还是return之后执行
  		会执行,除非Jvm退出了不执行!
  return 之前
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值