代码如下,请问运行结果,为什么?
class ex1_1{
  public static void parse(String str){
    try{
      float f = Float.parseFloat(str);
    }catch(NumberFormatException e){
      f=0;
    }finally{
      System.out.println(f);
    }
  }
  public static void main(String[] args){
    parse("invalid");
  }
}

解决方案 »

  1.   


    class ex1_1 {
    public static void parse(String str) {
    float f = 0.0f;
    try {
    f = Float.parseFloat(str);
    } catch (NumberFormatException e) {
    f = 0;
    } finally {
    System.out.println(f);
    }
    } public static void main(String[] args) {
    parse("invalid");
    }
    }
    结果为0
      

  2.   

    编译错误,把f的定义放到try前面,就好了!你那样定义f,f的作用域只是try{},所以在catch和finally中f无法访问。    float  f = 0f;//定义在这儿
        try {
           f = Float.parseFloat(str);
        }catch(NumberFormatException e){
           f=0;
        }finally{
           System.out.println(f);
        }
      

  3.   


    public class ex1_1{


      public static void parse(String str){
      
      float f = 0;
      
      try{
      
      f = Float.parseFloat(str);
      
      }catch(NumberFormatException e){ 
      
      f=0;
      
      }finally{
      System.out.println(f);
      }
      }
      
      public static void main(String[] args){
      parse("invalid");
      }
    }应该是这一段吧,f如果在try块里面声明,catch后面的块儿是看不到的。
    invalid因为不包含具有数字含义的字符串,所以转换成数字的时候会报NumberFormatException 异常。
    这个异常被catch块儿接住后,f置为了零。由于finally是无论如何都会被执行到的代码,所以f被打印
    了出来....
      

  4.   

    public class ex1_1{
        
        
          public static void parse(String str){
              
              float f = 0;
              
              try{
              
                  f = Float.parseFloat(str);
              
              }catch(NumberFormatException e){ 
              
                  f=0;
              
              }finally{
              System.out.println(f);
              }
              }
          
              public static void main(String[] args){
              parse("invalid");
              }
    }输出0.0