欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

异常类的了解、异常的处理方案、编译时期异常和运行时期异常区别、throws和throw的区别、自定义异常类 、捕获异常的标准格式、final、finally、finalize的区别

程序员文章站 2022-07-14 10:28:32
...

异常

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 ...... 变量名){ 平级关系
	  	 处理异常
	  }
	   	
 

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

编译时期异常和运行时期的区别?
  
  	编译时期的异常:
  		举例:
  	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将异常信息输出
  控制台上...

throws和throw的区别

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

自定义的异常

import java.util.Scanner;
/*
 * 自定义的异常!
 * 	1)自定义一个类,继承自Exception或者RuntimeException
 * 	2)提供无参构造方法 /有参构造 传递String参数(消息字符串)
 * 
 * */
public class Test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in) ;
		System.out.println("请您输入学生成绩:");
		int score = sc.nextInt() ;
		//创建Teacher对象
		Teacher t = new Teacher() ;
		t.check(score);
	}
}
public class Teacher {
	//成员方法
	public void check(int score) {
		//进行判断
		if(score<0 || score>100) {
			//一定会出现异常
			throw new MyException("当前数据非法数据!") ;
		}else {
			System.out.println("当前为合法数据!");
		}
	}
}
//自定义异常类
public class MyException extends RuntimeException {
	//无参构造方法
	public MyException() {}
	//有参构造方法
	public MyException(String message) {
		super(message) ;
	}
}

异常的注意事项

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

捕获的标准格式

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

final,finally,finalize的区别?

final: 修饰符,表示最终的
    final修饰的变量,是一个常量
    final修饰的方法不能被重写
    final修饰的类不能被继承
finally: 异常的标准格式
    try..catch...catch..finally
    finally中的语句一定会执行,除非JVM推出了
finalize: 与GC有关,Object类中的方法
    当前开启垃圾回收器的时候,调用finalize()方法回收没有更多引用的对象