Java基础--static,final关键字作用与区别
final
修饰类
- 修饰的类不可以被继承
- 常见的final修饰的类:
- 字符串类:String StringBuilder StringBuffer
- 包装类:Byte Interger Double Short Long Float Character Boolean Void
- 数学工具类:Math StrictMath
- 系统类:System
- 作用:final 修饰类的作用是为了保护封装,使其不可被继承,就不会有多态改变行为的可能。
修饰方法
- 修饰的方法不可以被子类继承重写。
修饰变量
- 修饰基本数据类型,则初始化后该变量的值不可以被修改。
- 修饰引用数据类型,则初始化后该引用不可变,但引用指向的对象内容可以改变。
- 修饰形参:参数在函数内部不可被修改,用于保证数据安全性,避免无意中改动数据带来的问题。
static
修饰代码块:
- 一般用于类的初始化,静态代码块在类的构造函数执行前执行
- 加载顺序:
==父类静态代码块—>子类静态代码块—>父类非静态代码块—>父类构造方法—>子类非静态代码块—>子类构造方法==修饰方法
- static修饰的方法叫做静态方法或者类方法。
- static修饰的方法属于整个类,在类加载的时候就存在且可以被调用,通过类名.方法名()即可调用。
- 静态方法中不能访问类的非静态成员变量和非静态成员方法!
- 静态方法中不能有this与super关键字!
- 被static修饰的函数不可以用abstract修饰,必须实现。
静态方法只能隐藏(hidden),不能重写(override)
- 静态方法只能继承,不能重写。子类中可以定义与父类相同的静态方法,此时只是将父类中的方法隐藏,而不是覆盖它。
- ==隐藏==:父类和子类拥有相同名字的属性或者方法( 方法隐藏只有一种形式,就是父类和子类存在相同的静态方法)时,父类的同名的属性或者方法形式上不见了,实际是还是存在的。
修饰变量
- static修饰的变量叫做静态变量或者类变量。
- 静态变量被所有该类的对象共享,静态变量随着类加载的时候直接分配内存,与实例对象无关。可以用类名直接访问,也可以通过对象访问(不推荐这种方式)。
- 由于共用内存区域的问题,所以在并发场景下直接使用静态变量会有安全问题,正确打开方式是:对修改静态变量的函数加锁。
- static不能修饰局部变量。
修饰常量
1
2
3
4//使用static final关键字修饰常量
static final int a = 100;
static int b = 100;
final int c = 100; - 变量b没有final修饰,故可以被重新赋值,虽然c无法被重新赋值,但程序用完它且不会再用到它的时候就会被自动释放,不再占用内存。
- a使用static final,故存放在静态空间,不会在程序运行时被释放,它永远占着内存直到程序终止,并且不能被修改,表示常量。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.