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);
}
}

就可以了