B类继承A类,相当于对A类的功能进行扩展,如果不希望对A类进行扩展,可以给A类加final关键字,这样的话,A类就无法继承了。
源代码中String就是没有子孙的
结论:final修饰的类无法被继承
二、final修饰的方法所以final修饰的方法无法覆盖和重写。
三、final修饰的变量 (1)局部变量无法为最终变量进行赋值了。
final修饰的变量只能赋一次值。
final修饰的变量一旦赋上值就不能再重新赋值了。
(2)fina修饰的变量如果这个变量是一个"引用"会怎么样?解析:s2里面最初分配了0x123,然而你再给final进行赋值就不行了,因为final修饰的变量只能赋一次值。
final修饰的引用:该引用只能指向1个对象,并且它只能永远指向该对象。并且该方法执行过程中,该引用指向该对象之后,该对象不会被垃圾回收期回收,直到当前方法结束,才会释放空间。
对象不能修改,里面的数据能修改吗?
可以的,虽然指向的对象不能修改,但是对象里面的数据可以修改。
内存图
(3)fianl修饰实例变量
变量age没有初始化,所以sun公司,由final修饰的实例变量,系统不管赋默认值,要求程序员必须手动赋值。
只要赶在系统赋默认值之前赋值就行。
系统赋默认值是在构造方法执行的时候赋值。
所以这样也是可以。
总结:final修饰的实例变量,系统不负责赋默认值,赋值要么在变量后面写上,要么在构造方法里面写。
四、final修饰常量
public class FinalTest04{
public static void main(String [] args){
}
}
class Chinese{
//身份证号
String idCard;
//姓名,对象不同姓名不一样
String name;
//国家的值是一个固定值:“中国”
//实例变量在堆中,一个对象一份。100个对象100份。
//实例变量既然使用final修饰了,说明该实例变量不会随着对象的变化而变化。
//该实例变量前面应该添加:static关键字,变为静态的,存储在方法区
static final String country="中国";
}
最终结果:
static final联合修饰的变量称为"常量"。常量名建议全部大写,每个单词之间采用下划线衔接。
常量:实际上常量和静态变量一样,区别在于:常量的值不能变,常量和静态变量,都是存储在方法区,并且都是在类加载时初始化。
五、总结
(1)final修饰的类无法继承
(2)final修饰的方法无法覆盖
(3)final修饰的变量只能赋一次值。
(4)final修饰的引用一旦指向某个对象,则不能再重新指向其他对象,但该引用指向的对象内部的数据时可以修改的。
(5)final修饰的实例变量必须手动初始化,不能采用系统默认值。
(6)final修饰的实例变量一般都和static联合使用,称为常量。
赵晓东-Nastu
原创文章 175获赞 38访问量 4万+
关注
私信
展开阅读全文
作者:赵晓东-Nastu