zoukankan      html  css  js  c++  java
  • Java的异常处理

     Java把所有不正常情况分为两种,它们都继承Throwable父类

    --错误:一般之虚拟机相关问题,如系统崩溃,虚拟机错误,动态连接失败等,这类情况不能恢复或不可能被捕获。

    --异常:与错误相反,

    主要依赖5个关键字:try、catch、finally、throw、throws’

    1. 抛出Checked异常和Runtime异常的区别

    •     不是RuntimeException类及其子类的实例被称为Checked异常
    •   Checked异常:要么使用throws显示的抛出,要么用try..catch显示的捕获它,并处理.
    •   Runtime异常: 无需显示的抛出,如果需要可以使用try..catch显示的捕获它
    public class ExceptionDemo {
    
    	public static void main(String[] args) {
    		try {
    			//调用Checked异常方法,要么在main方法中再次抛出,要么显示的处理它
    			throwChecked(4);
    		} catch (Exception e) {
    			System.out.println(e.getMessage());
    		}
    		//调用抛出Runtime异常的方法,既可以显示的捕获它,也可以不理会该异常
    		throwRunTime(4);
    	}
    	
    	/*
    	 * 自行抛出Exception异常
    	 * 该代码必须在try块中,或者在带有throws声明的方法中
    	 */
    	public static void throwChecked(int a )throws Exception{
    		if (a>0){
    			throw new Exception("a的值大于0");
    		}
    	}
    	
    	/*
    	 * 自行抛出Runtime异常
    	 * 可以完全不理会该异常,也可以交给该方法的调用者处理
    	 */
    	public static void throwRunTime(int a){
    		if (a>0) {
    			throw new RuntimeException("a的值大于0");
    		}
    	}
    
    }
    

      运行的结果:

     2. 自定义异常类

    /*
     * 自定义异常类,提供两个构造器
     * 如果希望是Runtime异常,则继承RuntimeException基类
     */
     class AuctionException extends Exception {
    
    	public AuctionException() {
    	}
    
    	public AuctionException(String message) {
    		super(message);
    	}
    }
    

      

    3. catch和throw同时使用

      企业级应用中通常对异常处理通常分为两个部分,一个是后台通过日志记录异常发生的详细情况,

    另一个是根据异常向使用者(非开发者)传达某种提示。

    public class ExceptionDemo2 {
    	private static double initPrice = 30.0;
    	public static void bid(String bidPrice) {
    		double d = 0.0;
    		try {
    			d = Double.parseDouble(bidPrice);
    		} catch (Exception e) {
    			//此处仅仅在控制台打印出异常
    			e.printStackTrace();
    			//再次抛出自定义异常
    			throw new RuntimeException("竞拍的价格必须是数值");
    		}
    		if (initPrice > d){
    			throw new RuntimeException("竞拍价不许比起拍价低");
    		}
    	}
    
    	public static void main(String[] args) {
    		try {
    			bid("abc");
    		} catch (Exception e) {
    			//再次捕获异常,并处理
    			System.err.print(e.getMessage());
    		}
    
    	}
    
    }

      结果:

  • 相关阅读:
    poj1661【DP,左右两端dp】
    hdoj1074【A的无比爆炸】
    hdoj1024【DP.最 大 m 字 段 和】(写完我都怕。。。不忍直视。。)
    qq教xixi写模拟加法【非常爆炸】
    错排公式
    POJ3616【基础DP】
    hdoj1257【疑问】(贪心)
    【弱的C艹之路。。未完待续】
    hdoj1728【搜索的两种写法】
    hdoj1001【智障了。。。】
  • 原文地址:https://www.cnblogs.com/zydev/p/6815518.html
Copyright © 2011-2022 走看看