2012-09-10 2 views
-4

잠재적 인 오류가 발생하는 코드가 있고이를 잡아 finally 블록으로 건너 뛰십시오. 여기에 '의사'형식입니다.일식 경고 : 마지막으로 블록이 정상적으로 완료되지 않습니다.

private boolean myMethod(ResultSet rs1, ResultSet rs2){ 

Vector<String> temp = new Vector<String>(); 

try{ 

//add info into temp while condition is true 
while(true){temp.add(information);}//potentially throws an SQL error 

//test my temo object for some codition 
if(false){throw InternalError();} 


}catch (SQLException e){ 
    //send error message 
} 
catch (InternalError e){ 
    //send error message 
} 

finally{ 
//whatever happens I need to send a result of some sort! 

if(temp.size() > 1){ 
    //create class member variable from this info 
} 

//send a message explaining that an error has occurred. 

//this is the message to say if things have worked or not, so as the 
//calling code can handle an re-run this method until this value returns true. 
return booleanValue 
}//end finally 


}//end method 

이 오류 메시지가 의미하는 바는 정확히 무엇인지 모르겠습니다.

나는 일반적으로 예외를 처리하는 메서드 내에서 예외를 처리합니다. 예외를 처리하는 대신이 인스턴스를 throw하고 두 가지 오류를 모두 사용자 지정 예외에서 catch해야합니까?

내가 보내는 첫 번째 2 개의 메시지는 주로 개발 목적을위한 것이며 처리해야하기 때문입니다. finally 블록의 메시지는 사용자에게 상황을 확인하거나 수정하거나 중단하고 변경하는 메시지를 궁극적으로 사용자에게 제공합니다.

컴파일러 메시지를 제거하려면 어떻게해야합니까? 나는 내 코드에서 경고를 억제하는 것을 좋아하지 않는다. 왜냐하면 내가 사슬을 따라 더 아래로 뭔가를 억압 할 수 있다는 암시를 좋아하지 않는다. 또한 억압은 전체적인 방법을위한 것이고, 나는 이것을 위해 추가 할 수 없다. 작은 코드 블록.

내 상황에 대한 조언이 있습니까?

미리 감사드립니다.

edit1 : 의견을 반영하기 위해 죄송합니다. if (test) {} 닫는 중괄호와 동일한 올바른 반환 유형 (바보 같은 실수)을 넣는 것을 잊어 버렸습니다.

추신. 'downvoted'을 가지고있는 사람들에게는 당신이 코멘트를 달고 나에게 downvoting하기 전에 편집 할 기회를 줄 수 있습니다. 감사. 또한 내 코드에서 이러한 것들이 나에게 문제가되지 않는다. 게시하는 동안 두뇌와 손가락 사이에 'quertyscript 오작동'이 일어난다.

+0

catch의 닫는 중괄호를 if 주석의 다음 줄에 넣습니다. 그들은 지금 의견의 일부이므로 오류가 발생합니다. 또한 void 메서드는 아무 것도 반환하지 않습니다. –

+0

이것은 "의사 코드"입니다. 이것은 아마도 문제의 근원이 아님을 의미합니다. 그러나 여기서 "의사"는 이해할 수 없을 정도로 쓰여서 관련 세부 사항을 숨 깁니다 ... – eis

+0

'finaly'는 ** 모든 ** Java 환경에서 작동하지 않을 것입니다. 'finally'를 시도해보십시오 ... –

답변

3

메서드 반환 유형은 void이고 finally block에 반환 문은 return booleanValue입니다. 마지막으로 블록을 사용하여 비 자바 리소스를 닫습니다.

값을 반환하려면 try 블록이나 catch 블록 또는 try{}catch{} 외부에서 반환하거나 finally{}이 아닌 값을 반환하십시오.

+0

return 문을 catch에 넣으면 메서드가 이미 catch 문 중 하나에서 반환되었으므로 필자는 finally에 도달하지 않을 것입니다. – DaveM

+1

** 항상 ** 마침내 ** 마침내! –

+0

방금 ​​'finally가 항상 돌아온 후에 실행됩니다'를 검색하여 SO : http://stackoverflow.com/questions/65035/in-java-does-return-trump-finally whick이 내 질문에 대답합니다. 저는 이것을 답으로 표시하고 비슷한 것을 언급 한 다른 사람에게 +1을 줄 것입니다. – DaveM

5

코드 서식을 지정했다면 절에 연결되지 않고 catch 안에있는 finally 절을 보았을 것입니다.

당신은

try { 

} catch { 

} finally { 

} 

해야하지

try { 

} catch { 
    finally { 

    } 
} 
+0

죄송합니다. 코드를 수정 했으므로 이제는 좋을 것 같습니다. – DaveM

7

휴식, * 반환 * 및 명령문의 갑작스러운 완료됩니다 던져 계속합니다. 블록 외부로 반송하십시오. 또한 void 메소드를 반환합니다.

+0

return 문에 대한 Nandkumar에 대한 내 의견보기. thanks David David – DaveM

4

return 문이 블록 블록에 있기 때문에 이것은 바람직하지 않으며 나쁜 코딩 스타일로 간주됩니다.

+0

위의 nandkumar에 대한 제 응답을 봅니다. – DaveM

관련 문제