Java中final变量使用总结

 更新时间:2015年06月12日 09:01:14   投稿:junjie  
这篇文章主要介绍了Java中final变量使用总结,final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值,通常final定义的变量为常量,需要的朋友可以参考下

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

复制代码 代码如下:

final double PI = 3.14; 

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

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修饰,这样的常量只能在定义时被赋值。

相关文章

  • token工作机制及原理附Java生成token工具类

    token工作机制及原理附Java生成token工具类

    这篇文章介绍了token工作机制及原理,内附Java生成token工具类Demo。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • IDEA快速显示Run DashBoard的图文详解

    IDEA快速显示Run DashBoard的图文详解

    这篇文章主要介绍了IDEA快速显示Run DashBoard的图文详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • java数字图像处理基础使用imageio写图像文件示例

    java数字图像处理基础使用imageio写图像文件示例

    这篇文章主要介绍了Java 2D的图像处理API,文章讨论和提及的API都是基于JDK6的,Java中写一个图像文件使用ImageIO对象即可,下面看代码吧
    2014-01-01
  • Spring Security系列教程之会话管理处理会话过期问题

    Spring Security系列教程之会话管理处理会话过期问题

    会话过期,是指当用户登录网站后,较长一段时间没有与服务器进行交互,将会导致服务器上的用户会话数据(即session)被销毁。这篇文章主要介绍了Spring Security系列教程之会话管理处理会话过期问题,需要的朋友可以参考下
    2021-10-10
  • Springboot+Flowable 快速实现工作流的开发流程

    Springboot+Flowable 快速实现工作流的开发流程

    这篇文章主要介绍了Springboot+Flowable 快速实现工作流的开发流程,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Java程序图形用户界面设计之按钮与布局

    Java程序图形用户界面设计之按钮与布局

    图形界面(简称GUI)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受,本篇精讲Java语言中关于图形用户界面的按钮和布局部分
    2022-02-02
  • idea插件在线和离线安装方法

    idea插件在线和离线安装方法

    这篇文章主要介绍了idea插件在线和离线安装方法,文末补充介绍了IntelliJ IDEA 安装mybaits当前运行sql日志插件在线与离线安装方法
    ,感兴趣的朋友一起看看吧
    2023-12-12
  • Mybatis分步查询的实现示例

    Mybatis分步查询的实现示例

    本文主要介绍了Mybatis分步查询的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • vue vxe-table 实现财务记账凭证的方案

    vue vxe-table 实现财务记账凭证的方案

    使用 vxe-table 实现财务记账凭证非常简单,实现在线实时编辑的记账凭证、自动合计金额等,这篇文章主要介绍了vue vxe-table 实现财务记账凭证的方案,需要的朋友可以参考下
    2024-12-12
  • Struts2中接收表单数据的三种驱动方式

    Struts2中接收表单数据的三种驱动方式

    这篇文章简单给大家介绍了Struts2中接收表单数据的三种驱动方式,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-07-07

最新评论