static关键字
static本身是一个修饰符,可以修饰变量、方法、内部类、代码块。静态是从类的层面来看的,已经超越了对象。
静态变量
- 定义: static修饰变量那么这个变量我们就称之为静态变量,又称为成员变量或者类变量。
- 特点: 静态变量随着类的加载而加载到了方法区中的静态区,并且在静态区中自动赋予了一个默认值。静态变量先于对象而存在,所以静态变量可以通过类名来调用,也可以通过对象来调用。该类产生的所有的对象实际上存的是该静态变量在静态区中的地址,静态变量是被所有对象所共享的。
- 优点:
使属性私有化—隐藏信息,实现细节。
使属性值更符合要求—可以对成员进行更精确的控制。
提高了代码的安全性—类内部的结构可以自由修改
良好的封装能够减少耦合。 - 静态内存流程
静态方法
- 定义: static修饰方法就叫静态方法,也叫类方法。
- 特点: 在类加载的时候加载到了方法区中的静态区,只是存储在静态区,在方法被调用的时候到栈内存中执行。静态区中的元素不归属于某一个对象而是归属于类。静态方法先于对象而存在的,所以静态方法可以通过类名来调用,也可以通过对象来调用。
注意: 类只加载一次,是在第一次使用的时候才加载到方法区,而且加载到方法区中之后就不再移除了。
- 注意事项:
不可以:
静态变量可以定义到静态方法中吗?
静态方法中可以直接调用本类中的非静态方法吗?
在主函数中可以使用this和super吗?
静态方法可以重写(方法的覆盖)吗?
可以:
静态方法可以存在方法签名完全一致的静态方法吗?
静态方法可以重载吗?
final关键字
Final可以修饰数据、方法和类。
常量
- 定义: 当final修饰数据(基本类型和引用类型)的时候,表示这个变量的值不可变,称之为常量。终其一生只能赋值一次。
在Java中所说的常量往往是指静态常量。因为实质上只有静态常量才是独有的一个。 - 特点:
a 常量在定义好之后不可改变,final固定的是栈内存中的数值。
b 常量可以作为参数传递。
c 对引用类型而言,final固定的是其在栈中的地址不可变。
d 成员常量只要是在对象创建完成之前(构造方法/函数执行结束之前)赋初始值即可。
e 静态成员常量(static final)只要在类加载完成之前给值即可,而且只能在静态代码块中赋值。
最终方法
- 定义: final修饰方法的时候,这个方法就是最终方法。
- 特点:
最终方法不可以被重写,可以重载,可以被继承。
静态方法可以被final修饰。
最终类
- 定义: final修饰类那么这个类就是最终类。
- 特点:
最终类不可以被继承,也不能有匿名内部类形式。
(匿名内部类后续详细说)
由于最终类不能被继承,因此重写也是不可以的。