zoukankan      html  css  js  c++  java
  • java异常的一些小知识

             异常,我们软件都需要面对的一个问题。如何让你的软件更加健壮呢?这是一个值得我们考虑的问题。这里主要为大家介绍一下异常是什么,异常是如何产生的,如何将异常抛出,如何捕获异常,对于异常应该如何处理的个人一些见解。

             异常是什么

             单就异常这两个字来说,异常的意思是:1.非正常的;不同于平常的异常现象。在我们代码中,异常指的是,在程序运行时,出现一些不正常的情况,使我们的程序无法正常运行或者对操作系统造成影响,使我们的程序无法得到预期的结果。这就是异常。这里需要说的是,我们的异常,指的是程序在运行时出现的一些问题,比如说你写了一个除法运算,用户将除数设置为了0,那么系统就会抛出异常。

            异常是如何产生的 

             异常产生的原因有很多,比如:除数为零,数组下标越界,读取的文件不存在等,字符类型做运算处理等,这里有很多都是逻辑上的异常。可能是用户输入了一些不合法的数据,但是没有相应的检查机制,于是进行了一些不正常的操作,导致产生了异常。
             异常出现后,程序可以生成一个异常类型的对象,这是系统生成的异常,这就是异常的生成。异常生成后会将异常交给java的运行系统,这是异常的抛出,具体实现下文会有介绍。现在先跟大家分享下编程人员如何自己从代码里生成异常吧,异常生成代码如下:
             
    //生成异常的方法
    	void m(int i ) throws ArithmeticException
    	{
    		if (i==0)
    		{
    			//生成异常的代码
    			throw new ArithmeticException ("被除数为零");	
    		}
            }	
             这里的这个方法,当你调用的时候,如果将i传入0 ,那么,就会生成一个异常,并且返回给调用它的类。

             异常如何抛出

    	//抛异常的类,这里的主函数调用f类,然后通过f类调用m类,这时,m类将异常抛给f类,然后f类将异常接着抛给了主函数。
    	void f(int i) throws ArithmeticException
    	{
    		//调用m类
    		m(i);
    	}
    	//生成异常的方法
    	void m(int i ) throws ArithmeticException
    	{
    		if (i==0)
    		{
    			//生成异常的代码
    			throw new ArithmeticException ("被除数为零");	
    		}	
    	}
             在这里,我们的f类调用了可以生成异常的m类,但是它并没有将m类抛给它的异常解决,而是通过 throws ArithmeticExeption 这个方法,将异常再次抛出,抛给了调用它的类。
             如果调用它的类还是不想或者是不能解决该异常,可以继续用同样的方法将异常抛出。

             如何捕获异常

             异常如何被捕获呢?先向大家展示一段代码:
               
    public class TestEx
    {
    	public static void main (String[] args)
    	{
    		int[] arr = {1,2,3};
    		System.out.println(arr[2]);
    		//异常的处理机制
    		try 
    		{
    			//有可能出问题的代码
    			System.out.println(2/0)	;
    		}
    		//捕捉异常
    		catch (ArithmeticException ae)
    		{
    			//返回信息,如果出异常后会执行这块的内容
    			System.out.println("系统出异常了,请联系管理员");
    			ae.printStackTrace();
    		}
    	}
    }
               在这里,我们的软件在运行时,自动生成了一个除数为0 的异常,我们在有可能发生异常的地方写一个try {}catch{}然后将有可能出现异常的代码写入try的括号中,将异常出现后的处理方法写入catch的括号中,如果出现异常的话,程序就可以按照设计人员的想法将异常处理,这样的话,可能就不会再将系统中断,这是异常的好处。
               下面是我们之前说的那个抛出的异常的捕获和处理:感兴趣的小伙伴可以看一下。
    public class TestEx
    {
    	public static void main (String[] args)
    	{
    		try 
    		{
    			new TestEx().f(0);	
    		}
    		catch (ArithmeticException ae)
    		{
    			ae.printStackTrace();
    			System.out.println("这是一个抛出了的异常!");
    		}
    	}


               异常处理

               软件出异常是很正常的事,如何将异常捕获并处理这是需要我们考虑的,不是所有异常都是需要用户知情,需要用户知情的也不一定所有异常都要终止软件运行。如何 让软件更加的健壮、人性化。这是设计人员需要考虑的。
               我们可以用多个catch语句去捕捉异常,对于不同的异常提供不同的解决方案,但是需要注意的是:如果异常类有继承关系的话,要将父类型的catch块放到子类型的catch块之后,这样才能保证后续的catch块可能被执行,否则子类型的catch块将永远无法到达,Java编译器会报错。
               如果我们的程序只要出异常就需要进行某一操作:比如将异常记录。那么我们就可能会用到 finally语句块,它的写法类似于catch,不同之处在于它的括号中的内容肯定会执行。


             

             

  • 相关阅读:
    php分页类 (来源网络)
    symfony2 symofny3中得到get post session cookies的方法
    symfony route参数
    Symfony2同步数据库的数据表
    mysql中SQL执行过程详解与用于预处理语句的SQL语法
    使用MySQL命令行新建用户并授予权限的方法
    抽象类和接口的区别
    Yaf 使用遇到的坑
    Mysql 常用引擎的特点及选择使用策略
    定时任务 Crontab命令 详解
  • 原文地址:https://www.cnblogs.com/liyasong/p/6387873.html
Copyright © 2011-2022 走看看