Java之final注意事项

final注意事项

final的单次赋值特性

一旦赋值就不能够改变,就连自己赋值都不行!以下代码报错。

final String str = "a";

str = str;

 

final与引用变量

final修饰的基本类型变量是指的值不能发生改变,而final修饰的引用类型的值是指地址不变。所以以下代码成立。

final int[] arr = { 2, 6, 9, 4, 5 };

arr[2] = 15;

final变量与方法的调用

这个和普通方法的传值过程一样:都是传递一个副本。以下代码1的结果依然是10。

public static void main(String[] args) {

int j = 10;

plus(j);

System.out.println(j);// 1

}

 

public static void plus(int i) {

i++;

System.out.println(i);// 2

}

 

 

除此之外,方法在参数列表上可以控制变量的特性,2处的结果为11。也就是说如果将plus代码改为以下则会报错,因为在plus的局部,i是一个final的变量。

public static void plus(final int i) {

i++;

System.out.println(i);

}

 

 

非静态final变量的加载

非静态final变量必须在创建对象之前做到初始化。

有以下三种可能:

①直接赋值

②在构造块中

③在构造器中

请看以下几种情况:

这张图出现了问题因为在调用无参构造器的时候final变量没有进行初始化。以下的几张图会修正这个错误。

二次赋值造成的错误。

 

在构造器中都进行初始化。

调用构造器间接初始化。

在构造快中初始化。

 

静态final变量的加载

在类加载完成之前初始化

①直接赋值

②在静态块中赋值

常见final变量

Arr.length和System.in|out这两个值表面是null的final常量但是在底层却不是以常量的形式存在的。

 

猜你喜欢

转载自blog.csdn.net/qq_34993631/article/details/81478370
今日推荐