黑马程序员技术交流社区

标题: 异常处理问题 [打印本页]

作者: Tesla时光    时间: 2012-9-4 21:30
标题: 异常处理问题
本帖最后由 翁发达 于 2012-9-4 22:14 编辑

这段代码编译没有出错,但运行却抛个异常出来,
没有任何结果,按理说我程序就算有异常,finally也是必须执行的,那现在是为什么?
import java.io.*;
public class Test3
{
public static void main(String args[])
{
  int a=5;
  int b=0;
  System.out.println(a/b);
  try
  {
   System.out.println(a/b);
  }
  catch(ArithmeticException e)
  {
   System.out.println("除数不可以为0");
  }
  finally
  {
   System.out.println("程序结束");
  }
}
}

作者: 方志亮    时间: 2012-9-4 21:35
本帖最后由 方志亮 于 2012-9-4 21:39 编辑

finally 块必须与 try 或 try/catch 块配合使用。此外,不可能退出 try 块而不执行其 finally 块。如果 finally 块存在,则它总会执行。(无论从那点看,这个陈述都是正确的。有一种方法可以退出 try 块而不执行 finally 块。如果代码在 try 内部执行一条 System.exit(0); 语句,则应用程序终止而不会执行 finally 执行。另一方面,如果您在 try 块执行期间拨掉电源,finally 也不会执行。)

import java.io.*;
public class Test3{public static void main(String args[]){
  int a=5;
int b=0;
System.out.println(a/b);//因为这里 系统在就抛出了异常 所以就停止了
  try  {
System.out.println(a/b);
}  catch(ArithmeticException e)
{  
System.out.println("除数不可以为0");
}
finally  {
System.out.println("程序结束");  
}
}
}
作者: 王舜民    时间: 2012-9-4 21:42
public class Test3
{
public static void main(String args[])
{
  int a=5;
  int b=0;
  //System.out.println(a/b); //这句话是关键,导致你还是异常报错。你都放到try里面了怎么还在主函数里面放一份
  try
  {
   System.out.println(a/b);
  }
  catch(ArithmeticException e)
  {
   System.out.println("除数不可以为0");
  }
finally
  {
  System.out.println("程序结束");
  }
}
}


你小子都这么超前啦,老师今天还在复习接口实现啊
我表示那个老师我是听不懂。


作者: 霍明波    时间: 2012-9-4 21:42
import java.io.*;
public class Test3
{
public static void main(String args[])
{
  int a=5;
  int b=0;
  System.out.println(a/b);  try
  {
   System.out.println(a/b);
  }
  catch(ArithmeticException e)
  {
   System.out.println("除数不可以为0");
  }
  finally
  {
   System.out.println("程序结束");
  }
}
}
在红线处就已经有异常了,后面的根本不会读到,你写的有问题,如果把红色的注释掉如下:
import java.io.*;
public class Test3
{
public static void main(String args[])
{
  int a=5;
  int b=0;
  //System.out.println(a/b);
  try
  {
   System.out.println(a/b);
  }
  catch(ArithmeticException e)
  {
   System.out.println("除数不可以为0");
  }
  finally
  {
   System.out.println("程序结束");
  }
}
}
这样就能成功
作者: 孙沛    时间: 2012-9-4 21:43
System.out.println(a/b);这一步错了,因为b=0,所以在这一步就会抛出异常Exception in thread "main" java.lang.ArithmeticException: / by zero
抛出异常后,就不会再往下执行,所以try、catch代码块就不会执行
作者: 黑马-李勇    时间: 2012-9-4 21:48
同意二楼的,try再向上移一行,放在System.out.println()前面去
作者: 吴通    时间: 2012-9-4 21:54
对于有可能发生异常的功能要在函数上声明出去,通过throws Exception来实现,调用这个函数时也要做出相应
的处理:抛出异常(throws Exception)或者try{}catch(){}

try
{
需要被检测的代码
}
catch (异常类变量)
{
处理异常的代码(处理方式)
}
finally
{
一定要执行的语句
}

楼主你的代码:
import java.io.*;
public class Test3
{
public static void main(String args[])
{
  int a=5;
  int b=0;
  System.out.println(a/b); //这一行有可能发生异常,所以处理的话应该放在try语句里面。
  try
  {
   System.out.println(a/b);
  }
  catch(ArithmeticException e) //ArithmeticException异常属于运行时异常RuntimeException的子类,如果抛出这个异常可以不用处理一样通过。在这直接用Exception就行或自定义异常
  {
   System.out.println("除数不可以为0");
  }
  finally
  {
   System.out.println("程序结束");
  }
}
}




作者: 乔九    时间: 2012-9-4 22:26
虚拟机读到这句 System.out.println(a/b);的时候直接通不过程序停止。或者可以将System.out.println(a/b)封装成方法先进性异常抛出声明在进行捕获处理




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2