面向物件進階第三天
內部類
內部類是什么?
-
類的5大成分(成員變數、成員方法、構造器、代碼塊、內部類)之一
-
類中的類
使用場景
-
當一個事物的內部,還有一個部分需要一個完整的結構進行描述時,
內部類有幾種
-
1、靜態內部類
-
是什么?有static修飾,屬于外部類本身,
-
特點:只是位置在類里面,類有的成分它都有,
-
創建物件:
外部類.內部類名 物件名 = new 外部類名.內部類構造器; -
拓展
1、靜態內部類可以直接訪問外部類的靜態成員嗎? 可以的
2、靜態內部類中是否可以直接訪問外部類的實體成員? 不可以的
-
-
2、成員內部類(實體內部類)
-
是什么?
-
無static修飾,屬于外部類的物件的,
-
-
特點:JDK 16中類有的成分,它都有,
-
創建物件 :
外部類.內部類 物件名 = new 外部類構造器.new 內部類構造器; -
拓展
1、成員內部類中是否可以直接訪問外部類的靜態成員? 可以
2、成員內部類的實體方法中是否可以直接訪問外部類的實體成員? 可以
-
-
3、區域內部類
-
定義在方法,代碼塊,構造器中,執行代碼處的類,雞肋語法!
-
-
4、匿名內部類(重點)
-
使用匿名內部類的好處:
-
方便構建子類物件,最終目的:簡化代碼
-
-
格式:
new 類名|介面|抽象類(){
方法重寫;
} -
特點:
-
匿名內部類是一個沒有名字的區域內部類,本身也是一個所謂的子類物件,
-
匿名內部類產生的物件型別,相當于是當前new的那個的型別的子型別別,
-
-
列舉
是什么? 是一種特殊型別, 列舉的特征:
-
列舉類都是繼承了列舉型別:java.lang.Enum
-
列舉都是最終類,不可以被繼承,
-
構造器都是私有的,列舉對外不能創建物件,
-
列舉類的第一行默認都是羅列列舉物件的名稱的,
-
列舉類相當于是多例模式,
泛型
認識泛型
-
定義類、介面、方法時,同時宣告了一個或者多個型別變數(如:<E>) ,稱為泛型類、泛型介面,泛型方法、它們統稱為泛型,
-
作用
-
泛型提供了在編譯階段約束所能操作的資料型別,并自動進行檢查的能力!這樣可以避免強制型別轉換,及其可能出現的例外,
-
泛型類
-
定義類的同時定義了泛型的類就是泛型類
-
泛型類的格式
修飾符 class 類名<型別變數,型別變數,…> {
} -
作用
-
在編譯階段可以指定能操作的資料的型別
-
-
原理
-
把出現泛型變數的地方全部替換成傳輸的真實資料型別,
-
泛型介面
-
使用了泛型定義的介面就是泛型介面
-
格式
修飾符 interface 介面名稱<泛型變數> {
} -
作用
-
泛型介面可以讓實作類選擇當前功能需要操作的資料型別
-
-
原理
-
實作類可以在實作介面的時候傳入自己操作的資料型別,這樣重寫的方法都將是針對于該型別的操作,
-
泛型方法
-
定義方法時同時定義了泛型的方法就是泛型方法
-
格式
修飾符 <型別變數,型別變數,…> 回傳值型別 方法名(形參串列) {
} -
作用
-
方法中可以使用泛型接收一切實際型別的引數,方法更具備通用性,
-
-
原理
-
把出現泛型變數的地方全部替換成傳輸的真實資料型別,
-
泛型通配符、上下限
-
? 可以在“使用泛型”的時候代表一切型別,
-
E T K V 是在定義泛型的時候使用的,
-
泛型的上下限
-
? extends Car: ?必須是Car或者其子類 泛型上限
-
? super Car : ?必須是Car或者其父類 泛型下限
-
泛型的注意事項:擦除問題、基本資料型別問題
-
泛型是作業在編譯階段的,一旦程式編譯成class檔案,class檔案中就不存在泛型了,這就是泛型擦除,
-
泛型不支持基本資料型別,只能支持物件型別(參考資料型別),
java.lang包下常用API
API概述
API全稱是應用程式編程介面,是Java寫好的程式,程式員可以直接呼叫,
Object類:toString方法
Object是祖宗類,它里面的方法,一切子類物件都可以使用,
public String toString()
-
默認是回傳當前物件的地址資訊,
Student s = new Student("張三",'女', 23);
-
System.out.println(s.toString());-
回傳物件地址
-
-
System.out.println(s);-
直接輸出物件名,默認是呼叫toString方法的
-
toString存在的意義:
-
默認回傳物件的地址其實是沒有意義的
-
真實存在的意義是被子類重寫,以便回傳子類物件的內容,
Object類:equals方法
public boolean equals(Object o )
-
默認是比較2個物件的地址是否一樣,回傳true 或者false
equals存在的意義
-
默認比較物件的地址其實是沒有意義的,因為== 號可以更簡單的完成
-
存在的的真實意義是被子類重寫,以便比較物件的內容,
Object類:clone方法
protected Object clone()
當某個物件呼叫這個方法時,這個方法會復制一個一模一樣的新物件回傳,
分類:
-
淺克隆:拷貝出的新物件,與原物件中的資料一模一樣(參考型別拷貝的只是地址)
-
深克隆:
物件中基本型別的資料直接拷貝,
物件中的字串資料拷貝的還是地址,
物件中還包含的其他物件,不會拷貝地址,會創建新物件,
Objects
Objects是一個工具類,提供了更安全的方式比較2個物件,
Student s = null;
-
s.equals(s2); 空指標例外
-
Objects.equals(s, s2); 回傳false
Objects常見方法:
| 方法名 | 說明 |
|---|---|
| public static boolean equals(Object a, Object b) | 比較兩個物件的,底層會先進行非空判斷,從而可以避免空指標例外,再進行equals比較 |
| public static boolean isNull(Object obj) | 判斷變數是否為null ,為null回傳true ,反之回傳false |
包裝類
其實就是8種基本資料型別對應的參考型別,
作用:實作一切皆物件
包裝類的分類:
| 基本資料型別 | 參考資料型別 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| char | Character |
| float | Float |
| double | Double |
| boolean | Boolean |
包裝類其實可以隨便用的:int integer
-
自動裝箱
-
基本型別的資料可以賦值其給包裝類
-
-
自動拆箱
-
包裝類的資料賦值給基本資料型別
-
包裝類的特有功能:
1、基本型別變成字串
// 1、呼叫包裝類繼承自Object的toString方法 String rs1 = it6.toString(); // "23" System.out.println(rs1 + 1); // 231 ? // 2、呼叫靜態方法: public static String toString(int i) String rs2 = Integer.toString(it6);// "23" System.out.println(rs2 + 1); ? // 3、直接加 “” String rs3 = it6 + ""; // "23" System.out.println(rs3 + 1);
2、把字串變成基本資料型別(重點)
String age = "23"; // int ageInt = Integer.parseInt(age); int ageInt = Integer.valueOf(age); System.out.println(ageInt + 1); ? String price = "98.5"; // double priceDb = Double.parseDouble(price); double priceDb = Double.valueOf(price); System.out.println(priceDb + 0.5);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545114.html
標籤:其他
上一篇:1.模板
