5.資料型別
一.註釋
接下來我們將的內容可能比較瑣碎。但是都是基礎,就如同蓋房子我們需要的磚塊一樣,之後講控制語句,控制語句就像黏土一樣,講磚塊連線起來。
為了方便程式的閱讀,Java語言允許程式設計師在程式中寫上一些說明性的文字,用來提高程式的可讀性,這些文字性的說明就稱為註釋。寫註釋提高我們程式設計師之間相互協作的效率,所以我們要在每一個類,每一個方法上面寫上註釋, 註釋不會出現在位元組碼檔案中,即Java編譯器編譯時會跳過註釋語句。 在Java中根據註釋的功能不同,主要分為單行註釋、多行註釋和文件註釋。
- 單行註釋: 使用“//”開頭,“//”後面的單行內容均為註釋。
- 多行註釋: 以“/”開頭以“
- 文件註釋: 以“/**”開頭以“*/”結尾,註釋中包含一些說明性的文字及一些JavaDoc標籤(後期寫專案時,可以生成專案的API)
例子:
/** * Welcome類(我是文件註釋) * @author 趙 * @version 1.0 */ public class Welcome { //我是單行註釋 public static void main(String[] args/*我是行內註釋 */) { System.out.println("Hello World!"); } /* 我是多行註釋! 我是多行註釋! */ }
二.識別符號
識別符號的作用:識別符號是用來給變數、類、方法以及包進行命名的,如Welcome、main、System、age、name、gender等。 識別符號需要遵守一定的規則:
- 識別符號必須以字母、下劃線_、美元符號$開頭。
- 識別符號其它部分可以是字母、下劃線“_”、美元符“$”和數字的任意組合。
- Java 識別符號大小寫敏感,且長度無限制。
- 識別符號不可以是Java的關鍵字。
識別符號的使用規範:
- 表示類名的識別符號:每個單詞的首字母大寫,如Man, GoodMan
- 表示方法和變數的識別符號:第一個單詞小寫,從第二個單詞開始首字母大寫,我們稱之為“駝峰原則”,如eat(), eatFood()
【注意】:Java不採用通常語言使用的ASCII字符集,而是採用Unicode這樣標準的國際字符集。因此,這裡字母的含義不僅僅是英文,還包括漢字等等。但是不建議大家使用漢字來定義識別符號!
題外篇: 1.ASCII字符集 我們知道,計算機內部,所有資訊最終都是一個二進位制值。每一個二進位制位(bit)有0和1兩種狀態,因此八個二進位制位就可以組合出256種狀態,這被稱為一個位元組(byte)。也就是說,一個位元組一共可以用來表示256種不同的狀態,每一個狀態對應一個符號,就是256個符號,從00000000到11111111。 上個世紀60年代,美國製定了一套字元編碼,對英語字元與二進位制位之間的關係,做了統一規定。這被稱為 ASCII 碼,一直沿用至今。 ASCII 碼一共規定了128個字元的編碼,比如空格SPACE是32(二進位制00100000),大寫的字母A是65(二進位制01000001)。這128個符號(包括32個不能打印出來的控制符號),只佔用了一個位元組的後面7位,最前面的一位統一規定為0。
2.非ASCII編碼 英語用128個符號編碼就夠了,但是用來表示其他語言,128個符號是不夠的。於是,一些歐洲國家就決定,利用位元組中閒置的最高位編入新的符號。這樣一來,這些歐洲國家使用的編碼體系,可以表示最多256個符號。至於亞洲國家的文字,使用的符號就更多了,漢字就多達10萬左右。一個位元組只能表示256種符號,肯定是不夠的,就必須使用多個位元組表達一個符號。比如,簡體中文常見的編碼方式是 GB2312,使用兩個位元組表示一個漢字,所以理論上最多可以表示 256 x 256 = 65536 個符號。
3.Unicode 世界上存在著多種編碼方式,同一個二進位制數字可以被解釋成不同的符號。因此,要想開啟一個文字檔案,就必須知道它的編碼方式,否則用錯誤的編碼方式解讀,就會出現亂碼。為什麼電子郵件常常出現亂碼?就是因為發信人和收信人使用的編碼方式不一樣。 可以想象,如果有一種編碼,將世界上所有的符號都納入其中。每一個符號都給予一個獨一無二的編碼,那麼亂碼問題就會消失。這就是 Unicode,就像它的名字都表示的,這是一種所有符號的編碼。UTF-8 就是在網際網路上使用最廣的一種 Unicode 的實現方式。其他實現方式還包括 UTF-16(字元用兩個位元組或四個位元組表示)和 UTF-32(字元用四個位元組表示),不過在網際網路上基本不用。重複一遍,這裡的關係是,UTF-8 是 Unicode 的實現方式之一。 題外話結束。
合法的識別符號 int a = 3; int _123 = 3; int $12aa = 3; int 變數1 = 55; //合法,但是不建議使用中文命名的識別符號
三.Java關鍵字/保留字
關鍵字這塊大家只需要看一遍就行,不用背。
abstract | assert | boolean | break | byte | case | catch | char | class |
---|---|---|---|---|---|---|---|---|
const | continue | default | do | double | else | extends | final | finally |
float | for | default | goto | if | import | instanceof | int | interface |
long | native | new | null | package | private | protected | public | return |
short | static | strictfp | super | switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
四.變數
初識變數: 變數本質上就是代表一個”可操作的儲存空間”,空間位置是確定的,但是裡面放置什麼值不確定。我們可通過變數名來訪問“對應的儲存空間”,從而操縱這個“儲存空間”儲存的值。 Java是一種強型別語言,每個變數都必須宣告其資料型別。變數的資料型別決定了變數佔據儲存空間的大小。 比如,int a=3; 表示a變數的空間大小為4個位元組。 變數作為程式中最基本的儲存單元,其要素包括變數名,變數型別和作用域。變數在使用前必須對其宣告, 只有在變數宣告以後,才能為其分配相應長度的儲存空間。
格式為:
type varName [=value][,varName[=value]...];
//[]中的內容為可選項,即可有可無
資料型別 變數名 [=初始值] [,變數名 [=初始值]…];
double salary;
long earthPopulation;
int age;
變數分類: 區域性變數(local variable)/例項變數 方法或語句塊內部定義的變數。生命週期是從宣告位置開始到到方法或語句塊執行完畢為止。區域性變數在使用前必須先宣告、初始化(賦初值)再使用。
public void test() {
{/ / 語句塊 開始
int a=1;
System.out.print(a);
} // 語句塊 結束
int i;
int j = i+5 ; // 編譯出錯,變數i還未被初始化
}
public void test() {
int i;
i=10;
int j = i+5 ; // 編譯正確
}
成員變數(也叫例項變數 member variable) 方法外部、類的內部定義的變數。從屬於物件,生命週期伴隨物件始終。如果不自行初始化,它會自動初始化成該型別的預設初始值。(而區域性變數需要初始化)
資料型別 | 初始值 |
---|---|
int | 0 |
double | 0.0 |
boolean | false |
靜態變數(類變數 static variable) 使用static定義。 從屬於類,生命週期伴隨類始終,從類載入到解除安裝。 (注:講完記憶體分析後我們再深入!先放一放這個概念!)如果不自行初始化,與成員變數相同會自動初始化成該型別的預設初始值。
/**
* 測試變數
*
* @author 趙
*
*/
public class TestVariable {
int a; //成員變數, 從屬於物件; 成員變數會自動被初始化
static int size; //靜態變數,從屬於類
public static void main(String[] args) {
{
int age; //區域性變數,從屬於語句塊;
age = 18;
}
int salary = 3000; //區域性變數,從屬於方法
int gao = 13;
System.out.println(gao);
int i;
// int j = i + 5; // 編譯出錯,變數i還未被初始化
}
}
五.常量(Constant)
常量通常指的是一個固定的值,在Java語言中,主要是利用關鍵字final來定義一個常量。 常量一旦被初始化後不能再更改其值。 宣告格式為:
final type varName = value;
變數和常量命名規範(不規範會直接損害你的個人形象)
- 所有變數、方法、類名:見名知意
- 類成員變數:首字母小寫和駝峰原則: monthSalary
- 區域性變數:首字母小寫和駝峰原則
- 常量:大寫字母和下劃線:MAX_VALUE
- 類名:首字母大寫和駝峰原則: Man, GoodMan
- 方法名:首字母小寫和駝峰原則: run(), runRun()
六.基本資料型別
Java是一種強型別語言,每個變數都必須宣告其資料型別。 Java的資料型別可分為兩大類:基本資料型別(primitive data type)和引用資料型別(reference data type)。
引用資料型別的大小統一為4個位元組,記錄的是其引用物件的地址!
6.1整數型別:
型別 | 佔用儲存空間 | 表數範圍 |
---|---|---|
byte | 1位元組 | -2^7 ~ 2^7-1(-128~127) |
short | 2位元組 | -2^15 ~ 2^15-1 (-32768~32767)約3萬 |
int | 4位元組 | -2^31 ~ 2^31-1 (-2147483648~2147483647) 約21億 |
long | 8位元組 | -2^63 ~ 2^63-1 |
Java 語言整型常量的四種表示形式
- 十進位制整數,如:99, -500, 0(預設)
- 八進位制整數,要求以 0 開頭,如:015
- 十六進位制數,要求 0x 或 0X 開頭,如:0x15
- 二進位制數,要求0b或0B開頭,如:0b01110011 Java語言的整型常數預設為int型,宣告long型常量可以後加‘ l ’或‘ L ’ 。
long a = 55555555; //編譯成功,在int表示的範圍內(21億內)。
long b = 55555555555;//不加L編譯錯誤,已經超過int表示的範圍。
6.2浮點型別: 帶小數的資料在Java中稱為浮點型。浮點型可分為float型別和double型別。 float型別又被稱作單精度型別,尾數可以精確到7位有效數字,在很多情況下,float型別的精度很難滿足需求。而double表示這種型別的數值精度約是float型別的兩倍,又被稱作雙精度型別,絕大部分應用程式都採用double型別。浮點型常量預設型別也是double。 float型別的數值有一個字尾F或者f ,沒有後綴F/f的浮點數值預設為double型別。也可以在浮點數值後新增字尾D或者d, 以明確其為double型別。 浮點型別float,double的資料不適合在不容許舍入誤差的金融計算領域。如果需要進行不產生舍入誤差的精確數字計算,需要使用BigDecimal, BigInteger類。
float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d);//結果為false
float d1 = 423432423f;
float d2 = d1+1;
if(d1==d2){
System.out.println("d1==d2");//輸出結果為d1==d2
}else{
System.out.println("d1!=d2");
}
6.3字元型別: 字元型在記憶體中佔2個位元組,在Java中使用單引號來表示字元常量。例如’A’是一個字元,它與”A”是不同的,”A”表示含有一個字元的字串。 char 型別用來表示在Unicode編碼表中的字元。Unicode編碼被設計用來處理各種語言的文字,它佔2個位元組,可允許有65536個字元。
char eChar = 'a';
char cChar ='中';
Unicode具有從0到65535之間的編碼,他們通常用從’\u0000’到’\uFFFF’之間的十六進位制值來表示(字首為u表示Unicode)
char c = '\u0061';
Java 語言中還允許使用轉義字元 ‘\’ 來將其後的字元轉變為其它的含義。常用的轉義字元及其含義和Unicode值如表2-6所示。
轉義符 | 含義 | Unicode值 |
---|---|---|
\b | 退格(backspace) | \u0008 |
\n | 換行 | \u000a |
\r | 回車 | \u000d |
\t | 製表符(tab) | \u0009 |
6.4 boolean型別 boolean型別有兩個常量值,true和false,在記憶體中佔一位(不是一個位元組),不可以使用 0 或非 0 的整數替代 true 和 false ,這點和C語言不同。 boolean 型別用來判斷邏輯條件,一般用於程式流程控制 。 請不要這樣寫:if ( flag == true ),只有新手才那麼寫。