close
Java 的資料型態,分為兩大類,分別是:
- 基本資料型態 Primitive type
- 參考資料型態 Reference type
若都沒有定義任何資料型態,則為 Null Type,空型態。
宣告範例
public class var {
public static void main(String[] args) {
int
Integerexample=1000;
double Doubleexample=10.014;
boolean
Booleanexample=true;
char Characterexample='中';
String Stringexample="字串測試";
System.out.printf("整數INT的值為:"+Integerexample+"\n");
System.out.printf("浮點數FLOAT的值為:"+Doubleexample+"\n");
System.out.printf("布林值BOOLEAN的值為:"+Booleanexample+"\n");
System.out.printf("字元CHAR的值為:"+Characterexample+"\n");
System.out.printf("字串String的值為:"+Stringexample+"\n");
}
}
結果
整數INT的值為:1000
浮點數FLOAT的值為:10.014
布林值BOOLEAN的值為:true
字元CHAR的值為:中
字串String的值為:字串測試
分類 | 資料型態 | 格式(所佔空間) | 可儲存之值的範圍 | 範例 |
整數 | byte | 8 bits | -128 ~ 127 (二進制與二補數) 預設值:0 | byte byteV1 = 100; |
short | 16 bits | -32768 ~ 32767 預設值:0 | short shortV1 = 200; | |
int ( Integer ) | 32 bits | -2147483648 ~ 2147483647 預設值:0 | int intV1 = 12345; | |
long | 64 bits | -9223372036854775808 ~ 9223372036854775807 預設值:0L 建議修飾符: L 或 l 例: long longOne = 1234L; |
long longV1 = 1341441L; | |
浮點數 | float | 32 bits | 32 bit IEEE754 規格的浮點數。 預設值:0F 範圍約在:-3.4028235E38 ~ 3.4028235E38 建議修飾符: F 或 f 例:float floatOne=0.3424F; |
float floatV1 = 2.3453F; |
double | 64 bits | 64 bit IEEE754 規格的浮點數。 預設值:0D 範圍約在:-1.7976931348623157E308 ~ 1.7976931348623157E308 建議修飾符: D 或 d 例:double doubleOne=3.3424D; |
double doubleV1 = 1.234D; | |
字元 |
char ( Character ) |
16 bits | 16 bit 的Unicode 字元,可容納各國的字元集。 預設值:'\u0000' 若以Unicode來看,就是'\u0000' 到 '\uffff'。 若以整數值來看,範圍在0~65535,例如:65代表 'A'。 請查閱:ASCII 字碼表 若以跳脫字元(轉義字符)'\'將後面的字符轉換成其它含意。 |
char chrA = '\101' , chrAc = '中'; char chrU = '\u0041'; char chrAd = 65; char chrAd = 'A'; char br1 = '\n'; //換行符 |
布林 | boolean | 1 bits | true 或 false。(不可用 0 或 1 或 其它 代表) 預設值:false | boolean boolV1 = true; |
定義變數,常數
為何要定義(或稱:宣告)變數,常數?是要告訴編譯器(Compiler)這個變數(變量)是屬於哪一種資料型態,這樣編譯器才知道需要配置多少空間給它,以及它能存放什麼樣的資料。 |
標準語法 | 範例 | 說明 |
資料型態 變數名稱; | boolean var1; int age; |
定義了一個布林(boolean)型態的變數,變數的名稱為var1。 定義了一個整數(int)型態的變數,變數的名稱為age。 |
資料型態 變數名稱 = 初始值; | int age =10; boolean a = true,b = false; char myChar = ‘\u0050’; char myChar = ‘&’; char myChar = 65; double a = 0.0001; float b = 0.1F; |
宣告一個整數(int)型態的變數,並設定初始值為10。 同時宣告多個布林(boolean)型態的變數,並設定初始值。 宣告一個字元(char)型態,初始值為Unicode碼格式。 宣告一個字元(char)型態,初始值為字元。 宣告一個字元(char)型態,初始值為ASCII碼。 宣告一個雙精數(double)型態的變數。 宣告一個浮點數(float)型態的變數,必須在數值後加上符號「F」。 |
final 資料型態 常數名稱 = 常數值; | final int MAX_VALUE = 10 | 定義常數 整數(int)型態 MAX_VALUE = 10。 常數值設定之後,不得更改。常數名全大寫 |
static 資料型態 變數名稱 = 初始值; | static double number = 10; | 使用static,定義靜態變數,建置於記憶體。相同變數名只有一份 |
final static 資料型態 常數名稱 = 常數值; | final static double PI = 3.14; | 定義靜態常數建置於記憶體Date Segment(資料段) 且不得更改。 常數名全大寫 |
注意:
一次定義(宣告)多個同型態變數,範例如下:
定義(宣告)變數與設定變數值
1.變數因作用域而存在記憶體Stack區段。
2.修飾為static靜態常數(或 變數):
在java虛擬機載入.class後,就一次性分配,存在記憶體Date Segment(資料段),位址無法變更,直到Application應用執行結束。
一次定義(宣告)多個同型態變數,範例如下:
資料型態 變數1 , 變數2, 變數3, ... ,變數N; |
int dogAge , catAge , dogHeight , catHeight; |
利用 = 這個設定運算子,就可以將 myHeight 變數,所佔的記憶體空間,存放168這個數值。
注意:1.變數需先定義,後賦值才能使用。2.同一方法體內之變數名相同時,只需要定義一次,後面即可賦值使用。
跳脫字元
範例一 | 範例二 | 範例三 |
int myHeight = 168 ; |
int myHeight = 168 , myWeight = 60; | int myHeight , myWeight; myHeight = 168; myWeight = 60; |
應讀成:將168數值 設定給 整數型態的變數myHeight | 直接定義變數與設定值 | 先定義變數,後設定值 |
跳脫字元(轉義字符)和所對應的意義:Java常用
轉義字符 | 意義 | ASCII碼值(十進制) | Unicode十六進制 | 十六進制 |
\b | 退格 (將當前位置移到前一格) | 008 | \u0008 | \0x0008 |
\t | 水平定位符號TAB (跳到下一個TAB的位置) | 009 | \u0009 | \0x0009 |
\n | 換行鍵 | 010 | \u000A | \0x000A |
\f | 換頁鍵 | 012 | \u000C | \0x000C |
\r | Enter鍵 | 013 | \u000D | \0x000D |
\" | 代表一個雙引號 " 字符 | 034 | \u0022 | \0x0022 |
\' | 代表一個單引號 ' 字符 | 039 | \u0027 | \0x0027 |
\\ | 代表一個斜線 \ 字符 | 092 | \u005C | \0x005C |
注意:區分 斜線: / 與反斜線: \ ,此處不可互換 , 十六進制: \0x 或 \0X (讀成: 反斜線 零 x)
https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC%A6%E5%88%97%E8%A1%A8
印出資料類型大小、最小值和最大值語法:
資料類型.SIZE //印出資料類型大小
資料類型.MIN_VALUE //印出資料類型最小值
資料類型.MAX_VALUE //印出資料類型最大值
資料溢位 Overflow
若使用超過或小於該資料表示範圍,運算結果將會造成錯誤。
以 Byte 資料型態為例,範圍為 127 ~ -128,最大值為 127,最小值為 -128。
若資料存大於或小於,編譯器則會提示資料值已超過不符合該資料型態能處理的範圍錯誤。
若資料存大於或小於,編譯器則會提示資料值已超過不符合該資料型態能處理的範圍錯誤。
以 byte 為例:
// 印出 byte 最小值、最大值
System.out.println("===byte===");
System.out.println("Byte.SIZE= :" + Byte.SIZE);
System.out.println("最小值:Byte.MIN_VALUE= " + Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE= " + Byte.MAX_VALUE);
使用後缀字,來定義數字資料類型
十進制:123
長整數資料型態以大寫的 L 結尾:123L
16 進制以 0x 開頭:0x0F
8進制以0開頭
2 進制以0b 開頭:0b00001011
Doubles 默認寫法: 123.5, 123.5e10
Floats 使用小寫 f 或者大寫 F 後綴:123.5f
長整數資料型態以大寫的 L 結尾:123L
16 進制以 0x 開頭:0x0F
8進制以0開頭
2 進制以0b 開頭:0b00001011
Doubles 默認寫法: 123.5, 123.5e10
Floats 使用小寫 f 或者大寫 F 後綴:123.5f
進階:參考資料型態 Reference type
簡單來說,只要不是上述的八種基本資料型態,其他都是是參考資料型態。參考資料型態預設資料值,皆為 null,所以若存取到沒有被實體畫的 null 的物件變數,就會出現 NullPointerException。
常見參考資料型態:
- 物件 (object)
- 字串 (String)
- 自定義的類別 (class)
- 陣列 (Array)
- 介面 (interface)
- 列舉 (enum)
基本與參考資料型態,兩者之間最大的不同,主要差異在記憶體配置的機制是不同的。程式執行期間,記憶體可分成三個部份:
- Global (全域):此區塊記憶體,主要用來存放全域變數(global variable)、靜態變數(static variable)。
- Stack (堆疊):此區塊記憶體,主要用來存放區域變數(local variable)、方法的參數(method parameter)與方法的回傳位址(method return address)等。此區塊記憶體,在編譯時期就已決定好生命週期,作業系統會自動化來管理,決定什麼時候要回收資源。如果 Stack 區不夠用或是遞回涵式(recursive function)沒寫好,會產生,常見典型的錯誤 StackOverFlow Error 的錯誤。
- Heap (堆積):可以被預測的資料放在堆疊區(Stack Memory),而不可被預測的資料就放在堆積區(Heap Memory)。什麼事不可預測的資料呢?就是需要在程式執行後,才知道用多少記憶體,相對的此區塊資料,作業系統不會自動進行回收,程式設計師必須自行管理此區的記憶體,透過 GC,Garbage Collection,垃圾回收,釋放用不到的資源記憶體空間。而 Heap 區,若記憶體不夠用,則會產生 OutOfMemoryError。
全站熱搜
留言列表