zoukankan      html  css  js  c++  java
  • Java-异常处理机制

    饮水思源 -本文学习和总结自

    菜鸟教程

    异常的分类

    • 检查时异常: 不处理此类异常,就无法进行编译。 在我们刚开始写程序的时候常常会碰到这种异常,比如经常讲将,英文;写成 中文

    • 运行时异常: 不处理可以通过编译,但是在运行时会抛出异常。下面的除数不能为零就只一个特别典型的运行时异常。他不会检查出来,可以通过编译,但是在运行的时候,就会在控制台抛出异常。
    public class Program {
    	public static void main(String[] args) {
    		int value =0;
    		int temp = 1/value;
    		System.out.println(value);
    	}
    }
    

    • 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

    Exception类

    下图是我们的Exception类的结构

    img

    Exception 是所有异常的父类,所有的异常都从刺陵继承,包括我们的自定义异常

    Error: 错误一般不会被处理,通常都会被实现出来,比如说内存溢出 就是一个错误,而不是一个异常。

    Java 中 常见的Exception

    异常相关的方法

    异常处理

    我们在做的程序是让,用户来使用的,当一个异常没有被处理,那么他被呈现给用户了,。。。那么你的老板会好好找你谈谈的。所以我们要用异常处理处理掉我们的异常。

    异常处理使我们的编程中重要的一种机制,可以增加我们程序的健壮性,增加用户友好度,比如说:程序崩溃了但是经过了处理,提示给用户一个服务器忙!的消息,和一个程序直接崩溃是完全不一样的。

    try {
    	//可能发生异常的代码
    }catch (Exception e) {
    	//如果发生异常的处理方式
    }
    
    //Demo
    public class Program {
    	public static void main(String[] args) {
    		try {
    			int value =0;
    			int temp = 1/value;
    			System.out.println(value);
    		}catch (Exception e) {
    			System.out.println("除数不能为零!");
    		}
    	}
    }
    

    多重捕获

    
    try{
       // 程序代码
    }catch(异常类型1 异常的变量名1){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }
    

    throw 和 throws关键字

    • throw 一遍用来手动抛出隐藏
    • throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
    public static void readFile() throws Exception, IOException {
    	try {
    		File file = new File("不存在的Files");
    		FileInputStream inputStream = new FileInputStream(file);
    	} catch (Exception e) {
    		// 将异常向上抛出
    		throw e;
    	}
    }
    

    finally 关键字

    • finally 一般用于做一些善后的处理,通常会被用来清理占用的资源。
    • finally 代码块 不管是否发生异常都会执行
    public static void readFile() throws Exception, IOException {
    	try {
    		
    	} catch (Exception e) {
    		
    	}finally {
    		//这里的代码不管是否发生异常都将被执行
    	}
    }
    

    自定义异常

    有时候系统的异常并不能满足我们的需要,遇到这种情况我们需要,手动的定义一些异常。

    • 新建一个类 继承 Exception 类。
    • 如果需要重写一些我们关心的方法。
    • getMessage() 方法一般返回一些报错的详细信息。
    • printStackTrace() 方法 打印一下异常的堆栈信息。
     
    public class AgeException extends Exception {
    
    	@Override
    	public String getMessage() {
    		return "年龄不合法: 必须大于10,小于100";
    	}
    
    	@Override
    	public void printStackTrace() {
    		super.printStackTrace();
    		System.out.println("年龄不合法: 必须大于10,小于100");
    	}
    
    }
    
    

    使用自定义的异常

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.nio.file.ReadOnlyFileSystemException;
    
    public class Program {
    	public static void main(String[] args) {
    		try {
    			register("鲁迅认识的那只猹", -1);
    		}catch (AgeException e) {
    			//获取异常的提示信息
    			System.out.println(e.getMessage());
    			//打印堆栈
    			e.printStackTrace();
    		}
    	}
    
    	public static void register(String name, int age) throws AgeException {
    		if(age<=0||age>100) {
    			throw new AgeException();
    		}else {
    			System.out.println("注册成功!");
    		}
    	}
    }
    

    打印结果

    年龄不合法: 必须大于10,小于100
    AgeException: 年龄不合法: 必须大于10,小于100
    	at Program.register(Program.java:20)
    	at Program.main(Program.java:9)
    年龄不合法: 必须大于10,小于100
    
  • 相关阅读:
    模块三
    python的6种基本数据类型--字典
    python的6种基本数据类型--集合
    数据集之集合
    锚点使用
    JSON返回DateTime/Date('123123123')/解决办法
    JSON返回DateTime/Date('123123123')/解决办法
    设计模式-系列索引
    设计模式-系列索引
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/slyfox/p/7270448.html
Copyright © 2011-2022 走看看