標籤:取出 tree 介面 程式碼片段 實值型別 dex als 相關 simple
構造方法 1.用來描述對象建立的過程,構造方法在對象建立的過程中被調用 2.如果類中沒有寫構造方法,系統會預設提供一個無參的構造方法;如果類中出現了構造方法,系統不會提供預設的無參構造方法 文法: 存取修飾詞 構造方法名(){ //初始化代碼 }
方法重載 原則:1.方法名相同 2.參數列表不同 3.與傳回值,存取修飾詞無關 方法重寫; 原則:1.方法名相同 2.參數列表相同 3.傳回值類型相同或者是其子類 4.存取權限不能嚴於父類
this關鍵字(代表當前對象,在有參構造方法中不能省略)
封裝的好處: 1.隱藏類的實現細節 2.只能通過規定方法訪問資料 3.方便加入控制語句 4.方便修改實現
封裝的步驟: 1.修改屬性的可見度 2.建立get,set方法 3.在get,set方法中加入屬性 4.實現get,set方法
static關鍵字(修飾:屬性,方法,代碼塊,內部類) 修飾的屬性:屬於對類所有執行個體對象共用的變數 方法:屬於靜態方法,可以直接類名.方法名()調用 代碼塊:在類載入的時候執行,因為類只載入一次所以static代碼塊也只運行一次,一般是使用static代碼塊來載入一些靜態資源
static修飾與非static修飾的區別 static,非private修飾 非static,private修飾 屬性 類屬性,類變數 執行個體屬性,執行個體變數 方法 類方法 執行個體方法 類名.屬性 調用方法 類名.方法() 對象.屬性 對象.屬性 對象.方法() 對象.方法() 歸屬 類 單個對象
繼承的優點: 1.提高代碼的重用性 2.提高代碼的後期的可維護性
使用繼承 編寫父類 class Pet{ //公用的屬性和方法} 編寫子類繼承父類 class extends Pet{ //子類特有的屬性和方法}
繼承的步驟: 1.將多個類的屬性和方法提取出來,建一個父類 2.在子類後面使用extends關鍵字完成繼承 3.在子類中可以調用父類的代碼 注意:在java中屬於單繼承,在extends關鍵字後面只能有一個父類
super關鍵字(代表父類對象)super.方法名 1.只能必須出現在子類的方法和構造方法中 2.在構造方法中調用且必須是第一句 3.不能訪問父類的private成員 4.可以訪問父類的成員
不能被繼承的父類成員 1.private成員(1.可以修飾屬性和方法2.本類,同包,子類可以訪問) 2.子類與父類不在同包,使用預設存取權限的成員 3.構造方法
存取修飾詞protected 1.可以修飾屬性和方法 2.本類,同包,子類可以訪問
存取修飾詞: private friendly protected public
多重繼承關係: 父類屬性->父類構造方法->子類屬性->子類構造方法
對象初始化過程 1.在建立類之前,檢查類是否已載入,如果沒有價值就先價值父類的檔案,再載入本類的檔案 2.指派至的空間,遞迴分配所有的父類和子類的屬性空間 3.給屬性賦值 4.調用父類的構造方法 5.調用本類的構造方法
abstract關鍵字 1.修飾類,抽象類別(-public abstract class 類名{} -抽象類別用來表示一些抽象的概念) 抽象類別的特點: 1.抽象類別不能被執行個體化 2.抽象類別中可以有屬性,方法,構造方法,都是用來給子類繼承 3.抽象類別中的方法不一定全部都是抽象方法 2.修飾方法,抽象方法(-存取修飾詞 abstract 傳回值類型 方法名 (參數列表); -抽象方法不需要自己實現,由子類來實現) 抽象方法的特點: 1.抽象方法沒有方法體 2.抽象方法必須出現在抽象類別中 3.一個類繼承抽象類別之後必須要實現裡面的所有的抽象方法 3.抽象類別可以繼承抽象類別
final關鍵字(最終的) 1.可以用來修飾類,屬性,方法 2.修飾的類不能再被繼承 3.修飾的方法,不能再被子類重寫 4.修飾的變數,初始化以後值不能再發生改變 5.修飾的參考型別的變數,引用地址不能發生改變,但是只限定的是第一層,參考型別的屬性是可以發生改變的
abstract,final的對比 abstract可以用來修飾類和方法,不能用來修飾屬性和構造方法 final可以用來修飾類,方法和屬性,不能修飾構造方法
多態的實現(兩個要素:1.子類重寫父類方法2.使用父類的類型) 1.編寫父類 2.編寫子類,子類重寫父類方法 3.運行時,使用父類的類型,子類的對象
子類到父類的轉換(向上轉型) 父類到子類的轉換(向下轉型)-將一個指向子類對象的父類引用賦給一個子類的引用
使用多態的兩種形式: 1.使用父類操作為方法形參實現多態 2.使用父類操作為傳回值實現多態
instanceof運算子(用來判斷一個對象是否屬於一個類或者實現了一個介面) 通常和強制類型轉換結合使用,提高代碼的健壯性 文法 對象 instanceof 類或介面
多態的好處:多態可以減少類中代碼量,可以提高代碼的可擴充性和可維護性
介面 文法 [修飾符] interface 介面名 extends 父介面1,父介面2,...{ //常量定義 //方法定義 } class 類名 extends 父類名 implement 介面1,介面2,...{ //類成員 }
介面的特徵: 1.介面不可以被執行個體化 2.實作類別必須實現介面的所有方法 3.實作類別可以實現多個介面 4.介面中變數都是靜態常量
介面的原則: 1.可以降低代碼間的耦合性 2.提高了代碼的可擴充性和可維護性
介面和抽象類別的區別: 抽象類別利於代碼複用 介面利於代碼維護
interface關鍵字(C#) 文法 [修飾符] interface 介面名:父介面1,父介面2,...{ 屬性定義 方法定義 } class 類名:父類名,介面1,介面2,...{}
implements關鍵字 一個可以實現多個介面,多個介面之間使用“.”隔開
介面有比抽象類別更好的特徵: 1.可以被多繼承 2.設計和實現完全分離 3.更自然的使用多態 4.更容易搭建程式架構 5.更容易更換實現
內部類(在類裡面還有一個類,把class寫入class中)-最大作用:封裝 1.靜態內部類 使用static修飾,聲明在類體中 靜態內部類中可以訪問外部類的靜態成員 2.成員內部類 聲明在類體中,不使用static,具有類的成員特徵。也就是必須有類的執行個體才能建立內部類執行個體 內部類執行個體可以訪問共用外部類成員變數 3.局部內部類 把類聲明在方法中,就是局部內部類,範圍類似局部變數 4.匿名內部類(回調模式) 匿名類可以寫在任何地方,就像一般的語句 文法更像是建立對象: Date d=new Date(){//...} 匿名類是對原類的一個繼承,同時建立了執行個體,{}就是繼承以後的類體 類體中可以使用所有類的文法 匿名類不能寫構造器 匿名類可以從抽象類別或者介面繼承,必須提供抽象方法的實現
異常(Exception)-指在程式中的運行過程中所發生的不正常的事件,它會中斷正在啟動並執行程式 錯誤(Error)
if-else缺點: 1.代碼臃腫,加入了大量的異常情況判斷和處理代碼 2.減少了編寫業務代碼的時間,必然影響開發效率 3.很難窮舉所有的異常情況,程式仍舊不健壯 4.異常處理代碼和業務代碼交織在一起,影響代碼的可讀性,加大日後程式的維護難度
if(in.hasNextInt()):判斷輸入是否是int類型,如果是返回true,否則返回false
java的異常處理通過5個關鍵字來實現: try catch finally throw throws try,catch,finally捕獲異常 throws聲明異常(聲明某個方法可能拋出各種異常) throw拋出異常
使用try-catch塊捕獲異常 第一種情況:正常 try catch try-catch塊後的程式碼片段 第二種情況:出現異常 發生異常 try ------->產生異常對象 進入catch塊 | catch <----------異常類型匹配 |程式繼續進行 try-catch塊後的程式碼片段 第三種情況:異常類裡不匹配 發生異常 try ------->產生異常對象 | catch 異常類型不符 |程式中斷運行 \ try-catch塊後的程式碼片段
在catch塊中處理異常 加入使用者自訂處理資訊 System.err.println("自訂內容"); 調用方法輸出異常資訊 e.printStackTrace() 異常對象常用的方法 void printStackTrace():輸出異常的堆椎資訊 String getMessage():返回異常資訊描述字串,是printStackTrace()輸出資訊的一部分
Java異常機制 1.當代碼運行到可能出現異常的代碼是,由程式員或JVM拋出異常對象。異常對象會記錄異常的相關資訊 2.異常對象拋出之後,就會去尋找異常處理的相關代碼(catch),如果找到了,異常到此結束 3.如果未找到,異常對象會繼續上拋,尋找異常處理的代碼 4.如果到main還未找到異常處理的代碼,就會由main將異常拋給虛擬機器 5.異常拋出的每一層代碼都會被中斷
常見的異常類型 Exception 異常階層的根類 ArithemticException 算數錯誤情形,如零作除數 ArrayIndexOutOfBoundsException 數組下標越界 NullPointerException 嘗試訪問null對象成員 ClassNotFoundException 不能載入所需的類 InputMismatchException 欲得到的資料類型與實際輸入的類型不符 IllegalArgumentException 方法接收到非法參數 ClassCastException 對象強制類型轉換出錯 NumberFormatException 數字格式轉換異常,如把"abc"轉換成數字
try-catch-finally try |有異常 catch塊 System.exit(); 中斷程式,退出java虛擬機器 finally塊
存在return的try-catch-finally塊 發生異常 try---1--->產生異常對象 進入catch塊 | catch<----2-----異常類型匹配 return | |3執行finally塊 4 |---> 執行return| 退出方法 | | | finally
try-catch-finally塊使用規則 try{//必須出現,且只能出現一次 }catch(Exception ex){//可以出現0-n次, //如果沒有catch,就必須有finally }finally{//可以出現0-1次 }
多重catch塊 1.排序catch語句的順序,先子類後父類 2.發生異常時按順序逐個匹配 3.只執行第一個與異常類型匹配的catch語句 發生異常 try-------->產生異常對象 | catch 與異常類型1不匹配 進入catch塊 | catch<-----------與異常類型2不匹配 | | catch | return的try-catch-finally塊後的程式碼片段
java中的異常分為兩類: 1.運行時異常 2.檢查異常/檢測異常
自訂異常 第一步:寫一個異常類繼承Exception 第二步:手動實現Exception的所有各種方法
日誌分類 1.SQL日誌 2.異常日誌 3.業務日誌
開源日誌記錄工具log4j 控制日誌的輸出層級 控制日誌資訊輸送的目的地是控制台,檔案 控制每一條日誌輸出格式
使用log4j記錄日誌步驟 1.在項目中加入log4j的JAR檔案 2.建立log4j.properties檔案 3.配置日誌資訊 4.使用log4j記錄日誌資訊
Object 在java類繼承結構中java.lang.Object類位於頂端 如果定義了一個java類時沒有使用extends關鍵字聲明其父類,則其父類為java.lang.Object類 Object定義了"對象"的基本行為被子類預設繼承 public class Foo{...} 等價於 一切皆對象 public class Foo extends Object{...}
toString Object類中定義toString方法,用於返回對象的字元表示(一個可以表示該對象屬性內容的字串) 所有java類都繼承了toString方法,Object類toString方法返回的字串的形式為:"類名@hashCode值" Java類可以根據需要重寫toString方法返回更有意義的資訊
equals Object的equals方法用於對象的"相等"邏輯 equals方法的邏輯為:如果認為調用方法的對象(this)與參數對象相等返回true,否則返回false 按照Object類equals方法的調用,只有在this和obj是同一個對象時才返回true,java可以根據需要重寫的繼承自Object的equals方法
hashCode 預設的hashCode()值是當前堆對象地址轉換的一個整數,這個整數不是記憶體位址 一般使用對象的OID值作為hashCode的值 OID是對象的唯一編號,在項目中一般採用資料庫產生OID,也就是資料庫中的"主鍵"
封裝類(封裝類) 封裝類 對應的基本類型 java.lang.Integer int java.lang.Long long java.lang.Double double java.lang.Character char java.lang.Boolean boolean java.lang.Byte byte java.lang.Float float java.lang.Short short
編譯器對封裝類的支援 "拆箱":運算前先封裝類對象所封裝的基本類型資料 "裝箱":運算後再講結果封裝成封裝對象
JDK5t增加了自動"拆箱"和"裝箱"的功能 Integer i=100; Integer j=200; Integer i+j; 事實上,JDK5的自動"裝箱"和"拆箱"是依靠JDK5的編譯器在編譯時間的"預先處理"工作
Date(表示特定的瞬間,精確到毫秒)類long(表示時間,日期) getTime Date->毫秒差 用於擷取對應的毫秒差 setTime 毫秒差->Date 用於通過毫秒差設定時間 //無參的構造方法,構造的Date對象封裝當前的日期及時間資訊 Date date=new Date(); SimpleDateFormat類(用於實現Date對象和字串表示的日期資訊的轉換) 常用格式字串 字元 含義 樣本 Y 年 YYYY年-2017年;YY-17年 M 月 MM-01月;M-1月 d 日 dd-06日;d-6日 E 星期 E-星期日(sun) a AM或PM標識 a-下午(PM) H 小時(24小時) a-h時-下午12時 h 小時(12小時) HH:mm:ss-12:46:33 m 分鐘 hh(a):mm:ss-12(下午):47:48 s 秒
Calendar及GregorianCalendar(用於封裝行事曆資訊) 主要作用在於其方法可以對時間分量進行運算
Calendar c=Calendar.getlnstance(); getlnstance方法將根據系統的地區資訊返回不同的Calendar 類的實現
getActualMaximum(可以返回某個時間分量最大值) add方法可以對某一日期分量增加數值(減少)
介面 Collection-List,Set List:ArrayList,LinkedList Set;hashSet,TreeSet Map:hashMap,TreeMap
Collections(集合工具類)-->提供了對集合進行排序,遍曆等多種演算法實現 Collection介面
java物件導向