Java中final变量使用总结
作者:junjie 发布时间:2022-09-29 08:32:00
标签:Java,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修饰,这样的常量只能在定义时被赋值。


猜你喜欢
- Code CacheJVM生成的native code存放的内存空间称之为Code Cache;JIT编译、JNI等都会编译代码到nativ
- 使用场景:自己项目对接多个外部系统,各个外部系统使用的字段并没有统一,所以要根据不同系统动态的输出序列化数据,使适应各个系统的要求实现方式使
- Android内存优化是我们性能优化工作中比较重要的一环,这里其实主要包括两方面的工作:1、优化RAM,即降低运行时内存。这里的目的是防止程
- 转成 Base64 形式的 System.String:string a = "base64字符串与普通字符串互转";
- 本文实例为大家分享了java实现TCP聊天程序的具体代码,供大家参考,具体内容如下服务端代码:package com.test.server
- 本文实例讲述了Java使用备忘录模式实现过关类游戏功能。分享给大家供大家参考,具体如下:一.模式定义备忘录模式,在不破坏封闭的前提下,捕获一
- 环境springboot1.5.9完整代码,内有sql,先建库,在运行sql建表,sql中已插入测试的数据。https://github.c
- 本文实例讲述了JAVA快速排序实现方法。分享给大家供大家参考,具体如下:package com.ethan.sort.java;import
- 克隆方法是原型设计模式中必须使用的方式,它将返回一个与当前对象数据一致的对象。正如其名,犹如一个模子雕刻而出。克隆类型分为两种:浅克隆、深克
- 顺序结构按照代码书写的顺序一行一行执行分支结构if 语句基本语法形式:if(布尔表达式){ //条件满足时执行代码
- 本文介绍了C# 用什么方法将BitConverter.ToString产生字符串再转换回去,分享给大家,具体如下:byte[]
- 本文实例讲述了Android程序启动时出现黑屏问题的解决方法。分享给大家供大家参考,具体如下:关于黑屏:默认的情况下,程序启动时,会有一个黑
- 背景传说里玉皇大帝派龙王马上降雨到共光一带,龙王接到玉皇大帝命令,立马从海上调水,跑去共光施云布雨,但粗心又着急的龙王不小心把海里的鲸鱼随着
- 安装APKpublic class DownLoadApk { public static SharedPreferences shared
- 本文实例为大家分享了Android实现层叠卡片式banner的具体代码,供大家参考,具体内容如下效果图如下:背景由于公司VIP模块项目需要,
- 目录1.跳转控制语句:区分continue和break; * continue:用于循环中,基于条件控制,跳过某次循环体内容的执行
- 一、在学习枚举之前,首先来听听枚举的优点。1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。2、枚举使代码更易于维护,有助于确保
- 前言一说到Socket,想必大家都或多或少有所涉及,从最初的计算机网络课程,讲述了tcp协议,而Socket就是对协议的进一步封装,使我们开
- 记录使用Scroller实现平滑滚动,效果图如下:一、自定义View中实现View的平滑滚动public class ScrollerVie
- 本文实例为大家分享了android view实现横向滑动选择的具体代码,供大家参考,具体内容如下做文字编辑,从网上找来的。Horizonta