當前位置:首頁 » 編程軟體 » java編譯時常量

java編譯時常量

發布時間: 2023-05-01 18:38:05

A. 如何在編譯java的時候,取消編譯器對編譯常量的優化

遇到的問題是想重新編譯某個java文件(比如A.java),裡面有個常量(比如finalinta)和上次編譯時不一樣,但是另一個使用A.class的a的文件(比如B.java)由於在javac在上次編譯的時候將當時的A.class裡面的常量直接給內聯了,所以就達不到想要的效果。
如果是這樣的話,對於String可以使用.intern()來防止編譯器進行優化,對於其他類型,可以要麼不定義為常量,要麼將常量定義為private,然後使用一個static方法來返回這個常量。

B. java中,常量占內存空間嗎

任何的計算機語言中,一個量都是要佔用空間。不管是常量還是變數。
只不過常量在編譯型的語言中,編譯後就可以確定其偏移地址。
而變數是在運行時才能確定。
由此可知,常量可以做一些初始化的動作。
希望對你有幫助!

C. JAVA語言中,什麼是變數,如何定義一個變數什麼是常量

變數:

變數是程序運行過程中它的值是允許改變的量。

變數定義:定義必須嚴格按照標識符的命名規則,即0~9數字、字母、下滑線、$等組成,且首字母不能是數字、不能是java關鍵字。

變數格式為[訪問修飾符][修飾符]數據類型 變數名[=初始值]。

eg:public static int a=0;

byte b=2;

常量:

常量是不可改變的量,一次賦值,永不改變。

常量定義:常量需要有final修飾符修飾。常量聲明時必須初始化。常量標識符必須大寫,且多個單詞時用下滑線連接。

注意:有時候常量也可以不用在聲明時就初始化。

eg:做局部變數

public class Test {

public static void main(String[] args)

{

final int Y;

Y=9;

}

}

做靜態全局變數時,若聲明時不服初值,必須在靜態代碼塊中賦初值。

static final int Y;

static{

Y=9;

}

做非靜態全局變數時,若聲明時不服初值,則必須在非靜態代碼塊中賦值。

(3)java編譯時常量擴展閱讀:

使用變數時注意事項:

作用域:變數定義在那個大括弧內,它就在這個大括弧內有效。並且,在同一個大括弧內不能同時定義同名的變數。

初始化值:沒有初始化值得變數不能直接使用。 只要在使用前給值就行,不一定要在定義是給值。

定義變數的格式: a:數據類型 變數名 = 初始化值; b:數據類型 變數名;變數名 = 初始化值;c:在一行上建議只定義一個變數可以定義多個。

參考資料來源:網路-Java



D. java 中的編譯期常量是什麼使用它又什麼風險

編譯期常量就是所謂的 public final static 常量。
由於在編譯時就確定了值,在使用的場合會直接寫成值。而不是直接到原來的類中讀取。
這樣會有一個問題。 如果 類 A 提供了常量 類B使用了常量。並都進行了編譯。
然後,修改了類A的源碼,調用系統進行編譯。
系統發現類A是新的代碼,編譯了,類B是舊的代碼,就不進行編譯,使用舊的類。
由於類B中直接編譯進了舊的值,導致類A的修改無法反映到類B中。
這樣造成了風險。

E. java中不存在byte/short型常量的表示法。但可以把一定范圍內的int型常量賦

1、所謂常量,就是在程序運行時,不會被修改的量,在java中定義常量的表達式是聲明物吵的時候加上 static final修飾符,表明該變數不可被修改,稱之為常量
2、java中可以聲明byte/short的常量,比如碼歲:public static final byte a = 1;但是,byte的值必須在byte類型的范圍內,即:-128~+127
3、java中的整數,像:1,2,234,1000等默認都是int類型的,在-128~+127范圍內的值可以直接遲螞睜賦值給byte類型,自動識別為byte,同理,在-32768~+32767之間值也可以直接賦值給short

F. 什麼是常量Java中,常量的定義規則有哪些

在Java語言中,主要是利用final關鍵字(在Java類中靈活使用Static關鍵字)來定義常量。

G. java類常量和一般常量之間到底有什麼區別尼

變數分類
1. 類變數
l 在類定義中使用關鍵字static修飾的欄位
l 在介面聲明中使用或者不使用static修飾的欄位
說明:當准備好類或介面時就會創建一個類變數並將其初啟散鎮始化為一個默認值。當卸載類或介面時,就會有效的使類變數停止存在

2. 實例變數
在類聲明中不使用關鍵字static聲明的欄位

3. 數組元素(未命名的變數)
無論何時創建一個作為數組的新對象,都會創建這些變數並將其初始化為默認值。當數組不在被引用時,就會有效地使數組元素停止存在。

4. 方法參數變數
對於方法聲明中聲明的每個參數,當調用該方法時,都會創建一個新的掘啟參數變數。新變數會用來方法調用的相應的參數值進行初始化。當方法體執行完成時,就會有效地是方法參數停止存在。

5. 構造函數參數變數
對於構造函數中聲明的每個參數,每當類實例創建表達式或顯示構造函數調用調用該構造函數時,就會創建一個新的參數變數。新變數會用來自創建表達式或構造函數調用的相應的參數值進行初始化。當構造函數體執行完成時,就會有效地使構造函數參數停止存在。、

6. 異常處理程序參數變數
每當悄粗catch語句或者try語句捕獲一個異常時,就會創建一個異常處理程序參數。新變數會用與異常關聯的實際對象進行初始化。當與catch子句關聯的代碼塊執行完成時,就會有效地使異常處理程序參數停止存在。

7. 局部變數
通過局部變數聲明語句聲明的變數。局部變數使用前一定要賦值。局部變數不會自動初始化為默認值

8. Final變數
Final修飾的變數,只能被賦值一次,除非在賦值之前明確地取消對fianl變數進行賦值,否則,對final變數賦值,將會引發編譯時錯誤。

變數的初始值
在使用變數值之前,程序中每個變數都必須有一個值:
1. 每個類變數、實例變數或數組元素都會在創建時使用默認值對其進行初始化,以下是java中數據類型與其默認值的對應關系
byte、short、int :0
long :0L
float :0.0f
double :0.0d
char :空字元(即:/u0000)
boolean :false
應用類型 :null
2. 每個方法的參數都會被初始化為方法調用者提供的對應參數值
3. 每個構造函數參數都會被初始化為類實例創建表達式或顯示構造函數調用提供的對應參數值
4. 異常處理程序參數將被初始化為拋出一個表示異常的ix
5. 在使用局部變數之前,必須通過初始化或賦值顯示地為其賦值,編譯器可以使用明確賦值的規則對這種賦值方式ing驗證
文章出自CSDN,http://blog.csdn.net/shibenjie/article/details/4331693

H. java 靜態變數和靜態常量

  • 靜態變數是屬於靜態存儲方式,但是屬於靜態存儲方式的量不一定就是靜態變數,例如外部變數雖屬於靜態存儲巧配搭方式,但不一定是靜態變數,必須由static加以定義後才能成為靜態外部變數,或稱靜態全局變數。

  • 對於自動變數,它屬於動態存儲方式。但是也可以用static定義它為靜態自動變數,或稱靜態局部變數,從而成為靜態存儲方式。由此看來,一個變數可由static進行再說明,並改變其原有的存儲方式。

  • 而在以Pascal為代表的許多程序語言中,所有局部變數都由系統自動分配存儲空間,而所有全局變數的存儲空間則以靜態分配的方式獲取,因此由於實際上「局部變數」和「全局變數」這兩個術語已足以涵蓋所有的情況,在這些程序語言中通常不使用「靜態變數」這一術語,而直接以「全局變數」代之。

  • 在這些程序語言中,靜態變數就是全局變數,而即使在有明確區分全局和靜態變數的程序語言中,在編譯後的代碼里二者也以相同的方式獲取存儲空間。而今術語「靜態變數」的概念則主要基於C族語言的「static」的定義。

  • 靜態變數也可以用於存儲常數。具體來說,靜態變數可用const,constant或final等關鍵賣卜字標識,這時其值就會在編譯時設定,並且無法在運行時改變。編譯器通常將靜態常量與孝拿文本一起置於目標文件的文本區域,而非常量初始化數據則置於數據區

I. Java中枚舉和常量的區別

常量

publicclassConstant{
publicstaticfinalStringCONST_ONE="bb";
publicstaticfinalStringCONST_TWO="cc";
}
  1. 常量作為參數時,是String,int等弱類型,開發人員可以傳入沒有在常量介面里定義的值,這個問題無法通過編譯器發現。

  2. 由於開發人員可以直接寫常量,所以不能用==對比,只能用equals對比,不能優化性能。

  3. 開發人員沒有參考資料時,不可能知道某個int類型的參數到底應該賦什麼內容。

  4. 編譯時,是直接把常量的值編譯到類的二進制代碼里,常量的值在升級中變化後,需要重新編譯引用常量的賀核類拿或,因為裡面存的是舊值。

  5. 如果常量類的構造器不私有,無法限制開發員繼承/實現介面,開發員能夠在子介面里繼續添加常量.而這些常量可能得不到祖先層的支持。

枚舉常量類

publicclassConstant{
privateStringname;
privateEnumClassA(){
this.name=name;
}
_ONE=newConstant("bb");
_ONE=newConstant("cc");
}
  1. 私有構造函數,避免被繼承和擴展。

  2. 定義方法的參數時,必須用枚舉常量類類型,如上面的Constant,這樣就轉變消拍伍成了強類型,不會出現弱類型引用的問題。

  3. 常量值地址唯一,可以用==直接對比,性能會有提高。

  4. 編譯時,沒有把常量值編譯到代碼里,即使常量的值發生變化,也不會影響引用常量的類。

enum類型

publicstaticenumEnumConstant{
ONE(1),TWO(2),THREE(3);
privateintnum;
EnumConstant(intnum){
this.num=num;
}
publicintgetValue(){
returnnum;
}
}
熱點內容
php壁紙源碼 發布:2025-07-08 03:04:26 瀏覽:319
android應用層 發布:2025-07-08 02:42:32 瀏覽:301
大唐存儲銷量 發布:2025-07-08 02:41:11 瀏覽:582
腳本怎麼打開 發布:2025-07-08 02:41:06 瀏覽:822
貴州電信iPtv升級伺服器地址 發布:2025-07-08 02:38:48 瀏覽:412
電腦怎麼鏈接本地伺服器 發布:2025-07-08 02:34:22 瀏覽:147
android調試webview 發布:2025-07-08 02:26:28 瀏覽:358
壓縮袋鞋子 發布:2025-07-08 02:21:30 瀏覽:752
為什麼安卓打吃雞感覺有延遲 發布:2025-07-08 02:09:32 瀏覽:168
課題組伺服器如何使用 發布:2025-07-08 02:09:27 瀏覽:44