java基礎常見問題,eclipse常用快捷鍵,java中正規表達式捕獲組的引用,lambda表達式
一、java常用庫
java.lang中
StringBuffer,StringBuilder,System,Runtime,Math
java.util
Date,Calendar,Random
java.text
日起格式化類SimpleDateFormat中有format,parse
二、線程安全問題的解決
方法一:使用同步代碼塊
synchronized(唯一共享對象){}
方法二:使用同步函數
使用synchronized修飾一個函數即可。
三、建立線程方法
方法一、将類聲明為
Thread
的子類。該子類應重寫
Thread
類的
run
方法。啟動線程的方法是該類執行個體對象調用start()方法。
方法二、聲明實作
Runnable
接口的類。該類然後實作
run
方法。要想啟動啟動線程還需要建立一個Thread類的執行個體對象,在構造方法中傳遞一個實作了
Runnable接口的的類執行個體,然後調用start()方法開啟線程。
四、疊代器使用的注意事項
在使用疊代器的過程中隻能使用疊代器進行添加或者删除元素,而不能使用集合類。
五、eclipse中常用的快捷鍵
1 代碼提示Alt+/
2 快速修複Ctrl+1
3 代碼塊上下移動Alt+方向鍵
4 代碼塊注釋Ctrl+Shift+/,取消代碼塊注釋Ctrl+Shift+\
5 删除目前行Ctrl+d
6 代碼格式化Ctrl+Shift+f
7 導入目前所有沒有導入的包Ctrl+Shift+o
六、導入子產品的靜态方法
例如:導入Arrays子產品的sort方法,import static java.util.Arrays.sort;
如果想要将靜态方法全部導入,就是import static java.util.Arrays.*;
七、foreacch語句的使用,使用在數組或實作Iterable接口的對象上。
比如ArrayList對象
ArrayList<String> al = new ArrayList<String>();
al.add("nice");
al.add("good");
al.add("well");
al.add("night");
for(String item:al){
System.out.println(item);
}
注意:在疊代過程中,不能使用集合對象增删資料,不然會抛出異常。
八、可變參數,必須是最後一個參數
九、集合類型的對象隻能添加對象,自動裝箱:将基本類型轉換成對應的引用類型。自動拆箱:将引用類型轉換成基本資料類型。
十、枚舉類,通常用于隻有有限個數值的集合
1) 枚舉類是一個特殊的類,枚舉類的預設構造方法的修飾符是private。
2) 枚舉類可定義自己的成員變量和成員函數
3) 可以定義抽象方法,但是在定義枚舉值時必須實作抽象方法
4) 枚舉值必須位于枚舉類的第一條語句
十一、正規表達式中捕獲組的重用,在同一個正規表達式中,如果用到捕獲組,想再次引用之前的捕獲組,使用方法是\num,意思是引用第num個捕獲組,注意num是從1開始的,在java字元串中\要轉義,是以是\\num。
比"([ab])\\1"會比對,aa、bb。如果模式是"([ab])(\\1){2,}"表示将第一捕獲組的引用作為一組,出現大于2次。
例子:将字元串中英文字母連續出現三次以上的字母去掉,如果去掉後重新組合的字元串中還有連續出現三次以上的字元,進行相同的處理。直到沒有三個以上連續的字元。
比如:ACDDDCCA處理後的結果是AA,代碼如下:
public static void main(String[] args) {
String instr = "ABCCDDDDCCB";
System.out.println(prostr(instr));
}
public static String prostr(String instr){
Pattern pattern = Pattern.compile("([a-zA-Z])(\\1){2,}");
Matcher matcher = pattern.matcher(instr);
if (matcher.find()) {
instr = matcher.replaceAll("");
instr = prostr(instr);
return instr;
}else {
return instr;
}
}
十二、java8中新增特性lambda表達式,對于隻有一個方法的接口,在Java 8中,現在可以把它視為一個函數
Lambda表達式的文法
基本文法:
(parameters) -> expression
或
(parameters) ->{ statements; }
比如:(int x, int y) -> x + y //接收2個int型整數,傳回他們的和
那麼現在可以使用匿名内部類和lambda來實作一個排序方法
1 匿名内部類實作
public static void sortString1(){
String[] names = {"Rafael Nadal", "Novak Djokovic",
"Stanislas Wawrinka", "David Ferrer",
"Roger Federer", "Andy Murray",
"Tomas Berdych", "Juan Martin Del Potro",
"Richard Gasquet", "John Isner"};
System.out.println("before compare:");
for (String string : names) {
System.out.println(string);
}
System.out.println();
Arrays.sort(names, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
System.out.println("after compare:");
for (String string : names) {
System.out.println(string);
}
}
2) lambda表達式實作
public static void sortString2(){
String[] names = {"Rafael Nadal", "Novak Djokovic",
"Stanislas Wawrinka", "David Ferrer",
"Roger Federer", "Andy Murray",
"Tomas Berdych", "Juan Martin Del Potro",
"Richard Gasquet", "John Isner"};
System.out.println("before compare:");
for (String string : names) {
System.out.println(string);
}
System.out.println();
Arrays.sort(names,(String s1,String s2)->(s1.compareTo(s2)));
System.out.println("after compare:");
for (String string : names) {
System.out.println(string);
}
}
