----------------------android培訓、java培訓、期待與您交流!
----------------------
2-1 數據類型
1、首先要明確的是:
在Java語言中,Java是不支持C語言還有C++語言中的指針、結構體類型以及共用類型的。
在Java語言中,簡單(或基本)數據類型分了以下八種:
字節型(byte)、短整型(short)、整型(int)、長整型(long)、字符型(char)、浮點型
(float)、雙精度型(double)、布爾型(boolean)
在這些當中,又可以分爲四組:
1、整數:該組包括字節型(byte)、短整型(short)、整型(int)、長整型(long)、它們有符
號整數。
2、浮點型數:該組包括浮點型(float)、雙精度型(double)、它們代表有小數精度要求的數字。
3、字符:這個組包括字符型(char),它代表字符集的符號,例如字母和數字。
4、布爾型:這個組包括布爾型(boolean),它是一種特殊的類型,表示真(true)/假(false)值
。
各個數據類型在內存中所佔用的內存如下表,因爲Java語言具有可移植性,所在在內存的佔用上面,
各種機型都是一樣的:
序號 簡單類型 大小/位數 範圍/精度
1 float 4 字節/32位 32位IEEE 754單精度
2 double 8 字節/64位 64位IEEE 754雙精度
3 byte 1字節/8位 -128到127
4 short 2 字節/16位 -32,768到32,767
5 int 4 字節/32位 -2,147,483,648到2,147,483,647
6 long 8 字節/64位 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807
7 char 2 字節/16位 整個Unicode字符集
8 boolean 1 位 True或者false
2-2 常量
Java中的常量是用文字串來表示的。比如:
整形:123 實型:1.23 字符型:'a' 布爾型:true,false 字符串:"china"。
並且,在Java中, 不能通過#define命令來把一個標識符定義爲常量,而是用關鍵字“final”來實
現,例如:final double PI=3.14159(具體的final用法見後)。
2-3 變量
在編程的學習過程中,變量都是一個重要的概念,那麼在Java中,變量包含的內容是:變量名、變量
類型和作用域三個部分。
1、變量名:一個合法的變量名應該由字母、數字、下劃線或者美元符號“$”來表示;Java對於變量
名的大小寫要敏感;變量名不能使用數字來開頭;並且和C以及C++一樣,不能用保留字(關鍵字)來命名
。下面列舉一些合法的變量名,如:myName、value_1、dollar$……等等都是合法的變量名,再列舉一些
不合法的變量名,如:2mail、room#、class……等等這些都是不合法的變量名。我們在命名的時候,最
好是使變量名具有一定的含義,這樣可以增加整個程序的可讀性。
2、變量類型:變量類型可以是上面任意的一個類型。
3、作用域:變量的作用域是指明可訪問該變量的一段代碼。我們在聲明一個變量的同時,也就指明
了變量的作用域。按照作用域來劃分,變量可以劃分成以下幾種:
(1)局部變量:在方法或方法的一塊代碼中聲明,它的作用域爲它所在的代碼塊(整個方法或方法
中的某塊。)
(2)類變量:是在類中聲明,而不是在類的某個方法中聲明,它的作用域是整個類。
(3)方法參數:傳遞給方法,它的作用域就是這個方法。
(4)例外處理參數:傳遞給例外處理代碼,它的作用域就是例外處理部分。
在一個確定的域中,變量應該是唯一的。通常,一個域是用“{”和“}”來劃定的。
變量的聲明格式是:
type identifier[=value][,identifier[=value]...];
例如: int a , b , c ; double d1 , d2 = 0.0 ;
其中,多個變量之間用逗號“,”隔開,d2 = 0.0是對雙精度實型變量“d2”賦初值“0.0”。
注意:只有“局部變量”和“類型變量”可以給出這樣賦初值的,而“方法參數”和“例外處理參數
”的變量值是由調用者給出的。
2-4 整型數據
一、整型常量
和C/C++相比,Java的整型常量具有以下三種形式:
1、十進制整數:如:123、-456、0……等等
2、八進制整數:以“0”開頭的,如:0123表示十進制數83,-011表示十進制數-9……等等
3、十六進制整數:以“0x”或“0X”開頭,如:0x123表示十進制數291,-0X12表示十進制數-18。
對於 int 型的整型常量在機器中佔32位,而對於long型的常量在機器中要佔用64位,並且在表示
long型的時候,要在後面加上“l”或“L”符號來表示,如:123l、456L……等等。
二、整型變量
整型變量的類型有四種,分別是:byte、short、int、long。
對於以上四種類型,int類型是最常使用的。但對於大型計算,常會遇到很大的整數,超出int類型所
表示的範圍,這時,就要使用long型。
由於不同的機器對於多字節數據的存儲方式不同,可能是從低字節向高字節存儲,也可能是從高字節
向低字節存儲,這樣,在分析網絡協議或文件格式時,爲了解決不同機器上的字節存儲順序的問題,就用
byte類型來表示數據是合適的。而通常情況下,由於其表示的數據範圍很小,容易造成溢出,應避免使用
。
short類型則很少使用,它限制數據的存儲爲先高字節,後低字節,這樣在某些機器中會出錯 。
2-5 實型(浮點型)數據
一、實型常量
與C/C++相同,Java的實常數有兩種表達形式:
1、十進制數形式。有數字和小數點組成,並且必須有小數點,如:0.123、.123、123.、123.0……
等等都可以。
2、科學記數法形式。如:123e4或者123E4,其中,“e”或者“E”前面必須有數,並且後面的指數
必須是整數。
實常數在機器中佔64位,具有double型的值。對於float型的值,則要在數字後面加上“f”或者“F
”,如:12.3f或45.6F,它在機器中佔32位,表示的精度較底。
2-6 字符型數據
一、字符型常量
字符型常量是用單引號('')括起來的一個字符,如:'a'、'B'……等等。另外,Java也提供一些轉
義字符,以反斜槓“/”開頭,各種轉義字符的意思如下:
/ddd 1到3位8進制數據所表示的字符(ddd)
/uxxxx 1到4位16進制數所表示的字符(xxxx)
/' 單引號字符 // 反斜槓字符
/r 回車 /n 換行
/f 走紙換頁 /t 橫向跳格
/b 退格
但還是要注意:與C/C++不同,Java中的字符型數據是16位無符號型數據,它表示Unicode集,而不僅
僅是ASCII集,例如:/u0061表示ISO拉丁碼的‘a’。
二、字符型變量
和C/C++不一樣,Java中的字符型數據不能作爲整數來用,因爲Java不提供無符號整數類型。但是,
同樣可以當作整數來操作,如下例子:
int three = 3 ;
char one = '1' ;
char four = ( char ) ( three + one ) ;
在上例中,在計算加法時,字符型變量one被轉化成整數進行相加,最後把結果又轉化成字符型。
三、字符串常量
與C/C++不同,Java的字符串常量是作爲String類的一個對象來處理的,而不是一個數據。
與C/C++相同,Java的字符串常量也是用“""”括起來的一組字符。
2-7 布爾型數據
布爾型數據只有兩個值,true(真)和false(假),且它們不對應於任何整值。在流控制中常用到
它。
現在,請看下面的這個例子,用到了前面講的全部數據類型,並且通過顯示器顯示它們:
public class SimpleTypes
{
public static void main( String args[] )
{
byte b=0x55;
short s=0x55ff;
int i=1000000;
long l=0xfffL;
char c='c';
float f=0.23F;
double d=0.7E-3;
boolean bool=true;
System.out.println("b = "+b);
System.out.println("s = "+s);
System.out.println("i = "+i);
System.out.println("l = "+l);
System.out.println("c = "+c);
System.out.println("f = "+f);
System.out.println("d = "+d);
System.out.println("bool = "+bool);
}
}
編譯並運行該程序,輸出結果爲:
b = 85
s = 22015
i = 1000000
l = 4095
c = c
f = 0.23
d = 0.0007
bool = true
2-8 各類數值型數據之間的混合運算
一、自動類型轉換
在整型、實型、字符型數據之間,不同類型之間可以混合運算,但是必須先轉換成同一類型,然後進
行運算,其轉換的規則是:
① ( byte 或 short ) op int → int
② ( byte 或 short 或 int ) op long → long
③ ( byte 或 short 或 int 或 long ) op float → float
④ ( byte 或 short 或 int 或 long 或 float) op double → double
⑤ char op int → int
箭頭左邊表示參與運算的數據類型,op爲運算符(如加、減、乘、除等),右邊表示轉換成進行運算
的數據類型。
二、強制類型轉換
高級數據要轉換成低級數據,需用到強制類型轉換,如:
int i;
byte b=(byte)i; //把int型變量“i”強制轉換爲byte型
這種使用可能會導致溢出或精度的下降,最好不要使用。
2-9 補充內容
Java的簡單數據類型
Java中的所有數字變量都是有符號的,Java不允許數據類型之間隨意的轉換。只有數字變量之間可以
進行類型轉換。比如,boolean就不能轉換爲其他數據類型,而且其他數據類型也不能轉換爲boolean。
因爲Java的簡單數據類型都經過準確定義,而且直接內存訪問也是不允許的,所以在Java語言中取消
了sizeof運算符。
Java的簡單數據類型並不是對象。爲了採用面向對象方式對待Java簡單數據類型,你需要首先用類封
裝它們。
封裝類
Java還提供了Byte、Short、Boolean、Character、Integer、Double、Float和Long等內置的封裝類
。這些封裝(wrapper)類提供了很直觀的實用方法。比如:Byte、Float, Integer、Long和Double類都
具有doubleValue()方法,通過它可以把存儲在類的實例中的值轉換爲Double類型。還有,所有的封裝類
都提供了靜態的valueOf(String s)方法把給定的String轉換爲對應的簡單類型。清單A的代碼演示了這些
封裝類的一些用法。
簡單數據類型初始化
在Java語言中,簡單數據類型作爲類的成員變量聲明時自動初始化爲默認值,除非顯式地聲明。簡單
數據類型爲某一方法聲明局部變量時不會自動地初始化而且會導致編譯器扔出類似以下的錯誤消息
“Variable x may not have been initialized.(x變量沒有初始化)”表B定義了Java簡單數據類型的
默認值。
Java簡單數據類型的默認值
類型 默認值
boolean false
Byte 0
short 0
int 0
Long 0
Char '/u0000'
Float 0.0
double 0.0
Java簡單數據類型的默認初始值
上面的代碼顯示所有的Java簡單數據類型都用做了Initialization類的成員變量。該例還顯示
Initialization類的構造器中局部聲明瞭一個int變量。在不修改以上代碼的情況下,編譯器會在對以上
代碼進行編譯的時候扔出錯誤。
一旦引發問題的代碼行(那些引用未初始化變量導致錯誤發生的代碼)被刪除或者註釋掉。程序成功
編譯和執行之後就會顯示以下的結果:
byte: 0
short: 0
int: 0
long: 0
float: 0.0
double: 0.0
char: 0
boolean: false
我們還可以顯式地初始化成員變量爲其他值,如以下代碼所示:
byte b = 5;
short s = 123;
int i = 1234;
long l = 12345;
float f = 123.45f;
double d = 12345.678;
char c = 'A';
boolean z = true;
2-10參數傳遞
如果傳遞的是 基本數據類型的數據, 形式參數的改變 對 實際參數 沒有影響
如果傳遞的是 引用數據類型的數據, 形式參數的改變 對 實際參數 有影響
class ArrayDemo11 {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5};
printArray(arr); //[1,2,3,4,5]
//更改數組中的元素
change( arr );
printArray(arr); //[2,4,6,8,10]
}
//改變數組元素值
public static void change(int[] arr){
for (int x=0; x<arr.length; x++) {
//arr[x] = arr[x] * 2;
arr[x] *= 2;
}
}
//遍歷數組
public static void printArray (int[] arr) {
System.out.print("[");
for (int x=0; x<arr.length; x++) {
if (x == arr.length-1 ) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x] + ",");
}
}
System.out.println("]");
}
}
----------------------android培訓、java培訓、期待與您交流!
----------------------