final关键字修饰变量和初始化时机

1、final修饰变量
  • final修饰基本类型:被final修饰的变量复制过后便不能在被修改,一旦修改就报错
    (变量标识的空间里保存的就是具体内容,而不是一个地址,所以基本类型不能再改变,一旦改变就是变量本身改变了不符合final关键字)
  • final修饰引用类型:final修饰引用类型表示该引用指向的对象固定了,但是对象的内容是可以改变的(final实际修饰的是栈上的一个引用值,这个引用代表了对象,只要不将这个引用重新赋给别的对象都不会改变,对象里的内容是可以改变的)
2、final的初始化时机
  • 被final修饰额变量只初始化一次
  • 在构造方法完毕前(对于非静态的常量,静态的在类加载的时候就已经初始化)

eg:

class Demo{
   // int num = 10;
   //final int num2 = 20;
    
    int num = 10;   
    final int num2; //这里num2还没有赋值,所以这里不会报错
    {
        num2 = 88;//构造代码块先于构造方法,给num2赋值,也不会报错
    }
    public Demo(){  //由于构造代码块优先于构造方法,此时再次初始化num2就报错
        num = 100;
        num2 = 200; //无法为最终变量赋值
    }
}
class FinalTest2{
    public static void mian(String[] args){
        Demo d = new Demo();
        System.out.println(d.num);
        System.out.println(d.num2);
    }
}
发布了52 篇原创文章 · 获赞 6 · 访问量 1459

猜你喜欢

转载自blog.csdn.net/qq_40488936/article/details/103596045