每日面试三题-day02
程序员文章站
2022-03-15 21:15:07
...
简述final作用
增加final修饰符就表示这个类、方法、变量是最终的不可被改变的
- 修饰类:表示类不可被继承
- 修饰方法:表示方法不可被子类覆盖,但是可以重
- 载修饰变量:表示变量一旦被赋值就不可以更改它的值
(1) 修饰成员变量
- 如何final修饰的是类变量,只能在静态初始化块中指定初始值或者声明该类变量时指定初始值
- 如果final修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器中执行初始值。
(2)修饰局部变量
系统不会局部变量进行初始化,局部变量必须由程序员显示初始化,因此使用final修饰局部变量时,既可以在定义时指定默认值(后面的代码不能对变量),也可以不指定默认值,而在后面的代码中对final变量赋初始值(仅一次)
public class FinalVal{
final static int a = 0;//将声明的时候就需要赋值 或者静态代码块赋值
static{
a = 0;
}
final int b = 0;//再声明的时候就需要赋值 或代码块中赋值 或者构造器赋值
{
b=0;
}
public static void main(String[] args){
final int localA;//局部变量只声明没有初始化,不会报错,与final无关
localA = 0;//在使用之前一定要赋值
//localA = 1;//但是不允许第二次赋值
}
}
(3) 修饰基本数据类型数据与引用类型数据
- 如果是基本数据类型的变量,则其数据一旦在初始化之后不能更改;
- 如果是引用类型的变量,则在对其初始化之后便不能再让其指向另外一个对象(也就是地址值不能进行改变)。但是引用的值可以变。典型案例就是数组
为什么局部类和匿名内部类只能访问局部final
- 首相编写局部内部类的时候局部内部类会生成自己的class文件 如Test.class Test1.class
- 当外部类销毁的时候,局部内部类依然存在但是外部,当时内部类引用了外部类的变量,但是外部类销毁后内部类无法获取到变量,JDk会在对外部类的变量进行克隆到内部类一份,为了保证一致所以对外部类的变量必须使用final修饰来保证一致性。
推荐阅读
-
C语言面试三道题分享
-
寒假每日一题day7 AcWing 422. 校门外的树(三种写法的区间合并)线段树写法待补
-
【常见笔试面试算法题12续集三】动态规划算法案例分析3 LIS练习题(最长上升子序列)
-
2021/1/13-每日三题第20弹:你这是在玩火 ?你知道什么是外边距重叠吗 ???
-
LeetCode每日一题:3.25三维形体的表面积(八十二)
-
2020/12/29-每日三题第5弹:iframe真的有那么好吗,xhtml和html又有什么区别呢???
-
LeetCode 刷题 [C++] [面试题 17.09]. 第 k 个数 (动态规划 + 三指针)
-
【每日一题】怎么让一个 div 水平垂直居中?(三种常用方式)
-
分享今天面试的三道题
-
2020/12/31-每日三题第7弹:没有对象的跨年是熬夜,你知道Canvas 和 SVG有什么区别吗???