Java中final變量使用總結(jié)
final關(guān)鍵字可用于變量聲明,一旦該變量被設(shè)定,就不可以再改變該變量的值。 通常final定義的變量為常量。如:
final double PI = 3.14;
當(dāng)在程序中使用PI這個(gè)常量時(shí),它的值就是3.14,如在程序中再次對定義為final的常量賦值,編譯器將不能接受;
final關(guān)鍵字定義的變量必須在聲明時(shí)對其進(jìn)行賦值操作。final除了可以修飾基本數(shù)據(jù)類型的常量,還可以修飾對象引用。由于數(shù)組也可以被用作一個(gè)對象引用,所以final可以修飾數(shù)組。一旦一個(gè)對象引用被修飾為final后,它只能恒定指向一個(gè)對象,無法將其改變?yōu)榱硪粋€(gè)對象。一個(gè)既是static又是final的字段只占據(jù)一段不能改變的存儲空間。如下例:
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;//并且使用下劃線進(jìn)行連接;
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);
}
}
一個(gè)被定義為final的對象只能指向唯一一個(gè)對象,不可以將它指向其他對象,但是一個(gè)對象本身的值確實(shí)可以改變的,那么為了使一個(gè)常量真正做到不可更改,可以將常量說明為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();//實(shí)例化一個(gè)對象
out.println("重新實(shí)例化對象調(diào)用a1的值:" + fdata.a1);
out.println("重新實(shí)例化對象調(diào)用a2的值:" + fdata.a2);
FinalStaticData fdata2 = new FinalStaticData();// 實(shí)例化新對象
out.println("重新實(shí)例化對象調(diào)用a1的值:" + fdata2.a1);
out.println("重新實(shí)例化對象調(diào)用a2的值:" + fdata2.a2);
}
}
重新實(shí)例化對象調(diào)用a1的值:9
重新實(shí)例化對象調(diào)用a2的值:2
重新實(shí)例化對象調(diào)用a1的值:1
重新實(shí)例化對象調(diào)用a2的值:2
總結(jié):
定義為final常量不是恒定不變的,將隨機(jī)數(shù)賦予final的變量,可以做到每次運(yùn)行程序時(shí)改變a1的值,但是a2被定義為static final形式,所以內(nèi)存中為a2開辟了一個(gè)恒定的區(qū)域,當(dāng)再次實(shí)例化一個(gè)FianlStaticData對象時(shí),仍然指向a2這塊內(nèi)存區(qū)域,所以a2的值保持不變。
技巧:
在JAVA中定義全局常量,通常使用public static final修飾,這樣的常量只能在定義時(shí)被賦值。
- 淺談Java之終止繼承:Final類和Fianl方法
- Java修飾符 abstract,static,final 的區(qū)別詳解
- java中final關(guān)鍵字使用示例詳解
- java關(guān)鍵字final使用方法詳解
- Java反射如何有效的修改final屬性值詳解
- Java中final關(guān)鍵字的用法總結(jié)
- Java final 修飾符知識點(diǎn)總結(jié)(必看篇)
- 深入解析Java編程中final關(guān)鍵字的作用
- Java中final作用于變量、參數(shù)、方法及類該如何處理
- 詳解Java中final的用法
- Java中final與繼承操作實(shí)例分析
相關(guān)文章
collection集合體系與并發(fā)修改異常的解決方法
今天小編就為大家分享一篇關(guān)于collection集合體系與并發(fā)修改異常的解決方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
List集合中對數(shù)據(jù)實(shí)現(xiàn)多重規(guī)則進(jìn)行排序的案例
今天小編就為大家分享一篇關(guān)于List集合中對數(shù)據(jù)實(shí)現(xiàn)多重規(guī)則進(jìn)行排序的案例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
RocketMQ?Broker實(shí)現(xiàn)高可用高并發(fā)的消息中轉(zhuǎn)服務(wù)
RocketMQ消息代理(Broker)是一種高可用、高并發(fā)的消息中轉(zhuǎn)服務(wù),能夠接收并存儲生產(chǎn)者發(fā)送的消息,并將消息發(fā)送給消費(fèi)者。它具有多種消息存儲模式和消息傳遞模式,支持水平擴(kuò)展和故障轉(zhuǎn)移等特性,可以為分布式應(yīng)用提供可靠的消息傳遞服務(wù)2023-04-04
Java整合Jackson實(shí)現(xiàn)反序列化器流程
Jackson是一個(gè)開源的Java序列化和反序列化工具,可以將Java對象序列化為XML或JSON格式的字符串,以及將XML或JSON格式的字符串反序列化為Java對象。由于其使用簡單,速度較快,且不依靠除JDK外的其他庫,被眾多用戶所使用2023-01-01
高可用架構(gòu)etcd選主故障主備秒級切換實(shí)現(xiàn)
這篇文章主要為大家介紹了高可用架構(gòu)etcd選主故障主備秒級切換的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-02-02
基于Java 生產(chǎn)者消費(fèi)者模式(詳細(xì)分析)
下面小編就為大家分享一篇基于Java 生產(chǎn)者消費(fèi)者模式(詳細(xì)分析),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Java排序算法三之歸并排序的遞歸與非遞歸的實(shí)現(xiàn)示例解析
這篇文章主要介紹了Java排序算法三之歸并排序的遞歸與非遞歸的實(shí)現(xiàn)示例解析,文章通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

