`
黑色骑士
  • 浏览: 3845 次
  • 性别: Icon_minigender_1
  • 来自: 绍兴
最近访客 更多访客>>
社区版块
存档分类
最新评论

对异常和错误机制粗略见解

阅读更多
   什么是异常和错误?用两个英语单词表示,就是Error与Exception 。我对两个的解释是,Error是无法避免的,比如各种硬件故障,而Exception 则是可预见的,我把它看做程序的缺陷。很多异常是由于编写者的逻辑错误所引起的,最常见的例子就是数组越界:
IndexOutOfBoundsException,当程序运行的过程中,数组发生越界,如果你未对其进行处理,则会抛给虚拟机,而虚拟机中已经有对这些异常进行处理的机制。
    另一种就是使用try...catch,由于我对这使用不多,所以以下面这个简单的代码为例说明:
public class Exercise
{
   int[] a=new int[10];
   int i;
public static void main(String ages[])
    {
  Exercise ex=new Exercise();
  ex.Test();
    }
/*
* 对异常进行处理
*/
public void Test()
{
   //通过try catch 获得异常
  try {
           for(i=0;i<50;i++)
           {
           a[i]=i;
           }
  
   }
  catch (Exception e)
   {
        e.printStackTrace();
                //打印出错时的i               
                 System.out.println("当i="+i+"出错");
   }

     }
}
在控制台会打印出:
java.lang.ArrayIndexOutOfBoundsException: 10
at ExpecTion.Exercise.Test(Exercise.java:22)
at ExpecTion.Exercise.main(Exercise.java:10)
当i=10出错

    其实使用try...catch的效果与这个基本一致,这其中的原因便是上面提到的虚拟机中已有的对这些异常处理的机制。try...catch在其中的作用是在这层捕获异常。这些即使不用try...catch也能正常编译的异常称为运行时异常:RuntimeException,这些异常一般是由程序逻辑错误引起的。
    而真正需要使用到try...catch的异常往往是非运行时异常,即必须进行处理的异常。比如在createNewFile()时,由于在建立File类时给定的路径不一定存在,所以会产生异常。这些异常如果不处理,Eclipse是无法正常编译的,这时try...catch的作用就显现出来了。这时常规的有两种做法:throws、throw或者try...catch。throws是用来声明一个方法可能抛出的所有异常信息,throw则是指抛出的一个具体的异常类型。try...catch在其中的作用是在这层捕获异常,并制定相应的处理方法。例子仍然是最简单的代码(对createNewFile()):

/*
* 对异常进行处理
* 用throws处理异常
*/
public void Test () throws Exception
{
    String s="c\\";
File f=new File(s);
    f.createNewFile();
}

PS(这是本人的第一篇博客,写的比较烂,请大家多多谅解哈)。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics