final
final可以修飾數據,方法,類
final修飾某個量的時候,這個量稱之爲常量---定義好之後不可改變---對於基本類型,指的是值不可變;對於引用類型,指的是地址不可變,但是其中的屬性值可以改變
public class Demo {
private final int i;
public Demo(){ this(5); } public Demo(int i){ this.i = i; } }
Demo d = new Demo(5);
final修飾方法稱之爲最終方法---不可被重寫--但是可以被繼承,可以進行重載
final修飾類稱之爲最終類---不可被繼承---最終類中的方法無法被重寫
子類在繼承父類的時候,哪些東西是在子類中不可見的?---private,代碼塊,構造函數
abstract抽象方法
如果所有的子類中存在了一些名稱一致而細節不同的方法的時候,這個時候可以在父類中聲明該行爲,此時聲明行爲的時候不需要添加方法體,所以此時該方法就形成了抽象方法---abstract修飾---抽象方法所在的類一定是抽象類。
抽象類不能實例化/創建對象,但是有構造方法/函數
抽象類中可以有抽象方法也可以沒有抽象方法。抽象類中可以定義一切的屬性以及普通方法和靜態方法。
抽象方法之間可以重載嗎?---可以---重載只關心方法名和參數列表
抽象方法可以用static/final/private修飾嗎?---不可以
如果一個抽象方法的權限修飾符是默認權限,對子類是否有要求?---要求父子類必須同包
最終類可以是抽象類嗎?---不可以
接口
用interface來聲明一個接口。---用implements來實現一個接口。類在實現接口之後需要實現接口中所有的抽象方法。
用implements關鍵字讓類和接口之間產生練習,這種聯繫稱之爲實現。
接口中的方法默認是抽象方法而且只能是抽象方法(JDK1.7及其以前)。
單繼承,多實現---一個類只能繼承一個父類,但是可以實現多個接口---一旦出現了多實現,那就必不可免的可能會導致方法的混亂---針對的是類
interface A{ void m();// 默認是public修飾 } public class B implements A{ void m(){ // 接口中的方法默認是public修飾---重寫 一大 原則 // 需要添加修飾符public System.out.println(“B m()”); } }
在Java中,接口可以繼承接口,---接口之間是多繼承
接口中不允許定義構造方法---雖然接口在編譯完成之後會產生class文件,但是接口不是類
接口中的方法默認是抽象方法,接口中的量默認是靜態常量---接口中可以定義屬性,默認用public static final修飾
抽象類在實現接口之後一定要實現這個接口中的所有的抽象方法嗎?---不一定
接口可以在一定程度上統一結構實現方法的統一調用,但是可能會導致代碼的冗餘
接口可以作爲模板---反射內部類
定義在類或者接口中的類就稱之爲內部類
方法內部類
定義在方法中的類--只能定義它的方法中使用;
方法內部類中不能定義靜態屬性和靜態方法但是可以定義靜態常量;
方法內部類可以使用外部類中的一切屬性和方法,但是如果使用當前方法的數據的時候,要求這個數據是一個常量
外部類$數字內部類.class
成員內部類
定義在類內方法外的類
靜態內部類
用static修飾的內部類
匿名內部類
匿名內部類本質上是繼承了對應的類或者是實現了對應的接口---只要一個類可以被繼承,那麼這個類就可以出現匿名內部類的形式。
如果匿名內部類定義到了方法中,此時匿名內部類的使用規則和方法內部類一致
如果匿名內部類定義到了類中,此時匿名內部類的使用規則和成員內部類一致、
擴展:內部接口----定義在類或者接口中的接口----類中的接口默認是靜態的,接口中的類或者接口都是用static修飾的
包
聲明包用的package---一個Java文件中只允許存在一個package語句,而且這個package語句必須放在整個Java文件的首行
package 包名;
import---導包語句
import java.util.*---表示導入util包下的所有的類但是不包括子包下的類--- *是一個通配符
java.lang---核心類庫---一個Java程序運行之前會先自動的把這個包下的所有的類加載到了方法區---在使用的時候不需要導包
java.util---工具包---存放了一系列簡化操作的工具類
java.io---數據傳輸
java.net---網絡傳輸
java.math---數學運算
java.sql---數據庫
java.awt---圖形用戶界面---幾乎不用
java.security---數據安全
java.text---格式化
javax.*---擴展包
org.*---第三方廠商和開源社區提供的包
注意:包名不能以java,javax,org開頭