static final的,不能这么玩的。

解决方案 »

  1.   

    这个没有意义, private static final String ttt = “aaa”。
      

  2.   


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

  3.   


    我之前也想过写在静态初始化代码块中,但问题是我这个成员变量需要是final的,无法在静态初始化代码块中赋值了。
      

  4.   


    那应该怎么玩?有何高策?既然是final,那就不应该赋值了。
      

  5.   


    那应该怎么玩?有何高策?既然是final,那就不应该赋值了。需要赋初始值啊,以后就只要使用就行了。
      

  6.   


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

  7.   

    你这种是不能用final的,final是常量
    要么你直接在用到ttt的地方嗲用aaa方法,要么把ttt的final去掉。
      

  8.   


    这个方案是不行的。
    编译器提示ttt没有初始化,如果给初值null后,编译器提示final变量不能再次赋值
    其实有个问题是你为什么要设为final,对象声明为final通常只有作为同步锁或者单例,而这两种情况下不会发生这种问题,再其它场合下这种设计方法都是有问题的
      

  9.   

    没完全明白,是这个意思吗?
    public class Test {
        private static final String ttt = aaa();
         
        public static String aaa() throws Exception {
            throw new Exception();
            return "aaa";
        }
    }
      

  10.   

    没完全明白,是这个意思吗?
    public class Test {
        private static final String ttt = aaa();
         
        public static String aaa() throws Exception {
            throw new Exception();//抛异常
            return "aaa";
        }
    }
      

  11.   


    这个方案是不行的。
    编译器提示ttt没有初始化,如果给初值null后,编译器提示final变量不能再次赋值
    其实有个问题是你为什么要设为final,对象声明为final通常只有作为同步锁或者单例,而这两种情况下不会发生这种问题,再其它场合下这种设计方法都是有问题的作为常量,以后只是使用不让更改。
    让语言机制保证访问的安全。
      

  12.   

    你让编译器保证它不被更改,你也一样可以通过某个 getAAA() 方法来保证不被更改嘛,一个单例或纯粹一个普通的 getAAA() 静态方法。总之编译器保证的东西在运行时也不见是不可突破的,比如一个单例的对象我们可以通过序列化再读取的办法复制得到另一个实例,你说这算是什么事呢?这个时候就出现这种设计一致性的问题。只是设计合理,保证程序的一致性要求,其它是不用太在意怎么做到的。
    这个方案是不行的。
    编译器提示ttt没有初始化,如果给初值null后,编译器提示final变量不能再次赋值
    其实有个问题是你为什么要设为final,对象声明为final通常只有作为同步锁或者单例,而这两种情况下不会发生这种问题,再其它场合下这种设计方法都是有问题的作为常量,以后只是使用不让更改。
    让语言机制保证访问的安全。
      

  13.   

    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";
        }
    }
      

  14.   


    只是打个比方,就是说我要定义一个常量成员变量,但赋初始值需要调用一个函数,该函数会抛出异常,该怎么能优雅的解决这个问题。那这个应该能满足你的需求public class Test {
        private static final String ttt = aaa();
         
        public static String aaa() throws Exception {
           if(抛异常条件){
               throw new Exception(异常说明);//抛异常
           }
            return "aaa";
        }
      

  15.   


    只是打个比方,就是说我要定义一个常量成员变量,但赋初始值需要调用一个函数,该函数会抛出异常,该怎么能优雅的解决这个问题。那这个应该能满足你的需求public class Test {
        private static final String ttt = aaa();
         
        public static String aaa() throws Exception {
           if(抛异常条件){
               throw new Exception(异常说明);//抛异常
           }
            return "aaa";
        }
    你确定能编译通过?
      

  16.   


    只是打个比方,就是说我要定义一个常量成员变量,但赋初始值需要调用一个函数,该函数会抛出异常,该怎么能优雅的解决这个问题。那这个应该能满足你的需求public class Test {
        private static final String ttt = aaa();
         
        public static String aaa() throws Exception {
           if(抛异常条件){
               throw new Exception(异常说明);//抛异常
           }
            return "aaa";
        }
    你确定能编译通过?嗯,确实有问题,改好了public class Test {
    private static final String ttt = aaa(); public static String aaa() {
    int i = 0;
    if (i == 0) {
    throw new RuntimeException("异常");// 抛异常
    }
    return "aaa";
    }
    }