(九)static 与 final 关键词的使用
- static关键词的用法
①修饰成员变量,全局使用,在类被加载的时候,就会被执行。
②修饰静态成员方法,且方法中只能纯在静态成员变量;
③static静态代码块 ,类加载时执行。一般用于初始化变量。
注意:当子类继承父类时候,父类中含有static关键词修饰的变量,方法都不能被重写(覆盖)。
如果子类写了一个与父类相同的静态方法,那就不叫覆盖了,而是叫做隐藏。关于这个可以参考下下该文档:静态方法能被子类重写吗?
我的总结就是:当子类“ 重写 ”了父类的静态成员方法,创建对象的时候,若调用的静态方法,那么自会调用父类的成员方法,而调用普通方法,则会调用子类重写的父类的普通成员方法。不过现在好像不能使用实例化对象来调用静态成员方法了,写上了编译也不会通过。
例子如下:
package _03_static和finall关键字;
/**
* @author 刘平远
* @version 创建时间:2019年8月12日 上午11:04:05
* 类说明 :static 关键字的使用
*static 只能修饰成员,不能修饰局部变量
*/
public class test {
//常量不能被修改,一般会用static final修饰,
static final double pi=3.14;
//非静态方法和成员是同时加载的,必须在实例化之后才可以加载
public void hello1() {
System.out.println(num);
System.out.println(name);
}
private String name;//成员变量
static int num;//类变量
//static 静态代码块
//不需要调用,只会执行一次,在类被加载时候,一般用于初始化变量。
static {
System.out.println("这是一个静态代码块!不需要调用");
//name="xxx";//只能写又被static关键词修饰的成员变量。
System.out.println(num);
num++;
}
static void hello() {
//static int c=1;//err 不能使用static 修饰局部变量
//即静态方法只能访问静态成员,且不能使用this,super关键字
//static 方法不能被非静态方法覆盖。
System.out.println("静态方法");
}
public static void main(String[] args) {
//所有类共享num,
//访问方式一:实例化对象.变量名称
test t1=new test();
test t2=new test();
System.out.println(t1.num);
System.out.println(t2.num);
//访问方式二: 直接调用 类名.便改良名称
System.out.println(test.num);
//静态方法 的访问方式也是相同。
hello();
}
}
- final关键词的用法
final意思为最终的,也就是说被他修饰的东西都是最后一次的,即不可更改的。
final可以修饰:
①类:被final修饰的类无法被继承
②变量:不能被重新赋值,无法被更改值。
③方法:当作为父类方法时,被子类继承,在子类中不能重写(覆盖)被final修饰的方法。