day05-Static-Final
static&final
😚
核心区别:final
修饰类表示该类不可被继承,static
修饰类(仅内部类)表示该内部类不依赖外部类实例即可创建。二者修饰目标和作用完全不同,没有直接可比性。
java.util.Arrays
被声明为final class Arrays
,核心目的是禁止继承,确保其工具类的设计不被篡改。
- 工具类通常只包含
static
静态方法(如sort()
、toString()
),无需创建实例,也不希望被其他类继承后重写方法、破坏功能稳定性。
static 修饰类的场景(仅内部类)
static
不能修饰顶级类(如Arrays
这种直接定义在包下的类),只能修饰内部类(即static inner class
,静态嵌套类),作用是解除对外部类实例的依赖。
- 非静态内部类:必须先创建外部类实例,才能创建内部类实例(内部类隐含持有外部类的引用)。
- 静态内部类:无需外部类实例,可直接通过
外部类.静态内部类
创建实例,更像一个独立的 “顶级类”。
class Outer {
static class StaticInner {} // 静态内部类,可直接 new Outer.StaticInner()
class NonStaticInner {} // 非静态内部类,必须先 new Outer() 才能 new Outer().new NonStaticInner()
}
也就是说为了保证工具类不被修改和破坏,就用final,而static的不依赖外部类就可以创建了。
那对应方法修饰的时候?两者有区别和联系吗?
static 修饰方法:“类级方法”,调用更便捷
final 修饰方法:“不可变方法”,逻辑更安全