Java中的final变量

final关键字可用于变量声明,一旦该变量被指定,就不可以再改变该变量的值。通常,由final定义的变量为常量。

final关键字定义的变量必须在声明时对其进行赋值操作,通过以下示例来说明final关键字:

import static java.lang.System.out;
import java.util.Random;

class Test{
	int i = 0;
}
public class FinalData {
	static Random rand = new Random();
	private final int VALUE_1 = 9;//声明一个final常量
	private static final int VALUE_2 = 10;//声明一个final、static常量
	private final Test test = new Test();//声明一个final引用
	private Test test2 = new Test();//声明一个不是final的引用
	private final int[] a = {1,2,3,4,5,6};//声明一个定义为final的引用
	private final int i4 = rand.nextInt(20);
	private static final int i5 = rand.nextInt(20);
	public String toString() {
		return i4+" "+i5+" ";
	}
	public static void main(String args[]) {
		FinalData data = new FinalData();
		//data.test = new Test();
		//可以对指定为final的引用中的成员变量赋值
		//但不能将定义为final的引用指向其他引用
		//data.VALUE_2++;
		//不能改变final定义的常量
		data.test2 = new Test();//可以将没有定义为final的引用指向其他类
		for(int i =0;i<data.a.length;i++) {
			//a[i] = 9;//不能对定义为final的数组进行赋值
		}
		out.println(data);
		out.println("data2");
		out.println(new FinalData());
		out.println(data);
	}
}
/*输出结果如下:
1 13 
data2
9 13 
1 13 
*/

在上述示例中,被定义的final的常量定义时需要使用大写字母命名,并且中间使用下划线进行连接,这是Java中的编码规则。

我们知道一个被定义为final的对象引用只能指向唯一一个对象,不可以将它再指向其他对象,但是一个对象本身的值却可以改变,为了使一个常量真正做到不可更改,可以将常量声明为static final,示例如下:

import java.util.Random;
import static java.lang.System.out;

public class FinalStaticData {
	private static Random rand = new Random();//实例化一个Random类对象
	//随机产生0-10之间的随机数赋予定义为final的a1
	private final int a1 = rand.nextInt(10);
	//随机产生0-10之间的随机数赋予定义为static final的a2
	private static final int a2 = rand.nextInt(10);
	public static void main(String args[]) {
		FinalStaticData fdata = new FinalStaticData();//实例化一个对象
		//调用定义为final的a1
		out.println("重新实例化对象调用a1的值:"+fdata.a1);
		//调用定义为static final的a2
		out.println("重新实例化对象调用a2的值:"+fdata.a2);
		//实例化另一个对象
		FinalStaticData fdata2 = new FinalStaticData();
		out.println("第二次重新实例化对象调用a1的值:"+fdata2.a1);
		out.println("第二次重新实例化对象调用a2的值:"+fdata2.a2);
	}
}
/*输出结果如下:
重新实例化对象调用a1的值:0
重新实例化对象调用a2的值:1
第二层重新实例化对象调用a1的值:5
第二层重新实例化对象调用a2的值:1
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值