try catch 里的变量和外面的有什么区别?
public class ArgsTest {
public static void main (String [] args) {
if (args.length<3){
System.out.println("Usage\"a\"op\"b\"");
System.exit(-1);
}
try{
double a = Double.parseDouble(args[0]);
double b = Double.parseDouble(args[2]);
double c = 0;
if (args[1].equals("x")) c=a*b;
else if (args[1].equals("/")) c=a/b;
else if (args[1].equals("+")) c=a+b;
else if (args[1].equals("-")) c=a-b;
} catch (Exception e) {
e.printStackTrace();
}
System.out.print(c);
}
}
上面这个编译错误,找不到变量c,而下面的程序把输出放到try中又是正确的,请问为什么会这样呢?
public class ArgsTest {
public static void main (String [] args) {
if (args.length<3){
System.out.println("Usage\"a\"op\"b\"");
System.exit(-1);
}
try{
double a = Double.parseDouble(args[0]);
double b = Double.parseDouble(args[2]);
double c = 0;
if (args[1].equals("x")) c=a*b;
else if (args[1].equals("/")) c=a/b;
else if (args[1].equals("+")) c=a+b;
System.out.print(c);
} catch (Exception e) {
e.printStackTrace();
}
}
}
变量的作用域不同。变量c在try{}块中定义他的作用就只在try{}可见,将变量的声明放在try外面,才在try{}外可用。
例如,下面这段代码会出现编译错误,找不到变量c:
public class ArgsTest {
public static void main (String [] args) {
if (args.length<3){
System.out.println("Usage\"a\"op\"b\"");
System.exit(-1);
}
try{
double a = Double.parseDouble(args[0]);
double b = Double.parseDouble(args[2]);
double c = 0;
if (args[1].equals("x")) c=a*b;
else if (args[1].equals("/")) c=a/b;
else if (args[1].equals("+")) c=a+b;
else if (args[1].equals("-")) c=a-b;
} catch (Exception e) {
e.printStackTrace();
}
System.out.print(c);
}
}
将上面的代码改动如下,就可以了:
public class ArgsTest {
public static void main (String [] args) {
if (args.length<3){
System.out.println("Usage\"a\"op\"b\"");
System.exit(-1);
}
double c = 0;
try{
double a = Double.parseDouble(args[0]);
并神double b = Double.parseDouble(args[2]);
if (args[1].equals("岁森x")) c=a*b;
else if (args[1].equals("/")) c=a/b;
else if (args[1].equals("+")) c=a+b;
else if (args[1].equals("-")) c=a-b;
} catch (Exception e) {
e.printStackTrace();
}
System.out.print(c);
}
乎蔽亩}
变量的作用域问题。变量c在try{}块中定义他的唤高悉作用就只在try{}可见,以后遇到这种念返情况可将变量的声明放在try外面
例如 可将上面的代码改成这和乎样
public class ArgsTest {
public static void main (String [] args) {
if (args.length<3){
System.out.println("Usage\"a\"op\"b\"");
System.exit(-1);
}
double c = 0;
try{
double a = Double.parseDouble(args[0]);
double b = Double.parseDouble(args[2]);
if (args[1].equals("x")) c=a*b;
else if (args[1].equals("/")) c=a/b;
else if (args[1].equals("+")) c=a+b;
else if (args[1].equals("-")) c=a-b;
} catch (Exception e) {
e.printStackTrace();
}
System.out.print(c);
}
}
就可以了