Java基本程式設計結構

shaoneng111發表於2018-08-13

Java基本程式設計結構

資料型別

  • 在Java中,整型的範圍與執行Java程式碼的機器無關,這就保證了Java的可移植性。
  • 長整型數值有一個字尾L或l(如40000000L)。十六進位制數值有一個字首0x或0X(如0xCAFE)。八進位制有一個字首0,例如010對應八進位制中的8。
  • 從Java7開始,加上字首0b或者0B就可以寫二進位制數。例如0b1001就是9。另外,同樣從Java7開始,還可以為數字字面量加下劃線,如用1_000_000(或0b1111_0100_0010_0100_0000)表示一百萬。這些下劃線只是為了讓人更易讀。Java編譯器會去除這些下劃線。
int c = 0b1001;
int c1 = 3_1;
System.out.println(c);    //輸出9
System.out.println(c1);  //輸出31
複製程式碼
  • 絕大部分應用程式都採用double型別,只有很少的情況適合使用float型別。float型別的數值有一個字尾F或f(例如3.14F)。沒有字尾的浮點數值(如3.14)預設是double型別。
  • 浮點數溢位和出錯情況的三個特殊的浮點數值:正無窮大、負無窮大、NaN(不是一個數字)。例如,一個正整數除以0的結果就是正無窮大。計算0/0或者負數的平方根結果為NaN。:常量Double.POSITIVE_INFINITY、Double.NEGATIVE_INFINITY和Double.NaN。
if(Double.isNaN(x))          //check whether x is "not a number"
複製程式碼
  • char型別原本用於表示單個字元。不過,現在情況已經有所變化。如今,有些Unicode字元可以用一個char值描述,另外一些Unicode字元則需要兩個char值。
  • 位運算子:處理整型型別時,可以直接對組成整型數值的各個位完成操作。這意味著可以使用掩碼技術得到整數中的各個位。位運算子包括:
&("and")  |("or")   ^("xor")  ~("not")
複製程式碼
  • 列舉型別:
enum Size{SMALL, MEDIUM, LARGE};
Size s = Size.MEDIUM;
複製程式碼

字串

子串

子串:String類的substring方法可以從一個較大的字串提取出一個子串。

String greeting = "Hello";
String s = greeting.substring(0, 3);     //獲取"Hel"
複製程式碼

拼接

Java語言與絕大多數語言一樣,允許使用 + 號拼接兩個字串。 如果要把多個字串放在一起,用一個定界符分隔,可以使用靜態join方法

不可變字串

String類沒有提供修改字串的方法。如果希望修改,首先提取需要的字元,然後再拼接上替換的字串。

greeting = greeting.substring(0,3) + "p!";
複製程式碼

檢測字串是否相等

可以使用equals方法檢測兩個字串是否相等。

s.equals(t)
s.equalsIgnoreCase("hello")    //忽略大小寫比較
複製程式碼

一定不要使用==運算子檢測兩個字串是否相等!這個運算子只能確定兩個字串是否放在同一個位置上。

空串和Null串

空串""是長度為0的字串。可以呼叫以下程式碼檢查一個字串是否為空:

if(str.length() == 0)
或 if(str.equals(""))
複製程式碼

空串是一個Java物件,有自己的串長度(0)和內容(空)。不過,String變數還可以存放一個特殊的值,null。表示目前沒有任何物件與該變數關聯。檢查一個字串是否為null:

if(str == null)
複製程式碼

有時要檢查一個字串既不是空串也不是null

if(str != null && str.length() != 0)  //首先要檢查不為null。如果在null值上呼叫方法,會出現錯誤。
複製程式碼

構建字串

有時,需要由較短的字串構建字串。採用字串連線的方式達到此目的效率比較低。每次連線字串,都會構建一個新的String物件,既耗時,又浪費空間。使用StringBuilder類可以避免這個問題。

:在JDK5.0中引入StringBuilder類。這個類的前身是StringBuffer,其效率稍低,但允許採用多執行緒的方式執行新增或刪除字元的操作。如果所有字串在一個單執行緒中編輯(大部分時候),應該用StringBuilder替代它。這兩個類的API是相同的

大數值

如果基本的整數和浮點數精度不能滿足需求,那麼可以使用java.math包中的兩個很有用的類:BigInteger和BigDecimal。這兩個類可以包含任意長度數字序列的數值。BigInteger類實現了任意精度的整數運算,BigDecimal實現了任意精度的浮點數運算。

使用靜態的valueOf方法可以將普通數值轉換為大數值:

BigInteger a = BigInteger.valueOf(100);
複製程式碼

遺憾的是,不能使用人們熟悉的算術運算子(如: + 和 *)處理大數值。而需要使用大數值中的add和multiply方法。(減:subtract; 除: divide)

BigInteger c = a.add(b);          //  c = a + b
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));      // d = c * (b + 2)
複製程式碼

陣列

在宣告陣列變數時,需要指出陣列型別(資料元素型別緊跟[])和陣列變數的名字。下面宣告瞭整型陣列a:

int[] a;
複製程式碼

不過這條語句只宣告瞭變數a,並沒有將a初始化為一個真正的陣列。應該使用new 運算子建立陣列。

int[] a = new int[100];
複製程式碼

陣列初始化以及匿名陣列

在Java中,提供了一種建立陣列物件並同時賦予初始值的簡化書寫形式。下面是一個例子:

int[] smallPrimes = {2,3,5,7,11,13};   //在使用這種語句時,不需要呼叫new。
複製程式碼

甚至還可以初始化一個匿名的陣列:

new int[]{17,19,23,29,31,37};
複製程式碼

這種表示法將建立一個新陣列並利用括號中提供的值進行初始化,陣列的大小就是初始值的個數。使用這種語法形式可以在不建立新變數的情況下重新初始化一個陣列。例如:

smallPrimes = new int[]{17,19,23,29,31,37};
複製程式碼

這是下列語句的簡寫形式:

int[] annoymous = {17,19,23,29,31,37};
smallPrimes = annoymous;
複製程式碼

陣列拷貝

在Java中,允許將陣列變數拷貝給另一個陣列變數。這時,兩個變數將引用同一個陣列:

int[] luckyNumbers = smallPrimes;
luckyNumbers[5] = 12;    // now smallPrimes[5] is also 12
複製程式碼

如果希望將一個陣列的所有值拷貝到一個新的陣列中去,就要使用Arrays類的copyOf方法:

int[] copiedLuckyNumbers = Arrays.copyOf(luckyNubers, luckyNumbers.length);
複製程式碼

第二個引數是新陣列的長度。這個方法通常用來增加陣列的大小:

luckyNumbers = Arrays.copyOf(luckyNumbers, 2 * luckyNumbers.length);
複製程式碼

如果陣列元素是數值型,那麼多餘的元素將被賦值為0;如果陣列元素是布林型,則將賦值為false。相反,如果長度小於原始陣列的長度,則只拷貝最前面的陣列元素。

多維陣列

在Java中,宣告一個二維陣列相當簡單。例如:

double[][] balances;
複製程式碼

與一維陣列一樣,在呼叫new對多維陣列進行初始化之前不能使用它。在這裡可以這樣初始化:

balances = new double[NYEARS][NRATES];
複製程式碼

不規則陣列

Java實際上沒有多維陣列,只有一維陣列。多維陣列被解釋為“陣列的陣列”。 下面構建一個三角形的不規則矩陣陣列:

int[][] odds = new int[NMAX+1][];
for(int n = 0; n <= NMAX; n++){
    odds[n] = new int[n + 1];
}
複製程式碼

相關文章