如何在java方法中返回语句?

时间:2014-03-04 09:17:44

标签: java

我的情况是我无法返回我的方法声明,因为我的方法无法识别我的返回声明。

public static String j(){

 try{
    String k ="10";
    System.out.println(k);
    }

 catch (Exception ignore) {}

 return k; // error: cannot find symbol

}

错误输出:

cannot find symbol
symbol:   variable k
location: class DatabaseSQL

但如果我把我的return语句放在try {},它将返回“missing return statement”

public static String j(){ //missing return statement

 try{
    String k ="10";
    System.out.println(k);

    return k; 
    }

 catch (Exception ignore) {}

}

ANSWER

 public static String j(){
 String k ="10";// put String k before and outside try{}

 try{

    System.out.println(k);

    return k; 
    }

 catch (Exception ignore) {}

}

10 个答案:

答案 0 :(得分:7)

这是关于变量范围的。在块内声明的变量仅在该块内可见。尝试:

public static String j(){
  String k = null;
  try{
     k ="10";
     System.out.println(k);
  }

  catch (Exception ignore) {}

  return k;

}

请注意,您不应该只是默默地吃异常。我知道这只是一些测试代码,但是尽快摆脱这种习惯,从长远来看,你将为自己省去很多痛苦!

答案 1 :(得分:5)

声明String k try阻止<{1}}阻止

public static String j(){
    String k="";
    try{
        k ="10";
        System.out.println(k);
    }
     catch (Exception ignore) {}
    return k; 
}

答案 2 :(得分:4)

这是因为您在String k块中定义了try,因此local variable无法在此块之外访问

并且在第二段代码中您在return块中写了try语句,catch上没有其他语句,因此您收到此错误:"missing return statement"

所以真正的代码必须是这样的:

public static String j(){ 
   String k ="10";
   try{
     System.out.println(k);
     }
   catch (Exception ignore) {}

return k; 
 }

答案 3 :(得分:4)

如下定义,在第一种情况下,k的本地变量String类型具有包含try块的范围

public static String j(){
 String k ="10";
 try{
    System.out.println(k);
    }

 catch (Exception ignore) {}

 return k;    
}

在第二种情况下,如果发现异常,则您没有返回任何内容。你要么重新抛出异常,要么有意义地回报。

答案 4 :(得分:4)

问题是因为在try和catch之外没有定义k。这就是为什么它只在你在try块中返回时才工作,如果你还在底部返回null,那将是它在try块中返回的返回值。

这样做而且它会起作用:

 public static String j(){
  String k = "";

  try{
     k ="10";
     System.out.println(k);
     }

  catch (Exception ignore) {}

  return k;

}

答案 5 :(得分:4)

您需要在方法范围中声明String变量,如:

public static String j(){
   String k = "";
   try{
       k ="10";
       System.out.println(k);
    } catch (Exception ignore) {}

    return k;
}

答案 6 :(得分:4)

try{
    String k ="10"; // k declare inside the try and it will visible inside try
    System.out.println(k);
    }

 catch (Exception ignore) {}

 return k; // error: cannot find symbol // k not visible out side the try

}

你可以试试这种方式

String k ="";
try{  
 k="10";
 System.out.println(k);
} catch (Exception ignore) {}

 return k; 
}

答案 7 :(得分:3)

这是因为在k行的范围内未定义return。您可以这样更改:

public static String j(){ //
    String k = "10";
    try {
      System.out.println(k);
    } catch (Exception ignore) {}
    return k; 
}

如果你的字符串赋值应该在try块内,请在声明期间给它一些默认值(我建议null),然后在try块中重新分配。

答案 8 :(得分:3)

在第一次尝试时,return语句中的k超出了定义它的范围(在try块内)。

在第二次尝试时,并非方法中的所有代码路径都返回值。最好的办法是在try语句之外定义k并在结尾处返回。

public static String j(){
    String k ="10";

     try {
        System.out.println(k);
    }    
    catch (Exception ignore) {}
    return k;     
}

答案 9 :(得分:3)

根据您的代码,该方法返回类型为String的值。

public static String j(){ 

您必须确保每个可能的执行路径都知道返回值。如果一切正常(尝试块完成无错误),则返回k。但是如果发生故障(执行catch-block),方法的返回值是未定义的,因为catch块中或之后没有指定值。