栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-11-06

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-11-06

1.异常处理类的体系结构
 1.程序出现异常是正常现象【就像人会生病一样】
 2.Java中异常类Throwable[类]顶级异常类。
 3.Throwable[类]有两个子类:1.Error(错误) 2.Exception(异常)
 Error是java程序运行中不可预料的异常情况,这种异常发生以后,会直接导致JVM不可处理或者不可恢复的情况。所以这种异常不可能抓取到,比如OutOfMemoryError、NoClassDefFoundError等。
 Exception是java程序运行中可预料的异常情况,咱们可以获取到这种异常,并且对这种异常进行业务外的处理。
 Error与Exception的区别?
 Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
 Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
 4.Exception被分为运行时异常与非运行时异常
 运行时异常–非检查性异常 在代码编写使,可以忽略捕获操作(比如:ArrayIndexOutOfBoundsException),这种异常是在代码编写或者使用过程中通过规范可以避免发生的。
 非运行时异常–检查性异常 必须在编写代码时,使用try catch捕获(比如:IOException异常)。
运行时异常与非运行时异常的区别?
 运行时异常是指 RuntimeException 或者它的子类。不需要在方法签名声明抛出运行时异常,同样也不需要在方法体中捕获。
 非运行时异常是指 Exception 及它的子类中 非RuntimeException 的类,需要程序猿在方法签名声明抛出非运行时异常,交给方法的调用者处理(如果方法调用途中一直交给上层处理,最终会交给 JVM,导致程序终止运行);或者在该方法体中对非运行时异常进行捕获。
2.Java异常处理的原理
 1.异常可以自己处理掉
  通过try-catch代码块处理异常。
  将可能出现异常的java代码使用”try{异常可能发生的代码}catch(要抓捕的异常){异常处理方式}”块包裹,如果出现异常try{}就会捕获异常,终止代码的运行,将捕获的异常交给catch(){}去处理异常。
 try-catch代码块
格式:
try{
 异常可能发生的代码
 }catch(要抓捕的异常类型){
 异常处理方式
}
 1.try{}–捕获可能发生的异常
 2.catch(//要抓捕的异常){//异常处理方式}—抓获处理异常
  catch后面的“()”中一般要定义为具体异常类型的。
  具体异常类型不明确的时候可以使用Exception/Throwable
  catch的{}— 具体异常的处理过程。往往都是打印堆栈到控制台,查看具体情况,修改程序去避免
 3.一个try{}后面可以跟随多个catch(要抓捕的异常){异常处理方式},多个catch时要抓捕的异常类型需要按照有小到大的顺序排列。
 4.【finally{}】–出现在catch的“{}”后面,可以写也可以不写。
有无异常都要执行的动作。
当有一定需要执行的代码时写道finally中。
例如:

package com.wangxing.zyb;
public class Test {
	public static void main(String[] args) {
		try {
		int a=10;
		int b=2;
		int c=a/b;	
		System.out.println("c=="+c);
		}catch(ArithmeticException e){
			e.printStackTrace();
		}catch(Exception e){
			e.printStackTrace();
		}catch(Throwable e){
			e.printStackTrace();
		}finally {
			System.out.println("有无异常都要执行1");
		}
		String val= getString();
		System.out.println("val=="+val);
	}
	public static String getString(){
		String he="你好";
		try {
			he="hello";
			System.out.println("he="+he);
			return he;
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			System.out.println("有无异常都要执行2");
			he="hello,zhangsan";
		}
		return he;
	}
}


 try catch中return在finally之前 还是之后执行?finally语句在return语句执行之后return返回之前执行的。

public  static String  getString(){
		String  he="你好";
		try{
			he="hello";
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			System.out.println("无论有没有异常都要执行"); 
			he="hello,lisi";
		}
		return he;  
	} 

2.异常不自己处理掉
 如果出现异常,java会根据问题所描述的异常类,创建一个对象(实例)具体异常对象,然后将该对象抛给上一级【谁调用谁就是上一级】,
具体步骤:
 method具体出异常处 --》main主方法–》jvm虚拟机–》将异常出现的位置和原因打印在控制台throws–声明方法抛出异常给上一级【谁调用谁就是上一级】

package com.wangxing.zyb2;
public class TestClass {
	public int getInt()throws Exception{
		int a=10;
		int b=0;
		int c=a/b;
		return c;
	}
}
package com.wangxing.zyb2;
public class Main {
	public static void main(String[] args)throws Exception {
		TestClass tc=new TestClass();
		int res=tc.getInt();
		System.out.println("res=="+res);
	}
}

控制台

3.throw关键字与自定义异常
 简单的自定义异常–编写一个新类,继承Throwable/Exception/RumtimeException,在构造中访问父类的构造方法
throw—手动引发一个具体异常

package com.wangxing.zyb3;
public class MyException extends Exception{
	public MyException(String info){
		super(info);
	}
}
package com.wangxing.zyb3;
public class MyArray {
	private int size=0;
	public MyArray(int size)throws MyException{
		if(size>0) {
			this.size=size;
		}else {
			//手动引发一个异常
			throw new MyException("数组大小不能为负数!");
		}
	}
	public int[] cerateIntArray() {
		int arr[]=new int [this.size];
		return arr;
	}
}
package com.wangxing.zyb3;
public class Main {
	public static void main(String[] args) {
		try {
			MyArray ma=new MyArray(5);
		}catch(MyException e) {
			e.printStackTrace();
		}
	}
}

总结:
 1.如果有异常就try{}catch(){},如果不想try{}catch(){}那么就声明方法throws异常。
 2.没有特殊要求的时候我们都是打印堆栈异常,查看程序的具体异常和位置,方便修改。
 3.我们轻易不会自己定义异常,因为java提供的异常类型已经足够使用。
 4.java中的常见运行时异常
  1.NullPointerException - 空指针引用异常
  2.ClassCastException - 类型强制转换异常。
  3.IllegalArgumentException - 传递非法参数异常。
  4.ArithmeticException - 算术运算异常
  5.ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
  6.IndexOutOfBoundsException - 下标越界异常
  7.NegativeArraySizeException - 创建一个大小为负数的数组错误异常
  8.NumberFormatException - 数字格式异常
  9.SecurityException - 安全异常
  10.UnsupportedOperationException - 不支持的操作异常

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/445408.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号