final修饰变量的初始化时机

final修饰变量的初始化时机

  • A:final修饰变量的初始化时机

    • 显示初始化
    • 在对象构造完毕前即可

      class Demo03_Final {
          public static void main(String[] args) {
              Demo d = new Demo();
              d.print();
          }
      }
      
      //正确
      class Demo {
          int num = 10;
          public void print() {
              System.out.println(num);
          }
      }
      
      //正确
      class Demo {
          //显示初始化
          final int num = 10;
          public void print() {
              System.out.println(num);
          }
      }
      
      //错误
      class Demo {
          //可能尚未初始化变量num
          //被final修饰的初始化值只能被赋值一次,成员变量的默认初始化值是无效值
          //所以必须得显示初始化值
          final int num;
          public void print() {
              System.out.println(num);
          }
      }
      
      //正确
      class Demo {
          final int num;
          //构造初始化
          public Demo(){
              num = 10;
          }
          public void print() {
              System.out.println(num);
          }
      }
      
      //错误
      class Demo {
          final int num = 10;
          //不能双管齐下
          //无法为最终变量num分配值,被final修饰的只能被赋值一次
          public Demo(){
              num = 10;
          }
          public void print() {
              System.out.println(num);
          }
      }
      

你可能感兴趣的:(面向对象)