求知過程之語法基礎階段一

1、java String.split丟失字符串 空的問題

String strtest     = "1,2,";
#String strtest     = ",1,2,";
String arry[]   = strtest.split(",");
這樣得到的數組元素個數只是2兩個,爲什麼呢,最後一個","後沒有內容,它沒有作爲空字符串成爲第三個數組元素,結尾的空字符串被丟棄了!這個函數還有另一種重載方式 :public String [] split (String  regex, int limit) 看下說明limit 參數控制模式應用的次數,因此影響所得數組的長度。如果該限制 n 大於 0,則模式將被最多應用 n  - 1 次,數組的長度將不會大於 n ,而且數組的最後一項將包含所有超出最後匹配的定界符的輸入。如果 n 爲非正,那麼模式將被應用盡可能多的次數,而且數組可以是任何長度。如果 n 爲 0,那麼模式將被應用盡可能多的次數,數組可以是任何長度,並且結尾空字符串將被丟棄。

而對於函數 public String [] split (String  regex)該方法的作用就是使用給定的表達式和限制參數 0 來調用兩參數 split方法。因此,所得數組中不包括結尾空字符串

所以如果不想讓結尾的空字符串被丟棄,那麼應該這樣寫(範例):


樣式1:
String str        = "1,2,";
String arr[]   = str.split(",");
System.out.println("內容"+i+"爲:"+arr[i]);
輸出:
內容1爲:1
內容2爲:2

樣式2:
String str        = ",1,,2,";
String arr[]   = str.split(",");
System.out.println("內容"+i+"爲:"+arr[i]);
輸出:
內容1爲:
內容2爲:1
內容3爲:
內容4爲:2

樣式3:
String str        = "1,2,";
String arr[]   = str.split(",", -1);
System.out.println("內容"+i+"爲:"+arr[i]);
輸出:
內容1爲:1
內容2爲:2
內容3爲:

樣式4:
String str        = ",1,,2,";
String arr[]   = str.split(",",-1);
System.out.println("內容"+i+"爲:"+arr[i]);
輸出:
內容1爲:
內容2爲:1
內容3爲:
內容4爲:2
內容5爲:

總結:

str.split(",")相當於str.split(",",0) 字符串最後一個爲空的情況下空情況丟失,字符串前方存在空則佔位。

2、Java中static、final、static final的區別

final:
final可以修飾:屬性,方法,類,局部變量(方法中的變量)
final修飾的屬性的初始化可以在編譯期,也可以在運行期,初始化後不能被改變。
final修飾的屬性跟具體對象有關,在運行期初始化的final屬性,不同對象可以有不同的值。
final修飾的屬性表明是一個常數(創建後不能被修改)。
final修飾的方法表示該方法在子類中不能被重寫,final修飾的類表示該類不能被繼承。

對於基本類型數據,final會將值變爲一個常數(創建後不能被修改);但是對於對象句柄(亦可稱作引用或者指針),final會將句柄變爲一個常數(進行聲明時,必須將句柄初始化到一個具體的對象。而且不能再將句柄指向另一個對象。但是,對象的本身是可以修改的。這一限制也適用於數組,數組也屬於對象,數組本身也是可以修改的。方法參數中的final句柄,意味着在該方法內部,我們不能改變參數句柄指向的實際東西,也就是說在方法內部不能給形參句柄再另外賦值)。

static:
static可以修飾:屬性,方法,代碼段,內部類(靜態內部類或嵌套內部類)
static修飾的屬性的初始化在編譯期(類加載的時候),初始化後能改變。
static修飾的屬性所有對象都只有一個值。
static修飾的屬性強調它們只有一個。
static修飾的屬性、方法、代碼段跟該類的具體對象無關,不創建對象也能調用static修飾的屬性、方法等
static和“this、super”勢不兩立,static跟具體對象無關,而this、super正好跟具體對象有關。
static不可以修飾局部變量。

static final和final static:
static final和final static沒什麼區別,一般static寫在前面。

static final:
static修飾的屬性強調它們只有一個,final修飾的屬性表明是一個常數(創建後不能被修改)。
static final修飾的屬性表示一旦給值,就不可修改,並且可以通過類名訪問。
static final也可以修飾方法,表示該方法不能重寫,可以在不new對象的情況下調用。

3、abstract(抽象)修飾符,可以修飾類和方法

     abstract修飾類,會使這個類成爲一個抽象類,這個類將不能生成對象實例,但可以做爲對象變量聲明的類型,也就是編譯時類型,抽象類就像當於一個類的半成品,需要子類繼承並覆蓋其中的抽象方法。

    abstract修飾方法,會使這個方法變成抽象方法,也就是隻有聲明(定義)而沒有實現,實現部分以";"代替。需要子類繼承實現(覆蓋)。

注意:有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。
abstract修飾符在修飾類時必須放在類名前。

抽象類和接口,兩者的區別:
a. 抽象類可以有構造方法,接口中不能有構造方法。
b. 抽象類中可以有普通成員變量,接口中沒有普通成員變量。
c. 抽象類中可以包含非抽象普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的方法。
d. 抽象類中的抽象方法的訪問權限可以是 public、protected 和(默認類型,雖然 eclipse 不報錯,但也不能用,默認類型子類不能繼承),接口中的抽象方法只能是 public 類型的,並且默認即爲 public abstract 類型。
e. 抽象類中可以包含靜態方法,在 JDK1.8 之前接口中不能不包含靜態方法,JDK1.8 以後可以包含。
f. 抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問權限可以是任意的,但接口中定義的變量只能是 public static final 類型的,並且默認即爲 public static final 類型。
g. 一個類可以實現多個接口,用逗號隔開,但只能繼承一個抽象類,接口不可以實現接口,但可以繼承接口,並且可以繼承多個接口,用逗號隔開。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章