課程總結
課程總結
針對本學期學習的JAVA程序設計我做了以下總結:
1、本學期<Java程序設計>課程的主要內容
1)、基礎語法:Java關鍵字,標識符,類型轉換、直接量、變量、循環語句(if,for,switch)、方法、運算符、遞歸。
2)、面向對象編程(重中之重):面向對象設計思想、對象與內存(重點)、方法重載、對象創建使用、abstrsct的使用、final的使用、super的使用、static的使用、
package和import的運用、對象 轉型、多態、抽象類、接口等基本的知識點。其中重點掌握有封裝、繼承、多態、抽象類、接口。
3)、異常處理:try{...}catch(Exception e){...}、異常的分類、方法異常的拋出、自定義異常。
4)、數組:基本的數組操作、二維數組的使用。
5)、常用類:String類、StringBuffer類、Math類、File類等等。
6)、文件與數據流:輸入流 java.io.InputStream 、輸出流 java.io.OutputStream,帶緩存的輸入流和輸出流BufferedOutputStream、 BufferedOutputStream
帶緩存的讀寫器BufferedWreter BufferReader
7)、線程:線程的兩種實現方式,Synchronized關鍵字——同步,死鎖等問題。
8)、JDBC,MySQL,記事本操作。
2. Java 繼承
Java面對對象具有三大特性:
繼承:繼承是從已有類得到繼承信息創建新類的過程。提供繼承信息的類被稱為父類(超類、基類);得到繼承信息的類被稱為子類(派生類)。繼承讓變化中的軟件系統有了一定的延續性,同時繼承也是封裝程序中可變因素的
封裝:通常認為封裝是把數據和操作數據的方法綁定起來,對數據的訪問只能通過已定義的接口
多態:多態是指允許不同子類型的對象對同一消息作出不同的響應。要實現多態主要是做兩件事:重寫和重載。
2.1 方法重載和方法重寫
重載:是在一個類里面,是多態在編譯器的表現形式。判斷方法:
方法名相同
形參列表不同
重寫:是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。是多態的運行期間的表現形式。判斷條件:
方法名和形參列表相同
重寫方法的返回值或者拋出的異常類型要與被重寫的方法的返回值和拋出的異常相同,或者為其子類
重寫方法的訪問修飾符大于等于被重寫方法的訪問修飾符
注意事項:
靜態方法不存在重寫,形式上的重寫只能說是隱藏;
私有方法不存在重寫,父類中的private方法,子類中即使定義了也相當于一個新的方法;
2.2 抽象類和接口
抽象類(abstract)和接口(interface)的區別:
抽象類中可以有構造方法,接口中不能;
抽象類中可以有普通成員變量,接口中不能;
抽象類中可以包含非抽象的普通方法,接口不能;
抽象類中的訪問類型是:public、protected,接口中默認為:public abstract;
抽象類中可以包含靜態方法,接口中不能;
抽象類中的靜態成員變量類型任意,接口中僅為:public static final;
一個類只可以繼承(extends)一個抽象類,但一個類可以繼承(implements)多個接口;
3.3 super和this關鍵字
this關鍵字:是指向對象本身的一個指針。this只能在類中的非靜態方法中使用,靜態方法和靜態的代碼塊中絕對不能出現this。
表示類中的屬性和方法:函數參數或者參數中的局部變量和成員變量同名的情況下,成員變量被屏蔽,此時要訪問成員變量則需要用"this.成員變量名"來訪問成員變量。例如:
class B{
private int x = 1;
public void out(){
int x = 2;
System.out.print(x);//打印2
System.out.print(this.x);//打印1
}
}
表示當前對象:在函數中,需要引用該函數所屬類的當前對象時候,直接使用this
class C{
public static void main(String[] args){
C c1 = new C();
c1.tell();
}
public static void tell(){
System.out.print(this);//打印當前對象的字符串表示
}
}
super關鍵字:
子類調用父類的構造方法:用super(參數列表)的方式調用,參數不是必須的。同時,還要注意super(參數列表)這條語句只能在子類構造方法中的第一行。例如:
class A{
public A(){
System.out.print("A");
}
}
class B extends A{
public B(){
super();//調用父類構造方法,打印A
System.out.print("B");
}
}
訪問父類中被覆蓋的同名變量或者方法:如果子類覆蓋了父類的中某個方法的實現,可以通過使用 super 關鍵字來引用父類的方法實現。例如:
class A{
public int a = 1;//可以直接賦值,不用通過構造函數
public void say(){
System.out.print(a);
}
}
class B extends A{
private int a = 2;
public void say(){
System.out.print(super.a);//訪問父類的a變量,前提是父類的a變量是公有的
}
public void tell(){
super.say();//調用父類的say()方法而不是子類的say()方法
}
}
2.4 Java構造器
在Java中,構造方法的主要作用是完后才能對象的初始化工作,把定義對象的參數傳給對象的域。
注意事項:
構造方法的方法名必須與類名相同;
構造方法沒有返回類型,也不能定義為void,在方法名前不聲明方法類型;
一個類可以定義多個構造方法,如果類在定義時沒有定義構造方法,編譯器會自動插入一個無參數的默認構造器;
子類不繼承父類的構造器(構造方法或者構造函數)的,它只是調用(隱式或顯式)。如果父類的構造器帶有參數,則必須在子類的構造器中顯式地通過 super 關鍵字調用父類的構造器并配以適當的參數列表。如果父類構造器沒有參數,則在子類的構造器中不需要使用 super 關鍵字調用父類構造器,系統會自動調用父類的無參構造器。
3. Java 異常
Java把異常當作對象來處理,并定義一個基類java.lang.Throwable作為所有異常的超類。
3.1 Java異常分類
throwable又可以分為兩類:
Error:內部錯誤或者資源耗盡錯誤,當出現這些異常時,Java虛擬機(JVM)一般會選擇終止線程
Exception:通常情況下是可以被程序處理的,并且在程序中應該盡可能的去處理這些異常。
Exception又可分為:
UncheckedException:是程序運行時錯誤,常見的異常有:
ClassNotFoundException:應用程序試圖加載類時,找不到相應的類,拋出該異常。
IllegalAccessException:拒絕訪問一個類的時候,拋出該異常。
InterruptedException:一個線程被另一個線程中斷,拋出該異常。
NoSuchMethodException:請求的方法不存在
NullPointerException:空指針異常
IndexOutOfBoundsException: 數組角標越界異常,常見于操作數組對象時發生。
ClassCastException: 數據類型轉換異常
NumberFormatException: 字符串轉換為數字異常;出現原因:字符型數據中包含非數字型字符。
CheckedException:需要用 try…catch… 語句捕獲并進行處理,并且可以從異常中恢復,常見的有:
IOException
SQLException
3.2 異常處理機制
Java的異常處理機制可分為:
異常捕獲:try、catch 和 finally
異常拋出:throws、throw
對于異常捕獲,我們需要注意的是一下幾點:
try語句在返回前,將其他所有的操作執行完,保留好要返回的值,而后轉入執行finally中的語句,而后分為以下三種情況:
情況一:如果finally中有return語句,則會將try中的return語句”覆蓋“掉,直接執行finally中的return語句,得到返回值,這樣便無法得到try之前保留好的返回值。
情況二:如果finally中沒有return語句,也沒有改變要返回值,則執行完finally中的語句后,會接著執行try中的return語句,返回之前保留的值。
情況三:如果finally中沒有return語句,但是改變了要返回的值,這里有點類似與引用傳遞和值傳遞的區別,分以下兩種情況:
如果return的數據是基本數據類型或文本字符串,則在finally中對該基本數據的改變不起作用,try中的return語句依然會返回進入finally塊之前保留的值。
如果return的數據是引用數據類型,而在finally中對該引用數據類型的屬性值的改變起作用,try中的return語句返回的就是在finally中改變后的該屬性的值
對于異常的拋出,需要注意的是:throws和throw的區別,
throw:
throw 語句用在方法體內,表示拋出異常,由方法體內的語句處理。
throw 是具體向外拋出異常的動作,所以它拋出的是一個異常實例,執行 throw 一定是拋出了某種異常
throws:
throws 語句是用在方法聲明后面,表示如果拋出異常,由該方法的調用者來進行異常的處理。
throws 主要是聲明這個方法會拋出某種類型的異常,讓它的使用者要知道需要捕獲的異常的類型。
throws 表示出現異常的一種可能性,并不一定會發生這種異常。
4. Java Object
4.1 Object方法概述
Java中的Object類是所有類的父類,它提供了以下11個方法:
public final native Class<?> getClass():返回當前運行時對象的Class對象,getClass方法是一個final方法,不允許子類重寫,并且也是一個native方法。
public native int hashCode(): 返回散列值,而 equals() 是用來判斷兩個實例是否等價。等價的兩個實例散列值一定要相同,但是散列值相同的兩個實例不一定等價。
public boolean equals(Object obj):在非空對象引用上equlas具有以下特性:
(一)自反性
x.equals(x); // true
1
(二)對稱性
x.equals(y) == y.equals(x) // true
1
(三)傳遞性
if(x.equals(y) && y.equals(z)) {
x.equals(z); // true;
}
(四)一致性:多次調用 equals() 方法結果不變
x.equals(y) == x.equals(y); // true
(五)與 null 的比較:對任何不是 null 的對象 x 調用 x.equals(null) 結果都為 false
x.euqals(null); // false;
protected native Object clone() throws CloneNotSupportedException:是一個protected的native方法。由于Object本身沒有實現Cloneable接口,所以不重寫clone方法并且進行調用的話會拋出異常。且clone函數具有以下特性:
x.clone()!=x:x.clone()返回的對象為新建的對象,與原來的對象地址不同。
x.clone().getClass() == x.getClass():克隆出的對象與原對象都是同一個類生成的。
x.clone().equals(x):新的對象與原來的對象相同(在equals()函數下是相同的,所以通常需要覆蓋equals()方法)
public String toString():Object對象的默認實現,即輸出類的名字@實例的哈希碼的16進制
public final native void notify():是一個native方法,并且也是final的,不允許子類重寫。喚醒一個在此對象監視器上等待的線程(監視器相當于就是鎖的概念)。如果所有的線程都在此對象上等待,那么只會選擇一個線程。選擇是任意性的,并在對實現做出決定時發生。
public final native void notifyAll():跟notify一樣,唯一的區別就是會喚醒在此對象監視器上等待的所有線程,而不是一個線程。
public final native void wait(long timeout) throws InterruptedException:是一個native方法,并且也是final的,不允許子類重寫。wait方法會讓當前線程等待直到另外一個線程調用對象的notify或notifyAll方法,或者超過參數設置的timeout超時時間。
public final void wait(long timeout, int nanos) throws InterruptedException:跟wait(long timeout)方法類似,多了一個nanos參數,這個參數表示額外時間(以毫微秒為單位,范圍是 0-999999)
public final void wait() throws InterruptedException:跟之前的2個wait方法一樣,只不過該方法一直等待,沒有超時時間。
protected void finalize() throws Throwable { }:該方法的作用是實例被垃圾回收器回收的時候觸發的操作finalize方法是一個protected方法,Object類的默認實現是不進行任何操作。
4.2 “==”和equals的區別:
==:如果比較的對象是基本數據類型,則比較的是數值是否相等;如果比較的是引用數據類型,則比較的是對象的地址值是否相等。在不遇到算術運算的情況下,不會自動拆箱。
equals():用來比較方法兩個對象的內容是否相等。
注意:equals 方法不能用于基本數據類型的變量,如果沒有對 equals 方法進行重寫,則比較的是引用類型的變量所指向的對象的地址。
本學期的JAVA學習使我感到很艱難,因為沒有真正弄懂JAVA的真正含義,使自己的思維跟不上,學習還不夠努力,從而在學習的過程中出現了很多狀況,
這使我認識到學習java應該是循環漸進,有始有終。基礎掌握的不好,如果沒有真正弄懂JAVA各種語法的真正含義,在學習的過程中就會不斷地翻書去看前面的知識,
從而導致學的不夠好和浪費時間 ,java是一門有著階梯性的語言,我們應該按照java的學習體系,從最簡單最基礎的開始學,只有這樣,我們在學習中才會遇到更少的麻煩.
java是一門更傾向于網絡的語言,只有學好基礎,才能夠研究更高級的知識,因為沒有基礎.在以后的學習中很可能遇到很多的麻煩。在本學期過后我會繼續努力,在復習舊的知識的同時。
學習新的知識,提高自己。
浙公網安備 33010602011771號