Android開發知道的基本知識點總(三)

1.靜態屬性和靜態方法是否可以被繼承?是否可以被重寫?以及原因?
  答:結論:java中靜態屬性和靜態方法可以被繼承,但是沒有被重寫(overwrite)而是被隱藏.
原因:
1). 靜態方法和屬性是屬於類的,調用的時候直接通過類名.方法名完成對,不需要繼承機制及可以調用。如果子類裏面定義了靜態方法和屬性,那麼這時候父類的靜態方法或屬性稱之爲"隱藏"。如果你想要調用父類的靜態方法和屬性,直接通過父類名.方法或變量名完成,至於是否繼承一說,子類是有繼承靜態方法和屬性,但是跟實例方法和屬性不太一樣,存在"隱藏"的這種情況。
2). 多態之所以能夠實現依賴於繼承、接口和重寫、重載(繼承和重寫最爲關鍵)。有了繼承和重寫就可以實現父類的引用指向不同子類的對象。重寫的功能是:"重寫"後子類的優先級要高於父類的優先級,但是“隱藏”是沒有這個優先級之分的。
3). 靜態屬性、靜態方法和非靜態的屬性都可以被繼承和隱藏而不能被重寫,因此不能實現多態,不能實現父類的引用可以指向不同子類的對象。非靜態方法可以被繼承和重寫,因此可以實現多態。

2.靜態內部類的設計意圖成員內部類、靜態內部類、局部內部類和匿名內部類的理解,以及項目中的應用
  答:內部類
內部類,即定義在一個類的內部的類。爲什麼有內部類呢?
我們知道,在java中類是單繼承的,一個類只能繼承另一個具體類或抽象類(可以實現多個接口)。這種設計的目的是因爲在多繼承中,當多個父類中有重複的屬性或者方法時,子類的調用結果會含糊不清,因此用了單繼承。
而使用內部類的原因是:每個內部類都能獨立地繼承一個(接口的)實現,所以無論外圍類是否已經繼承了某個(接口的)實現,對於內部類都沒有影響。
在我們程序設計中有時候會存在一些使用接口很難解決的問題,這個時候我們可以利用內部類提供的、可以繼承多個具體的或者抽象的類的能力來解決這些程序設計問題。可以這樣說,接口只是解決了部分問題,而內部類使得多重繼承的解決方案變得更加完整。

靜態內部類
說靜態內部類之前,先了解下成員內部類(非靜態的內部類)。
   成員內部類:也是最普通的內部類,它是外圍類的一個成員,所以它可以無限制的訪問外圍類的所有成員屬性和方法,儘管是private的,但是外圍類要訪問內部類的成員屬性和方法則需要通過內部類實例來訪問。
在成員內部類中要注意兩點:
   成員內部類中不能存在任何static的變量和方法;
   成員內部類是依附於外圍類的,所以只有先創建了外圍類才能夠創建內部類。
靜態內部類與非靜態內部類之間存在一個最大的區別:非靜態內部類在編譯完成之後會隱含地保存着一個引用,該引用是指向創建它的外圍內,但是靜態內部類卻沒有。
沒有這個引用就意味着:
  它的創建是不需要依賴於外圍類的。
  它不能使用任何外圍類的非static成員變量和方法。

局部內部類
局部內部類是嵌套在方法和作用於內的,對於這個類的使用主要是應用與解決比較複雜的問題,想創建一個類來輔助我們的解決方案,到那時又不希望這個類是公共可用的,所以就產生了局部內部類,局部內部類和成員內部類一樣被編譯,只是它的作用域發生了改變,它只能在該方法和屬性中被使用,出了該方法和屬性就會失效。

匿名內部類
1、匿名內部類是沒有訪問修飾符的。
2、new 匿名內部類,這個類首先是要存在的。
3、當所在方法的形參需要被匿名內部類使用,那麼這個形參就必須爲final。
4、匿名內部類沒有明面上的構造方法,編譯器會自動生成一個引用外部類的構造方法。

3.string 轉換成 integer的方式及原理

Integer轉String
//方法一:Integer類的靜態方法toString()
Integer a = 2;
String str = Integer.toString(a)
//方法二:Integer類的成員方法toString()
Integer a = 2;
String str = a.toString();
//方法三:String類的靜態方法valueOf()
Integer a = 2;
String str = String.valueOf(a);

String轉Integer
當我們要把String轉化爲Integer時,一定要對String進行非空判斷,否則很可能報空指針異常。
String str = "...";
Integer i = null;
if(str!=null){
     i = Integer.valueOf(str);
}
還有更多格式之間的轉換:列如:

 1.Integer轉換成int的方法  
Integer i = new Integer(10);  
int k = i.intValue(); 
即Integer.intValue(); 
  
2.int轉換成Integer  
int i = 10;  
Integer it = new Integer(i); 

3.String轉換成int的方法  
String str = "10";   
Integer it = new Interger(str);    
int i = it.intValue();   
即:int i = Integer.intValue(string); 
  
4.int轉換成String  
int i = 10;  
(1)String s = String.valueOf(i);  
(2)String s = Ingeger.toString(i);  
(3)String s = "" + i; 
  
5.String轉換成Integer  
String str = "10";  
Integer it = Integer.valueOf(str); 
  
6.Integer轉換成String  
Integer it = new Integer(10);  
String str = it.toString(); 
 
7.String轉換成BigDecimal  
BigDecimal bd = new BigDecimal(str); 
 
8.日期  
Calendar calendar = Calendar.getInstance(); 
int year = calendar.get(Calendar.YEAR); 
int month = calendar.get(Calendar.MONTH)+1; 
int day = calendar.get(Calendar.DATE);  
//獲取今天的日期字符串 
String today = java.text.DateFormat.getDateInstance().format(new java.util.Date()); 
//獲取今天的日期 
new java.sql.Date(System.currentTimeMillis()); 

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