http://www.codigg.com/2009/08/java-exception-code-method/今天在水木上看到一篇文章,原来自己那么多年写的代码都是如此的圡。public class T{
     // 这里编译时是会报错的:unreported exception
     private static final String s = intS();
     private String initS() throws Exception{
          return "www.codigg.com";
     }
}为了解决这个问题,我通常的做法都是:public class T{
     private static final String s;
     static{
          try{
               s = initS();
          }catch(Exception e){}
     }
     private String initS() throws Exception{
          return "www.codigg.com";
     }
}实际上有更优雅的做法,推荐一下:
public class T{
     private static final String s = intS();
     private T() throws Exception{}
     private String initS() throws Exception{
          return "www.codigg.com";
     }
}

解决方案 »

  1.   

    但它实际上不解决问题,只是绕过编译错误,这个办法不是值得推荐的。写代码就应该让它代码按你期望的方式执行,如果你能意识到有某些潜在的问题,你应该明确 try catch finally 处理,这叫代码的健壮性,至少要报告什么错误写日志然后视情况选择退出还是继续。这种不管不问的想法只会得到”病来如山倒”的结果。
      

  2.   

    我只知道这种import java.util.HashMap;
    import java.util.Map;public class Test {    public final static Map<Integer, String> HANDLE_STATUS_ID_NAME = new HashMap<Integer, String>();
        
        static {
            HANDLE_STATUS_ID_NAME.put(0, "未处理");
            HANDLE_STATUS_ID_NAME.put(1, "处理中");
            HANDLE_STATUS_ID_NAME.put(2, "处理完成");
            HANDLE_STATUS_ID_NAME.put(3, "退回");
        }
    }采用双花括号初始化这种更为漂亮一点的方式:import java.util.HashMap;
    import java.util.Map;public class Test {    public final static Map<Integer, String> HANDLE_STATUS_ID_NAME = new HashMap<Integer, String>() {{
                put(0, "未处理");
                put(1, "处理中");
                put(2, "处理完成");
                put(3, "退回");
            }};
    }
      

  3.   


    public class T{
        // 这里编译时是会报错的:unreported exception
        private static final String s = intS();
        private String initS() throws Exception{
              return "www.codigg.com";
        }
    }有这样写的代码吗?为什么要这样写?
      

  4.   

    学习中: 
    public class T{
        private static final String s;
        static{
              try{
                  s = initS();                //这里为什么用static包围?? 么意思?
              }catch(Exception e){}   
         }
        private String initS() throws Exception{  //这里如果遇到异常是不是会抛异常?用什么捕捉?
              return "www.codigg.com";            
        }
      

  5.   

    感觉还是很土!可以试验一下如下想法:没研究过标注。public class T{
        //工程名-异常不报告顶层标注,例如:
        @OfficeException
        private static final String s = intS();
        private String initS() throws Exception{
              return "www.codigg.com";
        }
    }
      

  6.   

    优雅?
    我比较实在,只写别人容易看懂的代码:public class T {
    public static String initS() throws Exception {
    return "www.codigg.com";
    }
    private static String initTemp(){
    String s = null;
    try {
    s =initS();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return s;
    }
    public static final String s = initTemp();
    public static void main(String[] args) {
    System.out.println(T.s);
    }
    }
      

  7.   


    1 因为是给静态变量赋值 具体情况 请参考各类基础数据
    2 该方法将异常抛给调用者 即哪里调用 异常就会抛到哪里 就是说要在调用的时候 用try捕捉楼主的写法虽然蛮有意思 但是 写程序稳定更重要 个人喜欢把异常放在容易找到的位置   不过代码不错 收藏了 感谢楼主
      

  8.   

    学习,java 太深奥了,我何时才能追上你们啊????????