接口
接口,在JAVA編程語言中是一個抽象類型,是抽象方法的集合,接口通常以interface來聲明。一個類通過繼承接口的方式,從而來繼承接口的抽象方法。
內部類接口並不是類,編寫接口的方式和類很相似,但是它們屬於不同的概念。類描述對象的屬性和方法。接口則包含類要實現的方法。
除非實現接口的類是抽象類,否則該類要定義接口中的所有方法。
接口無法被實例化,但是可以被實現。一個實現接口的類,必須實現接口內所描述的所有方法,否則就必須聲明爲抽象類
作用:
看起來並不相關的類內對象若有統一的行爲,即可設置一個接口。
接口的聲明
語法格式如下:
內部類接口有以下特性:
1.接口是隱式抽象的,當聲明一個接口的時候,不必使用abstract關鍵字。
2.接口中每一個方法也是隱式抽象的,聲明時同樣不需要abstract關鍵字。
3.接口中的方法都是公有的。
接口的實現
利用接口設計類的過程,稱爲接口的實現。使用implements關鍵字。
語法:
public class 類名稱 implements 接口名稱{
//在類體中實現接口的方法
//本類聲明的更多變量和方法
}
注意:
- 必須實現接口中的所有方法。
- 來自接口的方法必須聲明成public。
以下是一個利用接口計算面積的例子:
運行結果:
實現多個接口的語法:
- 一個類可以實現多個接口,通過這種機制可實現對設計的多重繼承。
- 實現多個接口的語法如下:
[類修飾符] pclass 類名稱 implements 接口1,接口2,.....
{
....
}
接口的擴展
- 實現一個接口的類也必須實現其超接口。
- 接口擴展的語法
interface 子接口名稱 extends 超口的名稱1,超接口的名稱2,....
{
....
}
抽象類和接口的區別
-
抽象類中的方法可以有方法體,就是能實現方法的具體功能,但是接口中的方法不行。
-
抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。
-
接口中不能含有靜態代碼塊以及靜態方法(用 static 修飾的方法),而抽象類是可以有靜態代碼塊和靜態方法。
-
一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。
匿名類
匿名類是不能有名稱的類,所以沒辦法引用它們。必須在創建時,作爲new語句的一部分來聲明它們。匿名類相當於在定義類的同時再新建這個類的實例
匿名類有兩種:
1、與子類有關的匿名類
2、與接口有關的匿名類
匿名類特點
- 它必須繼承一個類或者實現一個接口,而不能顯示的使用extends或者implements,沒有父類。
- 匿名類沒有構造方法。通過new<父類名> 創建對象,匿名類定義與創建對象是同時進行的。
- 匿名類只能一次性的創建,並有父類句柄持有。
- 匿名類不需要初始化,只有默認的構造方法
內部類
將一個類定義在另一個類裏面或者一個方法裏面,這樣的類稱爲內部類。
廣泛意義上的內部類一般來說包括這四種:成員內部類、局部內部類、匿名內部類和靜態內部類。
成員內部類
class Person{
double age;
public height(double age){
this.age = age;
}
class student{ //內部類
public void heightSahpe(){
System.out.println("heightSahpe");
}
}
}
Person稱爲外部類。成員內部類可以無條件訪問外部類的所有成員屬性和成員方法(包括private成員和靜態成員)。
當成員內部類擁有和外部類同名的成員變量或者方法時,會發生隱藏現象,即默認情況下訪問的是成員內部類的成員。如果要訪問外部類的同名成員,需要以下面的形式進行訪問:
外部類.this.成員變量
外部類.this.成員方法
在外部類中如果要訪問成員內部類的成員,必須先創建一個成員內部類的對象,再通過指向這個對象的引用來訪問:
以下代碼演示外部類如何訪問內部類方法:
運行結果:
局域內部類
局部內部類是定義在一個方法或者一個作用域裏面的類,它和成員內部類的區別在於局部內部類的訪問僅限於方法內或者該作用域內。
局域內部類不能私有化和靜態化。
匿名內部類
使用匿名內部類的前提條件:必須繼承一個父類或實現一個接口。
注意:
- 無法引用匿名內部類
- 匿名內部類不能有構造方法
- 一個匿名內部類一定是在new的後面,用其隱含實現一個接口或實現一個類。
- 匿名內部類不能是public,protected,private
靜態內部類
靜態內部類也是定義在另一個類裏面的類,只不過在類的前面多了一個關鍵字static。它不能使用外部類的非static成員變量或者方法。
異常處理
異常是程序中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候是可以避免的。 【相當於C語言中的bug】
- Java中聲明瞭很多異常類,每個異常類都代表了一種運行錯誤,類中包含了:
- 該運行錯誤的信息
- 處理錯誤的方法
- 每當java程序運行過程中發生一個可識別的運行錯誤時,即該錯誤有一個異常類與之相對應時,系統都會產生一個相應的該異常類的對象,即產生一個異常。
異常發生的原因有很多,通常包含以下幾大類
- 用戶輸入了非法數據。
- 要打開的文件不存在。
- 網絡通信時連接中斷,或者JVM內存溢出。
捕獲異常
try
{
// 程序代碼
}catch(ExceptionName e1)
{
//Catch 塊
}
Catch 語句包含要捕獲異常類型的聲明。當保護代碼塊中發生一個異常時,try 後面的 catch 塊就會被檢查。
如果發生的異常包含在 catch 塊中,異常會被傳遞到該 catch 塊,這和傳遞一個參數到方法是一樣。
通過throws拋出異常
定義一個方法的時候可以使用throws關鍵字聲明。使用throws關鍵字聲明的方法表示此方法不處理異常,而交給方法調用處進行處理。
finally關鍵字
finally 關鍵字用來創建在 try 代碼塊後面執行的代碼塊。 無論是否發生異常,finally 代碼塊中的代碼總會被執行。 在 finally 代碼塊中,可以運行清理類型等收尾善後性質的語句。
finally 代碼塊出現在 catch 代碼塊最後,語法如下:
注意:
- catch 不能獨立於 try 存在。
- 在 try/catch 後面添加 finally 塊並非強制性要求的。
- try 代碼後不能既沒 catch 塊也沒 finally 塊。
- try, catch, finally 塊之間不能添加任何代碼。
集合
集合用於容納常規編程運行時所需的對象。Java集合類存放於 java.util 包中,是一個用來存放對象的容器。