- static关键字,可以修饰类的成员变量,类的成员方法以及static代码块来优化程序性能
(a)static关键字声明的成员变量,成员方法都属于类,不再属于单个的类对象,而且被所有的类对象共享。当类加载时就加载,且只加载一次,且优于类对象存在。可以并且建议通过类名调用,且静态变量,静态方法存放于Java内存区域中的方法区。调用方法:类名.静态变量名 类名.静态方法名
(b)static关键字声明的类代码块在类中方法外,静态代码块在非静态代码块之前执行(顺序为:静态代码块->非静态代码块->构造方法)该类不管创建多少对象,静态代码块只执行一次。
- final关键字,可以修饰局部变量,成员变量,方法,类,甚至方法参数。
(a)final关键字声明的变量,称之为常量,必须对该值进行初始化操作。
* 当final修饰基本数据类型时,这个值一旦被初始化,就不能再改变。
* 当final修饰引用数据类型时,这个值被初始化后,不能再改为指向其他对象,但所指向的对象的内容可以改变。
* 当final修饰成员变量时,必须在声明的同时赋值,或者在构造方法中赋值,不可以之后赋值。
(b)final关键字声明方法时,该方法为最终方法,且该方法只能被子类继承,不能被子类重写。
(c)final关键字声明类时,该类为最终类,不能被继承,该final类的所有成员方法都被隐式的指定为final方法。
(d)final关键字声明方法参数时,在该方法内部,不能修改参数的值
-
static和final关键字的区别:
* static变量在创建赋值后,可以修改。final变量在创建赋值后,不能修改。
* static和final都可以修饰类,方法,成员变量。
* static可以修饰类的代码块,final不可以。
* static不可以修饰方法内的局部变量,final可以。
* static修饰的成员变量,方法都属于类,不属于单个的类对象,而是被类中所有对象共享。且会在类加载时就加载,且只加载一次,优先于类对象存在。
* final修饰的变量,方法,会在每一次实例化对象时加载。 -
static final 关键字的应用(目前只考虑修饰变量的情况):
- 当static final 修饰变量时,称之为静态常量。
- 由于同时使用static和final来修饰变量,该静态常量会随着类的加载而加载,且只加载一次。
- 静态常量的值不可以更改。