Java基础总结(一)
1. 面向對象的特征
面向對象的特征包括抽象、封裝、繼承和多態。
抽象就是忽略一個主題中與當前目標無關的某些方面,以便更加充分的注意到與當前目標有關的方面。抽象并不打算了解全部的問題,而只是其中的一部分,暫時不用考慮細節。抽象包括兩個方面,第一是過程抽象,第二是數據抽象。
封裝是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。
封裝了好處在于將變化進行了隔離,便于使用,提高了服用性,同時由于可以避免外部對于屬性的直接訪問,提高了安全性。
封裝的原則:將不需要對外提供的內容都隱藏起來;把屬性都隱藏,提供公共的方法對其訪問。
private是一個權限修飾符,被private修飾的成員只在本類中有效。私有是封裝的一種體現,但封裝不僅僅是私有。
繼承,繼承是一種連接類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述性的方法,一個類可以從一個現有的類派生,新類繼承了原始類的特性,新類稱為子類或者派生類,原始類稱為父類也叫基類。派生類可以從它的基類繼承方法和實例變量,并且類可以增加或者修改新的方法,使其更適合特殊的需要。
多態,多態性是指允許不同類的對象對同一個消息做出響應,多態性包括參數化多態性和包含多態性,多態性語言具有靈活、抽象、行為共享和代碼共享的優勢,很好的解決了應用程序中函數同名的問題。
2. Overload和Override有什么區別
方法的重寫overriding和重載Overloading是java多態性的不同表現。重寫Overriding是父類和子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫(Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對他而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading).
3. abstract class 和 interface有什么區別?
抽象類用于創建一個體現某些基本行為的類,并為該類聲明方法,但不能在該類中實現該類的情況。接口是抽象類的變體。在接口中,所有方法都是抽象的。抽象類的子類為他們的父類中的所有抽象方法提供實現,否則他們也是抽象類。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。
4. 當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是該對象的引用,對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會變的。
5. abstract的method是否可以同時是static,是否可以同時是native,是否可以是synchronized?
都不能。
??abstract用來聲明抽象的方法,抽象方法并沒有方法類,不能被直接調用,必須在子類overriding后才能使用,所以訪問被abstract修飾的方法依賴于具體的對象實例,而被static修飾的方法是被直接訪問的,這就引發了邏輯中的沖突,同時還要注意,父類中是靜態方法,子類中不能覆蓋為非靜態方法。
native修飾的方法是本地方法,該方法的實現由非java語言實現,比如c語言,一般用于java與外界語言交互或者與操作系統交互,native可以和除abstract之外的所有java標識符連用,因為native方法是有實現體的,只不過這些實現體是由非java語言實現的,但是abstract卻是顯明的指定這個方法是沒有實現體的。
synchronized,用于防止多個線程同時調用一個對象的該方法,使用它的前提是該方法可以被對象直接調用的,顯然和abstract不能同時連用。
6. 接口是否可以繼承接口?抽象類是否可以實現接口?抽象類是否可繼承實體類?
接口可以繼承接口。抽象類可以實現接口,抽象類可以繼承實體類,但前提是實體類必須有明確的構造函數。
7. Java關鍵字注意點
所有的java關鍵字都是小寫的
goto和const是保留關鍵字,在java中沒有使用
true,false,null不是嚴格意義上的關鍵字,而是文字常量
8. 數組
數組的兩種初始化方式:靜態初始化和動態初始化
動態初始化數組必須給出長度,否則將報"缺少數組維數"的錯誤
動態初始化二維數組時,可以只指定第一維德長度而不指定第二維的
當數組包含的元素是引用數據類型的時候,必須為每個元素實例化,否則在使用的時候會出現空指針異常。
9. float和double都不能進行精確運算。
例如2.0-1.1并不等于0.9,因為計算機使用的二進制并不能準備的表示浮點數
不能簡單的使用四舍五入的方法解決上述問題
可以使用BigDecimal類來解決這個問題。
BigDecimal a1 = new BigDecimal(Double.toString(2.0));
BigDecimal a2 = new BigDecimal(Double.toString(1.1));
System.out.println(a1.subtract(a2).doubleValue());
10. 自增自減運算符陷阱
main(String[] args){
int j = 0;
for(int i = 0; i < 100; i++){
j = j ++;
}
System.out.println(j);//打印出來的結果是0,因為j = j++,jvm工作時,先運算j++然后將j自增之前的值賦給左側的j
}
11. 字符與字符串陷阱
System.out.println("a" + "b");// ab, 字符串的拼接
System.out.println('a' + 'b');// 195, 字符a的ascii碼加上b的ascii碼
System.out.println("a" + 'b');// ab,字符b被轉化成了字符串b
12. java中的異常處理機制的簡單原理和應用
java程序違反了java的語義規則時,java虛擬機就會將發生的錯誤表示為一個異常。違反語義規則包括兩種情況。一種是java類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發NullPointerException.另外一種情況就是java允許程序員擴展這種語義檢查,程序員可以創建自己的異常,并自由選擇在何時使用throw關鍵字引發異常。所有的異常都是java.lang.Throwable的子類.
13. finalize方法是在垃圾回收器刪除對象之前對這個對象調用的一個方法.
14. 什么時候使用assert?
通常在開發和測試時使用,在軟件發布后關閉。
15. 構造函數
構造函數:構建創造對象時調用的函數,創建對象都必須要通過構造函數初始化。
作用:可以給對象進行初始化。
一個類中如果沒有定義過構造函數,那么該類中會有一個默認的空參數構造函數,如果在類中定義了指定的構造函數,那么類中的默認構造函數就沒有了。
一般函數和構造函數什么區別呢?
a. 構造函數:對象創建時,就會調用與之對應的構造函數,對對象進行初始化。
? ? 一般函數:對象創建后,需要函數功能時才調用。
b. 構造函數:對象創建時,會調用只調用一次。
? ? 一般函數:對象創建后,可以被調用多次。
什么時候定義構造函數呢?
在描述事物時,該事物一存在就具備的一些內容,這些內容都定義在構造函數中。
構造函數可以有多個,用于對不同的對象進行針對性的初始化.
多個構造函數在類中是以重載的形式來體現的。
細節:
1,構造函數如果完成了set功能。set方法是否需要。
2,一般函數不能直接調用構造函數。
3,構造函數如果前面加了void就變成了一般函數。
4,構造函數中是有return語句的,ps,可以利用這個特點來控制構造函數的初始化,比如if(age>10){return;}用來實現如果age>10那么就拒絕初始化.
16. this引用
當成員變量和局部變量重名,可以用關鍵字this來區分。如?
Person(String name) {this.name = name; }this : 代表對象。代表哪個對象呢?當前對象。
this就是所在函數所屬對象的引用。
簡單說:哪個對象調用了this所在的函數,this就代表哪個對象。
this也可以用于在構造函數中調用其他構造函數。
注意:只能定義在構造函數的第一行。因為初始化動作要先執行。
17. 字符串的拼接:
為連接n個字符串而重復的使用字符串連接操作符(+),需要n的平方級的時間。例如: s4 = s1 + s2 + s3;
不過如果被拼接的字符串都是字面量的話,java編譯器在編譯器就會將其優化。如: S4= "a" + "b" + "c";變異完成的時候S4的值就是"abc".
轉載于:https://www.cnblogs.com/byron0918/p/4663211.html
總結
以上是生活随笔為你收集整理的Java基础总结(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Word转换pdf方法:pdf虚拟打印机
- 下一篇: 小米随身wifi驱动linux驱动下载,