[13] static 和 final

时间:2023-03-09 01:21:38
[13] static 和 final

不论是类、属性,还是方法的声明中,都有一个可设置的“修饰符”,它可以实现一些高级特性。

1、static

static被称之为静态的,并不是指不可以修改的意思,而是说它的内存空间是静态的。

1.1 修饰属性

如果某个类的某个属性被static修饰,那么意味着不论创建多少个对象,它们都是共用该属性,不会有各自独立的值。也即是说,凡是被static修饰的属性也好,方法也罢,它是属于类的,不属于某个具体的对象。所以它既可以使用对象调用,也可以直接通过类名调用。

静态属性是类的所有对象共享,就像一个教室(类)可能有20个学生也可能有30个学生(对象),但是老师始终只有一个(静态属性)。

1.2 修饰方法

同理,被static修饰的方法,称之为静态方法,意味着它与实例无关,不论哪个对象调用都执行相同的操作。这也意味着静态方法中不能出现非静态的属性(即属于对象独立的属性)。

说简单一点,静态方法是不通过对象就可以调用,意味着在对象没有创建之前就可以调用,既然对象没创建,对象属性也就不存在,静态方法中还能存在非静态属性吗?显然不能。



2、final

2.1 修饰属性

final修饰属性,那么在定义时就必须直接赋值或者在构造方法中进行赋值,并且后期无法修改。

常见的一些常量就需要用final修饰,如圆周率 static final double  pi = 3.1415926;

final因为修饰的值不能改变,这通常是公用常量,所以很多时候也配合static一起使用。静态常量命名字母全大写,单词间下划线隔离。

2.2 修饰方法

final修饰方法,表示该方法必须有实现代码,且子类不能覆盖该方法。

2.3 修饰类

final修饰类,表示该类不能被定义为接口或抽象类,且不可以被继承。如大名鼎鼎的String类就是一个final类。