黑马程序员技术交流社区
标题:
异常处理问题
[打印本页]
作者:
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("程序结束");
}
}
}
你小子都这么超前啦,老师今天还在复习接口实现啊
我表示那个老师我是听不懂。
无标题2.png
(18.7 KB, 下载次数: 28)
下载附件
2012-9-4 21:42 上传
作者:
霍明波
时间:
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