zoukankan      html  css  js  c++  java
  • JAVA学习第十九课(java程序的异常处理 (二))

    异常处理的捕捉形式:

    这是能够对异常进行针对性处理的方式


    六、try、catch的理解


    详细格式:

    try
    {
    //须要被检測异常的代码
    }
    catch(异常类 变量)//改变量用于接受发生异常的对象
    {
    //处理异常的代码
    }
    finally
    {
    //一定会被运行的代码
    }

    这三个代码块是一个总体。

    try是尝试,catch捕捉,finally终于化

     

    什么时候用try&catch。什么时候用抛?

    在定义功能时,假设这个问题你能够处理的了,那么就用try&&catch。处理不了那么就用抛

    代码演示:

    import java.util.*;
    class FuException extends Exception
    {
    	FuException()
    	{
    	}
    	FuException(String s)
    	{
    		super(s);//Exception有
    		//System.out.println(s);
    	}
    }
    class ExceptionDemo 
    {//要么捕捉,要么抛出
    	public int method(int[] arr,int index) throws FuException
    	{
    			if(index<0)
    			{
    			throw new FuException("The index is fushu");
    		    }
    		return arr[index];
    	}
    }
    public class Main
    {
    	public static void main(String[] args)//throws FuException
    	{
    		int[] a = new int[10];
    		ExceptionDemo C = new ExceptionDemo();
    		try 
    		{
    			int num = C.method(a,-2);
    			System.out.print("num"+num);
    		} 
    		catch (FuException e) 
    		{
    			System.out.println("角标为负数啦!");
    		//e对象可用可不用,以下是一些经常使用的方法
    			System.out.println("Message:"+e.getMessage());
    		System.out.println("string:"+e.toString());//toString可省略
    		//打印异常信息
    		e.printStackTrace();//jvm默认的异常处理机制就是调用异常对象的这种方法
    			
    		}
    	}	
    }

    /*真正建立日志文件

    *log four(java; ; )

    *{

    *

    *}

    */其简写形式:log4j


    七、多catch情况

     

    假设在程序处理时。抛出了多个异常

    import java.util.*;
    class FuException extends Exception
    {
    	FuException()
    	{
    	}
    	FuException(String s)
    	{
    		super(s);//Exception有
    		//System.out.println(s);
    	}
    }
    class ExceptionDemo 
    {
    	public int method(int[] arr,int index) throws FuException,NullPointerException
    	{
    			if(index<0)
    			{
    			throw new FuException("The index is fushu");
    		    }
    			if (arr==null)
    			{
    				throw new NullPointerException("没有数组实体");//可自己定义
    			}
    		return arr[index];
    	}
    }
    public class Main
    {
    	public static void main(String[] args)//throws FuException
    	{
    		int[] a = new int[10];
    		ExceptionDemo C = new ExceptionDemo();
    		try 
    		{
    			int num = C.method(a,2);
    			System.out.print("num"+num);
    		}
    		catch (FuException e) 
    		{
    			System.out.println("角标为负数啦!");	
    		}
    		catch (NullPointerException e) 
    		{
    			//e.printStackTrace();
    			System.out.println("Message:"+e.getMessage());
    		} 
    		//多catch情况,假设有以下catch情况。不能房最上面。会接受全部对象
    		catch (Exception e) 
    		{
    			//父类的catch房最以下,否则编译失败
    			//假设实在出现已有catch以外的情况,虚拟机会处理
    		}
    	}	
    }



    八、异常的处理原则


    try究竟什么时候用?

    最根本的核心:仅仅要使用了声明异常的方法,就要try,仅仅要代码中有抛出异常的动作,假设能处理就用try。见到了异常就处理,没有异常就不须要处理。注意:没有错误。非要写try,不仅没意义。还存在弊端。假设真的要处理异常。可是不知道是什么异常,那么仅仅能写Exception。一旦未知异常真的发生了,可是却有个预先处理的方式 ,处理什么不知道,这个异常被处理掉了,一旦处理掉了,就相当于异常被隐藏,可是程序还在正常运行。所以,仅仅要没说有问题,就不处理,仅仅要问题发生了。看到了。再考虑问题是否要处理

    异常处理的原则:

    1.函数内部假设抛出需要检測的异常。函数上必需要声明。否则必须在函数内部用try&&catch捕捉,否则编译失败

    2.假设调用到了声明异常的函数,要么try&&catch,要么throws。否则编译失败

    3.什么时候catch。什么时候throws?

    功能内部能够解决,用catch

    解决不了,用throws,由调用者解决

    4.一个功能假设抛出了多个异常,那么调用时必须相应多个catch,进行针对性的处理

    (内部有几个须要检測的异常,就要抛几个异常,抛几个。就catch几个)


    九、finally代码块


    /*finally的应用:
     * 用到finally最多的地方,比方数据库
     * 比如:打开百度。搜索
     * 连接数据库
     * 查询:假如Exception了,查询过程中出问题
     * 关闭连接
     *假设出现异常,不关闭连接,还在浪费数据库资源,所以不管是否出现异常,关闭连接一定要运行
     *进而释放资源,故关闭连接定义在finally里
     */

    所以:凡是有资源须要关闭。一定要定义在finally里。


    try。catch,finally代码块组合的方式:

    1、try,catch,finally(三个都有常见)

    2、try、catch,没有必要资源须要释放时,就不是必需定义finally

    3、try、finally  异常无法直接catch处理,可是资源一定要关闭

    void show()//throws Exception,不用声明。由于catch已经处理了
    {
    	try 
    	{	throw new Exception();  }
    	//有catch
    	catch
    	{	.....  }
    }
    

     void show()throws Exception//没catch,就要声明
    {
    	try 
    	{	throw new Exception();  }
    	//没catch
    	finally  //连接资源,出现异常,可是这个异常不一定就要处理,可是资源一定要关闭,由于在内部开辟的。别人不知道
    	{  ....   }
    }




  • 相关阅读:
    sys模块
    os模块
    datetime模块
    time模块

    random模块
    python文件两种用途
    模块的搜索路径
    如何修改cnblogs的文本编辑器
    socket状态
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6812144.html
Copyright © 2011-2022 走看看