IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java.异常 -> 正文阅读

[Java知识库]Java.异常


概念

  • 在程序运行过程中出现的错误,称为异常。异常就是程序运行过程中出现了不正常现象导致程序的中断。在Java中,把各种异常现象进行了抽象形成了异常类
  • 异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
  • 程序错误分为三种:
    • 编译错误:程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置。
    • 运行时错误:程序在执行时,运行环境发现了不能执行的操作。
    • 逻辑错误:程序没有按照预期的逻辑顺序执行。

异常分类

  • 异常类结构(不完整):
Object Throwable Error Exception IOException RuntimeException
  • 通常,Java的异常分为受查异常(checked exceptions)和非受查异常(unchecked exceptions)。
  • 受查异常: 包括Exception及其子类(不包括运行时异常,即RuntimeException与其子类),这种异常的特点是Java编译器会检查它,必须处理后才能通过编译。
  • 非受查异常: 包括运行时异常(RuntimeException与其子类)和Error,表示程序中出现了编程错误,应该找出错误修改程序。

异常处理机制

  • try:监控区域,执行可能产生异常的代码,不能单独出现。当try块中有语句引发异常时,系统将不再执行try块中未执行的语句,而执行匹配的catch块。

  • catch:捕获、处理异常。一般按照由小到大的顺序捕获,也就是先截获子异常,再截获父异常。

  • finally:善后处理,无论是否发生异常,代码总能执行。finally必须和try一块使用。

  • 如果在catch中遇到了return或者异常等能使该函数终止的话那么有finally就必须先执行完finally代码块里面的代码然后再返回值。

  • 一般格式:

    try {
    	
    	} catch (OneException e) {
    	     
    	} catch (TwoException e) {
    	
    	} finally {
    	
    	}
    

    或者:

    try {
    	
    	} catch (OneException e1|TwoException e2) {  //从小到大用|隔开
    	
    	}finally {
    	
    	}
    
  • 示例:

    
    class Person{
    	String name;
    }
    
    public class Test {
    	public static void main(String[] args) {	
    		Person p = null;
    		try{			
    			p.name = "我是一个不能赋值给null的字符串";			
    		}catch(java.lang.NullPointerException e1){ //捕获指针异常
    			System.out.println("空指针异常");				
    		}finally{
    			System.out.println("end1");
    		}
    		
    		try{
    			System.out.println(100 / 0);
    		}catch(Exception e2){ //捕获所有异常
    			System.out.println("0不能作为分母出现!请回小学补习算术");	
    		}finally{
    			System.out.println("end2");
    		}
    	}
    }
    
    
  • 输出:

    空指针异常
    end1
    0不能作为分母出现!请回小学补习算术
    end2	
    

异常抛出

  • throw用于手动抛出异常,作为程序员可以在任意位置手动抛出异常

  • throws用于在方法上标识要暴露的异常,抛出的异常交由调用者处理

  • throw用在方法内,后面跟上要抛出的异常类对象;throws修饰在方法上,告诉调用者此方法可能会抛出异常,后面跟上要抛出的异常类名

  • 示例:

    class Bar{
    	int age;
    	public Bar(int age){
    		this.age = age;
    	}
    	void check()throws IllegalArgumentException{ 	//throws 声明标识可能出现的异常
    		if(age < 18){
    			throw new IllegalArgumentException("年龄不符合要求");	//throw 抛出异常
    		}
    	}
    	
    }
    
    public class Test {
    	public static void main(String[] args) {	
    		Bar b = new Bar(15);
    		try{
    			b.check();
    		}catch(IllegalArgumentException e){
    			System.out.println(e.getMessage()); //打印返回异常的详细消息字符串
    			e.printStackTrace(); //追踪堆栈异常信息
    		}
    		System.out.println("end");
    	}
    }
    
    
  • 输出:

    年龄不符合要求
    end
    java.lang.IllegalArgumentException: 年龄不符合要求
    	at Bar.check(Test.java:8)
    	at Test.main(Test.java:18)
    

自定义异常

  • 自定义异常类必须从已有的异常类继承

  • 建立新的异常类型最简单的方法就是让编译器产生默认构造方法

  • 对异常来说,最重要的部分就是它的类名

  • 可以为异常类定义一个接收字符串参数的构造方法,字符串参数描述异常信息

  • 格式:

    public class CustomException extends Exception {
    
    	//无参构造方法
    	public CustomException(){
    		
    		super();
    	}
    	
    	//有参的构造方法
    	public CustomException(String message){
    		super(message);
    		
    	}
    	
    	// 用指定的详细信息和原因构造一个新的异常
    	public CustomException(String message, Throwable cause){
    		
    		super(message,cause);
    	}
    	
    	//用指定原因构造一个新的异常
    	 public CustomException(Throwable cause) {
    		 
    		 super(cause);
    	 }
    	
    }
    
    
  • 示例

    class Bar{
    	int age;
    	public Bar(int age){
    		this.age = age;
    	}
    	void check()throws myException{ 
    		if(age < 18){
    			throw new myException("年龄不符合要求");	
    		}
    	}
    	
    }
    
    class myException extends Exception{
    	
    	private String message;
    	public myException(String message){
    		super(message);
    	}
    }
    
    public class Test {
    	public static void main(String[] args) {	
    		Bar b = new Bar(15);
    		try{
    			b.check();	
    		}catch(myException e){
    			System.out.println(e.getMessage());
    			e.printStackTrace();
    		}
    		System.out.println("end");
    	}
    }
    
    
  • 输出:

    年龄不符合要求
    myException: 年龄不符合要求
    	at Bar.check(Test.java:8)
    	at Test.main(Test.java:26)
    end
    

?? 本回完! ?? ?? ??

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 11:36:30  更:2021-09-09 11:39:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:21:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码