服务器之家

服务器之家 > 正文

Java中final变量使用总结

时间:2019-12-21 15:01     来源/作者:junjie

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

复制代码 代码如下:

final double PI = 3.14; 

当在程序中使用PI这个常量时,它的值就是3.14,如在程序中再次对定义为final的常量赋值,编译器将不能接受;
final关键字定义的变量必须在声明时对其进行赋值操作。final除了可以修饰基本数据类型的常量,还可以修饰对象引用。由于数组也可以被用作一个对象引用,所以final可以修饰数组。一旦一个对象引用被修饰为final后,它只能恒定指向一个对象,无法将其改变为另一个对象。一个既是static又是final的字段只占据一段不能改变的存储空间。如下例:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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;//并且使用下划线进行连接;
  private final Test test = new Test();
  private Test test2 = new Test();
  private final int[] a = {1,2,3,4,5,6};
  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();
    //data.VALUE_2++;
    data.test2 = new Test();
    for(int i=0; i<data.a.length; i++)
    {
      //a[i] = 9;
    }
    out.println(data);
    out.println("data2");
    out.println(new FinalData());
    out.println(data);
  }
}

一个被定义为final的对象只能指向唯一一个对象,不可以将它指向其他对象,但是一个对象本身的值确实可以改变的,那么为了使一个常量真正做到不可更改,可以将常量说明为static final. 如下例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import static java.lang.System.out;
import java.util.Random;
public class FinalStaticData {
  private static Random rand = new Random();
  private final int a1 = rand.nextInt(10);
  private static final int a2 = rand.nextInt(10);
   
  public static void main(String[] args) {
    FinalStaticData fdata = new FinalStaticData();//实例化一个对象
    out.println("重新实例化对象调用a1的值:" + fdata.a1);
    out.println("重新实例化对象调用a2的值:" + fdata.a2);  
    FinalStaticData fdata2 = new FinalStaticData();// 实例化新对象
    out.println("重新实例化对象调用a1的值:" + fdata2.a1);
    out.println("重新实例化对象调用a2的值:" + fdata2.a2);
  }
}

重新实例化对象调用a1的值:9 
重新实例化对象调用a2的值:2 
重新实例化对象调用a1的值:1 
重新实例化对象调用a2的值:2 

总结:

定义为final常量不是恒定不变的,将随机数赋予final的变量,可以做到每次运行程序时改变a1的值,但是a2被定义为static final形式,所以内存中为a2开辟了一个恒定的区域,当再次实例化一个FianlStaticData对象时,仍然指向a2这块内存区域,所以a2的值保持不变。

技巧:

在JAVA中定义全局常量,通常使用public static final修饰,这样的常量只能在定义时被赋值。

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
返回顶部