JAVA特殊概念總結
這篇博文用來記錄java相較於c/c++的新的概念和特性,個人對此的一點心得。
1.裝箱
官方定義:由編譯器特別支援的包稱為裝箱,當內建資料型別被當做物件使用的時候,編譯器會把內建型別裝箱為包裝類。相似的,編譯器也會把一個物件拆箱為內建型別
public class Test{
Integer x=5;
x=x+10;
System.out.println(x);
}
心得小記
java中參與運算的基本都是例項化後的物件,類才能例項化物件,所以Integer應該作為一個類。編譯器起到了將內建型別int轉化為包裝類Integer的功能。之後為了使x能夠進行運算,編譯器就可以把一個內建物件拆箱為內建型別。
2.java建立格式化字串
輸出格式化數字(%d等等類似的)可以使用printf()和format()方法,對於String類來說,使用靜態方法format()返回一個String物件而不是PrintStream物件,因此String類的靜態方法format()能夠用來建立可複用的格式化字串,而不僅僅是用於一次列印輸出
//列印輸出的兩種方式
//方式一
System.out.print("浮點型變數的值為%f",floatVar);
//方式二
String fs;
fs=String.format("浮點型變數的值為%f",floatVar1);
3. JAVA StringBuffer類和 JAVA StringBuilder類
操作字串時需要用到這兩個類,JAVA StringBuilder類有速度優勢,但是需要保證執行緒安全時要用JAVA StringBuffer類
public class Test{
StringBuffer sBuffer=new StringBuffer("Hello");
sBuffer.append("world");
System.out.println(sBuffer);
}
4.Java foreach迴圈
JDK1.5引進了一種新的迴圈,被稱為foreach迴圈或加強型迴圈,能在不使用下標的情況下遍歷陣列
public class TestArray{
public static void main(String[] args){
double[] myList ={1,2,3,4,5};
for (double element:myList){
System.out.println(element);
}
}
}
5.JAVA為二維陣列 分配 空間
注意這裡的分配方式是從高維開始,分別為每一維分配空間
String s[][]=new String[2][];
//為最高維分配引用空間,為最高維限制其能儲存資料最長的長度
s[0]=new String[2];
s[1]=new String[3];
//為每個陣列元素單獨分配空間
s[0][0]=new String("good");
s[0][1]=new String("luck");
7.java異常處理
三種類型的異常:
- 檢查性異常:最具代表性的異常是使用者錯誤引起的異常。例如開啟一個不存在的檔案就會發生一個異常,這些異常在編譯時不能被簡單的忽略
- 執行時異常:執行時異常是可能被程式設計師避免的異常,是程式設計師無法忽視的,執行時異常可以在編譯時被忽略
- 錯誤:錯誤不是異常,而是脫離程式設計師控制的問題,錯誤在程式碼中通常被忽略。如當棧溢位時就會發生錯誤在編譯時檢查不到
捕獲異常
try{
//程式程式碼
}catch(ExceptionName e1)//catch語句要包含捕獲異常型別的宣告{
//Catch 塊:當保護程式碼塊中發生一個異常時,try後面的catch塊就會被檢查。如果發生的異常包含在該catch塊中,異常會被傳遞到該catch塊,類似於方法傳參
}
多重捕獲塊
一個try程式碼塊後面跟隨多個catch程式碼塊的情況即多重捕獲
try{
//程式程式碼
}catch(異常型別1,異常變數1){
//程式程式碼
}catch(異常型別2,異常變數2){
//程式程式碼
}catch(異常型別3,異常變數3){
//程式程式碼
}
throws/throw關鍵字
如果一個方法沒有捕獲一個檢查性異常,那麼該方法必須使用throw關鍵字來宣告,throw關鍵字放在方法簽名的尾部。一個方法可以宣告丟擲多個異常。
finally關鍵字
finally關鍵字用來建立在try程式碼塊後面執行的帶媽媽快,無論是否發生異常,finally程式碼塊後的程式碼總會被執行。finally程式碼塊中可以執行清理型別等收尾善後性質的語句
try {//程式程式碼
}catch(異常型別 異常變數){
//程式程式碼}finally{
//程式程式碼}
宣告自定義異常
在java中可以自定義異常。注意
- 所有異常必須是Throw的子類
- 檢查性異常類需要繼承自Exception類
- 執行時異常類需要繼承自RuntimeException類
- 一個異常類和其他類一樣,包含變數和方法
//例如
class MyException extends Exception{
}
java中定義了兩種型別的異常和錯誤:
- JVM(java虛擬機器異常):由JVM丟擲的異常或錯誤
程式及異常:由程式或API程式丟擲的異常
8.java正則表示式
不是很新但是有點特別:
正則表示式可以通過匹配的方法搜尋、編輯、處理文字。在其他語言,\僅表示插入一個特殊的反斜槓,
在 java中,\表示後面要插入一個正則表示式的反斜線,因此其後的字元具有特殊的意義,比如\d代表一位數字
```java
//用正則表示式從一個給定的字串中找到數字串
public class RegexMatches{
public static void main(String [] args){
//按照指定模式在字串查詢
String line ="This order was placed for QT3000!OK?"
String pattern ="(\\D*)(\\d+)(.*)";
//建立pattern物件
Pattern r=Parttern.compile(pattern);
//建立matcher物件
Matcher m=r.matcher(line);
if(m.find()){
System.out.println("Found value: "+m.group(0) );//group(0)代表整個字串
System.out.println("Found value: "+m.group(1) );//group(1)分組處理後的第一組
System.out.println("Found value: "+m.group(2) );
System.out.println("Found value: "+m.group(3) );
}else{
System.out,println("NO MATCH");
}
}
}