3-6、final

语雀原文链接

1、final关键字

  • final是最终的意思,在java中,final是一个关键字,它可以被用来修饰局部变量、类、成员变量、成员方法。

2、final修饰局部变量

2-1、基本数据类型

  • 该变量必须在使用之前赋值,且只能被赋值一次
  • final修饰局部变量,在定义时该变量可以不被直接初始化,但是在使用该变量之前,该变量必须完成初始化,否则报错!
        final String a = "123";
        // 报错,无法为最终变量a分配值
        a = "abc";

        final int b;
        // 报错,可能尚未初始化变量b
        System.out.println(b);

        // final修饰局部变量,在定义时该变量可以不被直接初始化,但是在使用该变量之前,该变量必须完成初始化,否则报错!
        final boolean c;
        c = true;
        System.out.println(c);

2-2、引用数据类型

  • 当final修饰引用数据类型(类、接口、数组)的变量,则引用变量所指向的对象(即该变量所存放的地址值)不能更改,但是该对象的内容(即地址值上存储的内容)可以更改!!
        final int[] arr = new int[]{1,2,3};
        arr[0] = 1;
        // 报错 无法为最终变量arr分配值
        arr = null;

3、final修饰类

  • 修饰类:这个类没有子类(不能被继承,俗称“断子绝孙类”),但是该类可以有父类,可被实例化
public final class Animal {

}

// 报错,无法从最终Animal进行继承
public class Dog extends Animal{

}

4、final修饰方法

  • 修饰方法:这个方法不能被子类重写
public class Animal {

    public final void eat(){

    }
}

public class Dog extends Animal{

    // Dog中的eat()无法覆盖Animal中的eat()
    // 被覆盖的方法为final
    public void eat(){

    }
}

5、final修饰成员变量

  • final修饰成员变量:该成员变量必须在其所在类对象创建之前被初始化(且只能被初始化一次)
public class Dog{

    // 报错 ,变量 name 未在默认构造器中初始化
    public final String name;
}
  • 初始化有三种方式

方式1

  • 直接声明+赋值
public class Dog{

    public final String name = "jack";
}

方式2

  • 在构造方法中初始化
public class Dog{

    public final String name;

    public Dog() {
        name = "jack";
    }
}

方式3

  • 在构造代码块中将其初始化(赋值)
public class Dog{

    public final String name;

    {
        name = "jack";
        System.out.println("构造代码块");
    }

    public Dog() {
        System.out.println("Dog()");
    }
}

猜你喜欢

转载自blog.csdn.net/sinat_35615296/article/details/134967738
3-6