关于static与final的区别
前天面试时被面试官问懵了几个问题,对本来非常熟悉的知识产生了怀疑。总结还是自己基础不扎实,特地整理清楚问题。by:colonel
一、对于类
1、final修饰的类不可以被继承,类内部的方法也不可能被覆盖,java中基本数据类型包装类如String,Int
2、static修饰的类暂且不考虑
二、对于变量
1、对于final:其可以修饰成员变量,可以修饰局部变量。同时其可以修饰基本数据类型变量,可以修饰引用类型变量。
成员变量(可以被继承):(1)基本数据类型:变量值的存储地址与存储的值一旦被赋值均不可再改变,同时声明时可以不赋值,但是在初始化时必须被复制(即在构造函数中赋值)。(2)、引用类型变量:(此时的变量即为对象的引用)此时该引用值(内存地址)不可再改变,但是内存中的内容是可以改变的。
局部变量:(1)基本数据类型:声明时可不必赋值,在使用时赋值即可
(2)引用类型变量:修饰引用类型变量与修饰成员变量中的引用类型相同。
2、static,只可以修饰成员变量。(1)基本类型变量:存储在永久方法区内存地址不再改变,但是其值可以改变。(2)引用类型变量:同基本类型变量。
子类继承了父类的static变量,并且该变量的存储地址(内存地址)都不改变。
三、对于方法
1、final修饰:子类可以继承该方法,但是不可以重写该方法。也不可以被覆盖。为了保持该方法的完整性与特殊的目的。
2、Static修饰:子类可以继承父类的静态方法,用过父类名称直接调用。子类不可以重写父类中的静态方法。若有一个和父类中方法相同的静态方法,那么这两个方法也毫无关系,他们分别属于自己的类。