当前位置: 代码迷 >> J2SE >> java成员初始化时调用的语句需要抛出错误,该怎么办
  详细解决方案

java成员初始化时调用的语句需要抛出错误,该怎么办

热度:133   发布时间:2016-04-23 20:13:38.0
java成员初始化时调用的语句需要抛出异常,该怎么处理
比如

public class Test {
private static final String ttt = aaa();

public static String aaa() throws Exception {
return "aaa";
}
}


调用aaa可能抛出异常,在赋值语句中怎么处理?
------解决思路----------------------
你这种是不能用final的,final是常量。。。
要么你直接在用到ttt的地方嗲用aaa方法,要么把ttt的final去掉。
------解决思路----------------------
你让编译器保证它不被更改,你也一样可以通过某个 getAAA() 方法来保证不被更改嘛,一个单例或纯粹一个普通的 getAAA() 静态方法。总之编译器保证的东西在运行时也不见是不可突破的,比如一个单例的对象我们可以通过序列化再读取的办法复制得到另一个实例,你说这算是什么事呢?这个时候就出现这种设计一致性的问题。只是设计合理,保证程序的一致性要求,其它是不用太在意怎么做到的。

引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:


public class Test {
    private static final String ttt;

    static{
     try{
      ttt=aaa();
    }catch(Exception ){
    }
   }
     
    public static String aaa() throws Exception {
        return "aaa";
    }
}


这个方案是不行的。
编译器提示ttt没有初始化,如果给初值null后,编译器提示final变量不能再次赋值

其实有个问题是你为什么要设为final,对象声明为final通常只有作为同步锁或者单例,而这两种情况下不会发生这种问题,再其它场合下这种设计方法都是有问题的


作为常量,以后只是使用不让更改。
让语言机制保证访问的安全。

------解决思路----------------------
class Test1 {
    private static final String ttt=bbb();
 
    public static String bbb(){
        try {
return aaa();
} catch (Exception e) {
// TODO Auto-generated catch block
}
        return null;
    }
    
    public static String aaa()  throws Exception{
        return "aaa";
    }
}