final变量

开发工具与关键技术:MyEclipse 10/Java
作者:吴永旗
撰写时间: 2019年06月16日
Final关键字可以用于变量声明,一旦该变量被设定,就不可以再改变该变量的值,通常,由final定义的变量为常量。例如在类中定义PI值,可以使用语句:final double PI=3.14;
当在程序中使用到PI这个常量时,他的值就是3.14,如果在程序中再次对定义为final的常量赋值时,编译器将会不会接受。
Final关键字定义的变量必须在声明时对其进行赋值操作。Final除了可以修饰基本数据类型常量,还可以修饰对象引用。由于数组可以被看作一个对象引用,所以final可以修饰数组,一旦一个对象引用被修饰为fianl后,它只能恒定指向一个对象,无法将其改变以指定另一个对象。一个即staic又是final的字段只占据一段不能改变储存空间,为深入了解final关键字,看下面实例。
(1) 创建一个Test内部类,并定义各种类型的final变量。
package com.gx.vo;
import java.util.Random;
class Test {
int i=0;
}
public class FinalDate{
static Random rand=new Random();//实例一个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 text2=new Test();//声明一个不是final引用
private final int[] a={1,2,3,4,5,6};
private final int ia=rand.nextInt(20); //随机产生0~20之间随机数
private static final int ib=rand.nextInt(20);
public String toString(){
return ia+""+ib+"";
}
public static void main(String[] args) {
FinalDate date=new FinalDate();
date.test=new Test();
//可以对指定为final的引用中的成员变量赋值
//但不能将定义为final的引用指向其他引用
date.VALUE_2++;
//不能改变定义fianl的常量值
date.text2=new Test();//可以将没有设定为final的引用指向其他引用
for (int i = 0; i < date.a.length; i++) {
a[i]=9;//不能定义为final的数组赋值,出错
}
System.out.println(“date----”+date);
System.out.println(“date2–”+new FinalDate());
System.out.println(“date----”+date);
}
}
在这里插入图片描述
本实例中,被定义为final的常量定义时需要使用大写字母命名,并且中间要使用下滑线连接,这是java中编写规定。同时定义为fianl的数据无论是常量,对象引用还是数组,在主函数中都不可以被改变
(2) 一个被定义为final的对象引用只能指向唯一 一个对象,不可以将它再指向其他对象,但是一个对象本身的值,却是可以改变的,那么为了使一个常量真正做到不可更改,可以将常量声明为static final。下面验证如下;
public class FinalDate{
private static Random rand=new Random();//实例一个random对象
private final int a1=rand.nextInt(10);//随机产生0~10之间的随机数赋予定为finala1
private static final int a2=rand.nextInt(10);//随机产生0~10之间的随机数赋予定为finala2
public static void main(String[] args) {
FinalDate date=new FinalDate();
System.out.println(“重新实例化对象调用a1的值”+date.a1);
System.out.println(“重新实例化对象调用a2的值”+date.a2);
//实例化另一对象
FinalDate date2=new FinalDate();
System.out.println(“重新实例化对象调用a1的值”+date2.a1);
System.out.println(“重新实例化对象调用a2的值”+date2.a2);
}
}

Static final与final定义数据区别如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值