我的情况是我无法返回我的方法声明,因为我的方法无法识别我的返回声明。
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) {}
}
答案 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块中或之后没有指定值。