java吧 关注:1,258,607贴子:12,752,052

求大神解惑,这个问题困扰很久了

只看楼主收藏回复

java中被static修饰的final常量为什么不能在动态语句块中赋值?
它既不能在构造器中赋值也不能在动态块中赋值。只能在静态语句块中或者声明的时候赋值
而final常量只能在构造器中、声明中或者动态语句中赋值
求详细原因,困扰很久了,跪求


IP属地:浙江1楼2014-09-03 00:07回复
    final在申明的时候就要赋值,之后任何地方都不可以修改,只能使用。
    ✎﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍
    - 多少人曾在你
         生命中来了又还 -
    - 可知一生有你
         我都陪在你身边 -


    IP属地:河南来自Android客户端2楼2014-09-03 00:36
    回复
      广告
      立即查看
      public class TestFinal {
      private static final int num;
      private static int counter = 100;
      // static{
      // num = 100;//可以在这里进行赋值
      // System.out.println("static"+num);
      // }
      //{
      // num = 200;//不能在这里赋值给 num赋值,为什么??????
      // System.out.println("dymatic"+num);
      // }
      public TestFinal(){
      //num = 200;//不能在这里赋值给 num赋值,为什么??????
      System.out.println("conducts");
      }
      public int getNum(){
      return num;
      }
      public static void main(String[] args) {
      TestFinal ts = new TestFinal();
      System.out.println(ts.getNum());
      System.out.println(TestFinal.counter);
      }
      }


      IP属地:浙江3楼2014-09-03 00:53
      回复
        final
        修饰常量不可以被更改 第一个是初始化负值 所以可以


        来自Android客户端4楼2014-09-03 01:13
        收起回复
          因为初始化


          IP属地:上海来自Android客户端5楼2014-09-03 08:15
          回复
            它是常量,在声明的时候就要赋值,而且只能赋值一次


            IP属地:浙江来自Android客户端6楼2014-09-03 09:06
            回复
              我的问题是,static修饰的final,如果不在静态语句块中赋值,在动态语句块中为什么不能进行赋值?


              IP属地:浙江7楼2014-09-03 10:32
              回复


                IP属地:浙江8楼2014-09-03 11:50
                回复
                  广告
                  立即查看
                  只有静态方法,才能访问静态变量 就比如说main方法,想要直接调用某一个全局变量,要在这个变量前面加static才行!


                  IP属地:江苏10楼2014-09-03 12:23
                  收起回复
                    final是不可以更改的


                    来自Android客户端11楼2014-09-03 12:28
                    收起回复
                      有问必答不知道


                      来自Android客户端12楼2014-09-03 12:49
                      回复
                        如果换成这样,是可以的
                        public class Test {
                        private final int num;
                        private static int counter = 100;
                        {
                        num = 200;//这样是可以的
                        System.out.println("dymatic"+num);
                        }
                        public Test()
                        System.out.println("conducts");
                        }
                        public int getNum(){
                        return num;
                        }
                        public static void main(String[] args) {
                        Test ts = new Test();
                        System.out.println(ts.getNum());
                        System.out.println(Test.counter);
                        }
                        }


                        IP属地:浙江13楼2014-09-03 12:52
                        回复
                          来个大神解惑一下


                          IP属地:浙江14楼2014-09-03 12:56
                          回复
                            没人么?


                            IP属地:浙江15楼2014-09-03 14:26
                            回复