java中try-catch语句中的返回

java中try-catch语句中的返回,java,return,try-catch,finally,Java,Return,Try Catch,Finally,在这个方法中,哪里可以使用return语句?终于进去了?还是试试 返回try-catch语句中的字符串有点困惑 public List<String> getEmailAddr(String strAccountnbr, String strCode) throws Exception { String strQuery2 = null; ResultSet rs = null; PreparedStatement ps = null

在这个方法中,哪里可以使用return语句?终于进去了?还是试试

返回try-catch语句中的字符串有点困惑

public List<String> getEmailAddr(String strAccountnbr, String strCode) throws Exception {

        String strQuery2 = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        List<String> emailAddress= new ArrayList<String>();

     try{

         strQuery2 =  "SELECT c.EmailAddress AS EmailAddress" +
                      " FROM customeremailid c " +
                      " WHERE c.AccountNbr = ? " +
                      " AND c.Code = ? ";

          logMsg("strQuery2: "+strQuery2);
          ps = getDBConn().prepareStatement(strQuery2);
          ps.setString(1, strAccountnbr);   
          ps.setString(2, strCode); 
          rs = ps.executeQuery();

        while(rs.next())
        {   
            emailAddress.add((rs.getString("EmailAddress")));   
        } 


     }

     catch(Exception e)
     {
         //some error especify your exception or uses a generic..
         throw new EmailAdressException("BLA BLA BLA...")
     }  
     //if everything is fine return  email
     return emailAddress;
     }
这是我的密码

   public List<String> getEmailAddr(String strAccountnbr, String strCode) throws Exception {

        String strQuery2 = null;
        ResultSet rs = null;
        PreparedStatement ps = null;

     try

     {
        List<String> emailAddress= new ArrayList<String>();
        strQuery2 =  "SELECT c.EmailAddress AS EmailAddress" +

            " FROM customeremailid c " +
            "WHERE c.AccountNbr = ? " +
            "AND c.Code = ? ";

          logMsg("strQuery2: "+strQuery2);

          ps = getDBConn().prepareStatement(strQuery2);
          ps.setString(1, strAccountnbr);   
          ps.setString(2, strCode); 
          rs = ps.executeQuery();

        while(rs.next())
        {   
            emailAddress.add((rs.getString("EmailAddress")));   
        } 


     }

     catch(Exception e)
     {
         e.printStackTrace();
     }  

     return emailAddress;
     }
public List getEmailAddr(String strAccountnbr,String strCode)引发异常{
字符串strQuery2=null;
结果集rs=null;
PreparedStatement ps=null;
尝试
{
List emailAddress=new ArrayList();
strQuery2=“选择c.EmailAddress作为EmailAddress”+
“来自customeremailid c”+
“其中c.AccountNbr=?”+
“和c.代码=?”;
logMsg(“strQuery2:+strQuery2”);
ps=getDBConn().prepareStatement(strQuery2);
ps.setString(1,strAccountnbr);
ps.setString(2,strCode);
rs=ps.executeQuery();
while(rs.next())
{   
emailAddress.add((rs.getString(“emailAddress”));
} 
}
捕获(例外e)
{
e、 printStackTrace();
}  
返回电子邮件地址;
}
我收到错误,因为无法将电子邮件地址解析为变量。 有什么帮助吗

我收到错误,因为
电子邮件地址
无法解析为变量。任何 帮忙

现在,您的
电子邮件地址只能在
try{//Block}
中访问,而不能在
catch{//Block}
中将代码更改为

List<String> emailAddress= new ArrayList<String>();
try
{
....
}

return emailAddress;
List emailAddress=new ArrayList();
尝试
{
....
}
返回电子邮件地址;

以前,您尝试返回的变量仅限于try块范围。

return
可以在
try
块内部或
try-catch
块外部使用,
最后
块基本上是用于放弃资源,而不是用于编写返回语句。

公共列表getEmailAddr(字符串strAccountnbr,字符串strCode)引发异常{
public List<String> getEmailAddr(String strAccountnbr, String strCode) throws Exception {

        String strQuery2 = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        List<String> emailAddress= new ArrayList<String>();

     try{

         strQuery2 =  "SELECT c.EmailAddress AS EmailAddress" +
                      " FROM customeremailid c " +
                      " WHERE c.AccountNbr = ? " +
                      " AND c.Code = ? ";

          logMsg("strQuery2: "+strQuery2);
          ps = getDBConn().prepareStatement(strQuery2);
          ps.setString(1, strAccountnbr);   
          ps.setString(2, strCode); 
          rs = ps.executeQuery();

        while(rs.next())
        {   
            emailAddress.add((rs.getString("EmailAddress")));   
        } 


     }

     catch(Exception e)
     {
         //some error especify your exception or uses a generic..
         throw new EmailAdressException("BLA BLA BLA...")
     }  
     //if everything is fine return  email
     return emailAddress;
     }
字符串strQuery2=null; 结果集rs=null; PreparedStatement ps=null; List emailAddress=new ArrayList(); 试一试{ strQuery2=“选择c.EmailAddress作为EmailAddress”+ “来自customeremailid c”+ “其中c.AccountNbr=?”+ “和c.代码=?”; logMsg(“strQuery2:+strQuery2”); ps=getDBConn().prepareStatement(strQuery2); ps.setString(1,strAccountnbr); ps.setString(2,strCode); rs=ps.executeQuery(); while(rs.next()) { emailAddress.add((rs.getString(“emailAddress”)); } } 捕获(例外e) { //某些错误指定了您的异常或使用了泛型。。 抛出新的EmailAddressException(“BLA-BLA-BLA…”) } //如果一切正常,请回复电子邮件 返回电子邮件地址; }
在代码中,当你在一个块中声明你的电子邮件地址(尝试块)时,EMAIL地址只在该块内可用。这里的catch catch在处理查询时仅用于处理可能的异常。尝试将TestCcatch限制为只会引发异常的代码。(在这种情况下,您可以/应该重构您的代码,以便使用自己的方法完成查询)

如果在try-catch块之外声明emailAddress,则在catch块之后返回它

public List<String> getEmailAddr(String strAccountnbr, String strCode) throws Exception {
    List<String> emailAddress= new ArrayList<String>();

     try {
         // Handle query here
     } catch(Exception e) {
         // You should not catch Exception, but a more fine-grained exception.
         // In this case, SQLException
     } 

     return emailAddress;
 }
public List getEmailAddr(String strAccountnbr,String strCode)引发异常{
List emailAddress=new ArrayList();
试一试{
//在这里处理查询
}捕获(例外e){
//您不应该捕获异常,而是更细粒度的异常。
//在本例中,SQLException
} 
返回电子邮件地址;
}

当然不在
finally
块内。不,这不是真的。您可以将此try-catch限制为仅处理可能的查询异常,然后处理其余代码(包括返回语句)在try/catch之外。@Handsomeguy如果我没弄错,你的意思是说没有必要写
最后
块吗?不,不正确的是“Return必须始终在try块内部使用”@Handsomeguy删除了不明确的部分,因为还有另一行“或可在
try catch
块外部使用。我在块外部声明。如果没有电子邮件地址,我是否会在catch中获得异常?@user3152748您将获得null指针,但如果您获得任何异常,您可以在catch块中返回null或特定错误消息。这是您的赌注!!!:)
public List<String> getEmailAddr(String strAccountnbr, String strCode) throws Exception {
    List<String> emailAddress= new ArrayList<String>();

     try {
         // Handle query here
     } catch(Exception e) {
         // You should not catch Exception, but a more fine-grained exception.
         // In this case, SQLException
     } 

     return emailAddress;
 }