欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

每日面试三题-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) 修饰基本数据类型数据与引用类型数据

  • 如果是基本数据类型的变量,则其数据一旦在初始化之后不能更改;
  • 如果是引用类型的变量,则在对其初始化之后便不能再让其指向另外一个对象(也就是地址值不能进行改变)。但是引用的值可以变。典型案例就是数组
    每日面试三题-day02

为什么局部类和匿名内部类只能访问局部final

  1. 首相编写局部内部类的时候局部内部类会生成自己的class文件 如Test.class Test1.class
  2. 当外部类销毁的时候,局部内部类依然存在但是外部,当时内部类引用了外部类的变量,但是外部类销毁后内部类无法获取到变量,JDk会在对外部类的变量进行克隆到内部类一份,为了保证一致所以对外部类的变量必须使用final修饰来保证一致性。