前言
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 变量赋值的目的
4、 在构造函数中赋值
因为static变量已经在方法区中存在,所以执行构造函数时可以对static变量赋值
static final变量修饰
1、 直接指定 private static final String firstName = "hello java";
2、 static块赋值,同static修饰,但只能赋值一次
如果只声明不赋值,会报错,这和static不同