• 面试题04-final


    final

    • 修饰类:表示类不可以被继承
    • 修饰方法:表示方法不可被子类覆盖
    • 修饰变量:表示变量一旦被赋值就不可以更改它的值

    (1)修饰成员变量

    • 如果final修饰的是类变量(static修饰),只能在静态初始化块中指定初始值或者声明该变量时指定初始值。
    • 如果final修饰的时成员变量,可以在非静态初始化块、声明该变量或者构造器中执行初初始值。

    (2)修饰局部变量
    系统不会为局部变量进行初始化,局部变量必须由程序员显示初始化。因此使用final修饰局部变量时,即可以在定义时指定默认值,也可以不指定默认值,而在后面的代码中对final变量赋初值(仅一次)

    public class Demo {
        final static int a = 0;
        /*
        * final static int a;
        * static{
        *   a = 0;
        * }
        * */
    
        final int b = 0;
        /*
        * final int b;
        * {
        *   b = 0
        * }
        * */
        
        public static void main(String[] args) {
            final int local;
            local = 1;
        }
    }
    

    (3)修饰基本类型数据和引用类型数据

    • 如果是基本数据类型(byte,short,int,long,float,double,boolean,char)变量,则其数值一旦在初始化之后不能更改
    • 如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象,(但值可以改变)
    public static void main(String[] args) {
        final int local;
        local = 1;
    
        final char[] strArr = {'1','2','3','4'};
        char[] strArr1 = {'5','6','7','8'};
        strArr[2] = '0';
        //strArr = strArr1;
    
    }
    

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

    • 内部类和外部类处于同一级别,内部类不会因为定义在方法中随着方法的结束而销毁;
    • 当外部类的方法结束时,局部变量就会销毁,但是内部类还存在;为了让内部类可以继续访问这个变量,就让原来方法中局部变量复制一份作为内部类的成员变量;
    • 但是将方法的局部变量复制为内部类的成员变量时,必须保证两个变量是一样的,这时候就需要使用final,对其进行初始化后不再去修改这个变量,这样就保证了内部类的成员变量和方法的局部变量的一致性。
  • 相关阅读:
    35 个手机和Web应用开发图标集
    20个创意404错误页面设计的启示
    31个不同种类的网站免费滑块巨大集合(PSD文件)
    18个伟大的搜索引擎设计者能够找到高品质的免费图标
    50 个独家免费图标集下载
    C语言对结构体何时用> , 何时用.
    GNU make manual 翻译(一)
    PostgreSQL 的 语法分析调用关系
    GNU make manual 翻译(二)
    PostgreSQL 的 target_list分析(七)
  • 原文地址:https://www.cnblogs.com/jsit-dj-it/p/15450286.html
Copyright © 2020-2023  润新知