class T1
{
public static void main(String[] args)
{
int c ;//初始化?
try
{
int a = 4;
int b = 0;
c = a/b;
} catch(ArithmeticException e)//捕获异常
{
e.printStackTrace();//打印异常的跟踪信息
}
System.out.println(c);
}
}代码如上,捕获运行时异常的一个简单例子。
如果不初始化c,编译不通过:提示“可能未初始化的变量c”;但如果不做异常处理,是否初始化c编译都是可以通过的。为什么在异常处理的时候必须初始化c呢??
{
public static void main(String[] args)
{
int c ;//初始化?
try
{
int a = 4;
int b = 0;
c = a/b;
} catch(ArithmeticException e)//捕获异常
{
e.printStackTrace();//打印异常的跟踪信息
}
System.out.println(c);
}
}代码如上,捕获运行时异常的一个简单例子。
如果不初始化c,编译不通过:提示“可能未初始化的变量c”;但如果不做异常处理,是否初始化c编译都是可以通过的。为什么在异常处理的时候必须初始化c呢??
还有一句话: 变量在使用前,必须要先初始化。假设你的try语句里面有很多语句,编译器怎么在执行那一句的时候会报错列??
有可能执行了:c = a/b;再出问题,也有可能在之前就出了问题。。如果之前就出了问题,那你的C相当于没有初始化,那没初始化的的变量能用么?
System.out.println(c);
如果你在catch处给c赋一个初始值,应该也能编译通过
如果没有捕捉异常,那么这些代码就是一个整体,没有任何分支,即出异常就整体挂了,也不会走到System.out.println(c)了,也就是说保证了先给c赋值,再打印c,所以能编译通过
去掉,或者放在try里边就没问题了。
我觉得2楼的大胡子讲的挺好的