最近重头开始看基础的书,对一些基础的概念又有了一些新的理解,特此记录一下
static final修饰的常量:
- 静态常量(static修饰的全部为静态的),编译器常量,编译时就确定其值(java代码经过编译器把.java源文件编译成.class字节码文件.经过jvm解释成机器码)
- 存放于方法区的静态常量池中,在编译时就已经存放
- 如果调用此常量的类并不是定义这个常量的类,那么不会初始化定义这个常量的类,节省了内存资源的开销
1 class Demo{ 2 3 }
class Demo{ private static final int A=1;//当final修饰的变量为成员变量时,必须在声明时赋值,或者在构造方法中赋值. public static void main(String[] args){ System.outprintln(Demo.A);//并不会去加载Demo这个类,减少内存资源 } }
final修饰的常量
- 类加载时确定或者时机更靠后
- 当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值