static、final和常量设计
- static
(可作用于变量、方法、类、匿名代码块)
静态变量:只依赖于类存在,无论创建多少个对象,都共享这一个static变量
静态方法:只能使用静态变量,禁止引用非静态方法。可以使用类.方法直接来引用
static块:只执行一次,与构造函数之间的运行顺序:static块→匿名块→构造函数 - 单例模式(单态模式,singleton)
限定某一个类在整个程序运行过程中,只保留一个对象
采用static來共享对象实例 |
---|
采用private來创建,保证外部不调用 |
-
final
1.可修饰:类、方法、字段
2.用final修饰的类不可以被继承
3.如果父类中如果有final方法,子类是不可以被重写的
4.final一个变量,不能再次被赋值,如果是对象实例,就是不能修改其指针。 -
常量设计
public static final PI_NUMBER
(接口中定义的变量默认是常量)
1.常量池(相同类型的值只存储了一份,省内存,共享访问):为基本类型的包装类都建立了常量池,同样为字符串常量也建立了常量池,超过常量范围的不会进入常量池
基本类型 | 常量范围 |
---|---|
Boolean | true、false |
Byte | -128~127 |
Short | -128~127 |
Integer | -128~127 |
Long | -128~127 |
Character | 0~127 |
Float、Double | 无常量 |
常量式赋值创建放在栈内存中(容量小,访问快)
new对象创建,放在堆内存中(容量大,访问慢)
5. 不可变对象和字符串
StringBuffer | 同步,线程安全,修改快速 |
StringBuilder | 不同步,线程不安全,创建更快 |