Java基础篇——final 、static修饰属性时使用区别总结

496 阅读2分钟

前言

static final这些关键字本来是Java学习中的基础部分,但时候会与其他语言混淆在一起,很多细节容易搞糊涂>︿< 基础的东西还是要掌握得牢固一些才行,所以这次来总结一下final、static、static final修饰属性使用的区别。


不加修饰符的实例属性

这种情况是最基础的,像public String property;如果在构造函数中未赋值,那么JVM会对该对象自动赋值

引用赋值 null,boolean 赋值 false, int 赋值 0,doble 赋值 0.0



其实之前一直不知道boolean会默认赋值为false


final修饰

一旦赋值,不可修改

使用:

1. 直接赋值  public final String property = "hello java"; 

2. 构造函数赋值


注意:static块赋值无效 ,因为不在类加载过程中被载入方法区常量池。之前一直认为只能在声明的时候赋值给final,后来验证后发现可以在构造函数中赋值。


static修饰类属性

1. 直接指定赋值  private static String firstName = "hello java";

2. 未赋值给定时,JVM赋初始值(就是在类加载的验证、初始化过程赋初始值),这和final修饰不同


3. static块中赋值,类加载的初始化过程执行static代码块,达到给static 变量赋值的目的

    private static String firstName;

    static {
        User.firstName = "myLove";
        User.firstName = "Season"; // 可重复赋值
    }

4. 在构造函数中赋值

因为static变量已经在方法区中存在,所以执行构造函数时可以对static变量赋值

    private static String firstName;
    
    public User() {
        User.firstName = "sun";
    }


static final变量修饰

1. 直接指定 private static final String firstName = "hello java";

2. static块赋值,同static修饰,但只能赋值一次


如果只声明不赋值,会报错,这和static不同