final 修饰符

来源:互联网 发布:淘宝网管家 编辑:程序博客网 时间:2024/06/02 19:52

 final可用来修饰类,变量,方法。

 1.final修饰变量:final修饰变量时,表示该变量一旦获得了初始值之后就不可改变。

                                1.修饰成员变量: 与普通成员变量不同的是,final成员变量(实例属性和类属性)必须由程序员显示初始化,系统不会对final成员变量进行隐式初始化。

                                 非final修饰的成员变量初始化过程:当进行静态初始化时,可对类属性初始化,当执行普通初始化块,构造器时可对实例属性初始化,因此:非final成员变量的初始值,可以在定义该变量时指定初始值,可以在初始化块,构造器中执行初始化值,否则成员变量的初始值是由系统自动分配的初始值。

                                  final修饰的类属性,实例属性指定初始值的地方:

                                                                                            类属性:静态初始化块,声明该属性时指定初始值。

                                                                                            实例属性:非静态初始化块,构造器,声明该属性时指定初始化值。

 

2.final修饰局部变量:

                                    1.系统不会对局部变量进行初始化,必须由程序员显示初始化。

                                        如果在定义final变量时没有指定初始值,则可以在后面代码中进行对final变量赋初始值,但只能一次,不能重复赋值,,如果final修饰的局部变量在定义时已经指定默认值,则后面的代码中不能再对该变量赋值。

                                      2.final修饰形参不能被赋值,因为形参在调用该方法时,有系统传入的参数来完成初始化。

                                 

 

3.final修饰基本类型变量与引用类型变量的区别:

                                     1.final修饰基本类型变量时,不能对基本变量重新赋值,因为基本类型变量不能被改变。

                                      2.final修饰引用类型变量时,仅仅保持的是这个引用所引用的地址不会改变,既一直引用同一个对象。但这个对象完全可以改变(对象的属性)

                                       例如: final person p = new person();

                                                            //改变person对象的age属性,合法。

                                                 p.SetAge(23);

                                                 //对p引用重新赋值,不合法。

                                                  p = null;

                                         注意:如果final修饰变量是基本数据类型,且在编译时就可以确定该变量的值,于是把该变量当做常量来处理:常量命名规则:多个有意义的单词连接,所有字符大写,单词之间用下划线分割。

                                                     如果final修饰变量是引用类型,final变量无法在编译时就获得值,而必须在运行时才能得到值如:final  TestClass t = new TestClass();编译时系统不会创建一个TestClass对象赋给 t 变量,所以t不需要当做常量来处理,无需使用常量命名规则。

 

 

4.final方法:

                   1.final修饰的方法不可被重写。

                    2.java提供的Object类有一个final方法:getClass(),因为java不希望任何一个类重写这个方法。

                    3.对于private 方法,仅在当前类中可见,子类无法访问,所以也就无法重写该方法,如果子类中定义了一个与父类private方法有相同方法名,相同形参列表,相同返回值类项的方法,也不是方法重写,只是重新定义了一个方法,因此使用final修饰的一个private 访问权限的方法,依然可以在其子类中定义与该方法有相同方法名,相同形参列表,相同返回值类型的方法。

                    4.final修饰的方法不能被重写但完全可以被重载。

 

5.final类:

                     1.final修饰的类不可有子类,java.lang.Math类就是一个final类,它不可以有子类。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 买音乐会的票过期怎么办 十年多年前被怨错拘留了怎么办 与室友关系闹僵怎么办 开庭后被告威胁我们证人怎么办 开车撞了豪车怎么办 我把人撞了全责怎么办 开车撞伤人没钱赔怎么办 开车撞伤无证驾驶人怎么办 开车把人撞伤了只买交强险怎么办 开车撞伤人赔不起怎么办 如果车撞死人了怎么办 给车撞了跑了怎么办 开车把人撞死了怎么办 开车把人蹭了怎么办 驾照被扣54分怎么办? 驾照被扣了12分怎么办 驾驶证丢失后被扣分怎么办 驾照扣了三十分怎么办 一次被扣了12分怎么办 驾照被扣35分后怎么办 我驾驶证扣了6分怎么办 c1驾照被扣6分怎么办 被扣了6分怎么办 今年扣了6分怎么办 驾照分不够扣了怎么办 被扣6分怎么办罚款15 驾照分数扣36分怎么办 驾照12分不够扣怎么办 驾照b证扣分了怎么办 违章18分不够扣怎么办 b2驾驶证扣11分怎么办 驾照一共扣30分怎么办 驾照扣了100分怎么办 驾照扣40多分怎么办 驾照被扣69分怎么办 驾照被扣200多分怎么办 b2驾照扣了分怎么办 驾驶证在外地被冒用怎么办 身份证被冒用办驾照怎么办 外国人在中国境内死了怎么办 台风来临时航船应该怎么办