• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

final关键字

开发技术 开发技术 1周前 (07-20) 8次浏览

1、final数据

在Java中,用来告知一块数据时恒定不变的:

一个永远不会改变的编译时常量

一个在运行时被初始化的值,且不希望被改变

编译时常量:在编译时执行计算式,减轻了一些运行时的负担,这类常量必须时基本数据类型,且需要用final修饰,在这个常量进行定义的时候,必须进行赋值。

修饰变量

# 用final关键字修饰的变量,只能进行一次赋值操作,并且生存期内不可以改变他的值。final修饰的变量可以先声明,后赋值。

final修饰基本类型时,起到常量的作用,基本类型的值不可变。

# final修饰对象引用的时候,使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。但是对象自身可以修改。

#一个既是static又是final的域只占据一段不能改变的存储空间

#当final作用于类的成员变量时,成员变量必须再定义时或者构造器中进行初始化。

#Java允许生成空白final,所谓空白final是指被声明为final但是并没有被初始化,但是再使用之前必须确保初始化。

import java.util.Arrays;
import java.util.Random;
class Value{
    int i;
    public Value(int i){
        this.i = i;
    }
}
public class FinalData {
    private static Random rand = new Random(40);
    private String id;
    public FinalData(String id){
        this.id = id;
    }

    private final int ValueOne = 9;
    private static final int VALUE_TWO = 99;

    public static final int VALUE_THREE = 39;

    private final int i1 = rand.nextInt(20);
    static final int i2 = rand.nextInt(20);

    private Value v1 = new Value(11);
    private final Value v2 = new Value(22);
    private static final Value V3 = new Value(33);

    private final int[] a = {1,2,3,4,5};

    @Override
    public String toString() {
        return "FinalData{" +
                "id='" + id + ''' +
                ", ValueOne=" + ValueOne +
                ", i1=" + i1 +
                ", v1=" + v1 +
                ", v2=" + v2 +
                ", a=" + Arrays.toString(a) +
                '}';
    }

    public static void main(String[] args) {
        FinalData fd1 = new FinalData("fd1");
        //fd1.id;
        //fd1.ValueOne++;
        //fd1.v2.i;
        System.out.println(fd1);
    }
}

 

final关键字

2.final修饰方法参数

编写方法时,可以在参数面前添加final关键字,他表示在整个方法中,不能改变参数的值。也就是说不能改变参数的值,但是可以改变引用类型参数的对象的值。同时,即使没有final的修饰,参数的改变也不会影响到方法外的变量。

class Test{
   public int test(final int i){
       return i + 1;
   }
}

//仅仅可以读取i,不能改变

final关键字

3.final修饰方法

final关键字修饰方法时,表示该方法不可以被重写。类中所有的private方法都隐式的指定为是final的,由于无法在类外使用private方法,所以也无法覆盖他。

4.final修饰类

final修饰的类无法被继承。且类中所有的成员方法都会被隐式的定义为final

5.final的优点

5.1final关键字提高了性能。JVM和JAVA应用都会缓存final变量

5.2final变量可以安全的在多线程的环境下进行共享,而不需要有额外的同步开销

5.3在使用匿名内部类的时候所有变量都是final变量

 

static和final区别

1.static修饰的字段在类加载过程中的准备阶段被初始化为0或者null,之后再初始化阶段才会被赋予代码中设定。

2.final修饰的字段再运行时被初始化,一旦赋值,便不能修改。

详细理解可以看我static的博客。


程序员灯塔
转载请注明原文链接:final关键字
喜欢 (0)