Java基礎學習-面向對象
Day02面向對象
面向過程:實現一個功能,詳細處理每一個細節
面寫對象:實現一個功能,不關心步驟
三個特征:封裝,繼承和多態
類:一組相關屬性和行為的集合。
屬性:成員變量,在方法外,類內
行為:main類中的成員方法,不寫static關鍵字,main中的可以寫
類是抽象的,對象是具體的。
類是對象的模板。對象是類的實體。實例化–創建
導包:import 包名稱.類名稱;
創建格式:類名 對象名 = new 類名();
使用成員變量:對象名.成員變量名
使用成員方法:對象名.成員方法名();
創建方法:修飾符 類名 方法名(參數類型 參數名) { }
創建對象時,new一個對象,成員方法的地址放入堆中。
類名 對象名1 = new 類名();//與對象名不同地址
類名 對象名1 = 對象名;//與對象名同地址
1.使用對象類型作為方法參數:
修飾符 返回值類型 方法名(類名 對象名3){ 對象名3.方法名0 }。
調用:方法名(對象名1);棧中{ 對象名3 }傳遞的是地址值。與對象名1地址一樣。
2.使用對象類型作為返回值:也是返回對象的地址
局部變量:方法的內部,沒有默認值,**方法的參數是局部變量。**位于棧內存。隨著方法進棧而誕生。
成員變量:在方法的外部,寫在類當中,整個類通用,有默認值。位于堆內存。隨著對象創建而誕生,隨著對象被垃圾回收而消失。
方法就是一種封裝,關鍵字private也是一種封裝。
封裝就是將一些細節信息隱藏起來,對外界不可見。
用private關鍵字將需要保護的成員變量進行修飾。只能在本類中進行使用,超出本類不能直接訪問。只能間接訪問進行設置
----setAge(int age){ this.age = age; } set成員變量名{首字母大寫}()setXxx,不能有返回值類型。參數類型與成員變量進行對應。
----getAge(return age;) 獲取私有數據,間接訪問。不能有參數。返回值類型與成員變量進行對應。
注意:對于Boolean類型,Getter方法要寫成isXxx形式,Setter的setXxx規則不變。
方法的局部變量和類中的成員變量重名,就近原則,優先使用局部變量。
本類訪問成員變量:this.成員變量名 通過誰調用,誰就是this
創建方法,使用new就是在調用構造方法
public 類名稱(參數類型 參數名稱){ 方法體 }
構造方法的名稱與所在類名稱完全一樣
構造方法沒有返回值類型,沒有void
構造方法中不能return一個具體的返回值
編譯器會設置默認贈送一個構造方法,一但寫了至少一個構造方法,默認構造方法則消失。
構造方法也是可以進行重載的。
所有的成員變量都要使用private關鍵字
為每一個成員變量編寫Getter/Setter方法
編寫一個無參數的構造方法
編寫一個全參數的構造方法
使用Alt + Insert 進行補全Getter/Setter方法 。或者code + Generate
Application Programming Interface 應用程序編程接口
JDK是使用類的說明文檔。類名第一個字母大寫,方法都是小寫。
Scanner,必須有參
實現鍵盤輸入數據,引用類型的一般步驟:導包,創建,使用。
只有Java.lang包下的內容不需要導包。
System.in 從鍵盤輸入。 對象名.nextInt() 獲取輸入 數字,字符串是next()
new 類名().成員變量名 = 賦值;
匿名對象只能使用唯一一次,下次再用不得不再創建新對象。
例如輸入:
int num = new Scanner(System.in).nextInt();
使用匿名對象進行傳參:
method ( new Scanner ( System.in ) );
使用匿名對象進行返回:
return new Scanner( System,in ) ;
import java.util.Random; Random r = new Random(); int num = r.nextInt(3) ; [0,3)
1
2
3
對象名[ ] array = new 對象名[ 3 ]; list.geti 快速生成
存儲的是對象的地址。
數組一但創建長度不可改變。ArrayList 可以改變,其實是復制到一個更大的數組。
泛型,裝在集合中所有元素,只能為引用類型,不能是基本類型。
ArrayList
1
2
3
4
5
6
7
向 集合 Arraylist存儲基本類型,使用基本類型的”包裝類“。
int – Integer , char – Character , 其他均為首字母大寫
自動裝箱,基本類型–>包裝類型
自動拆箱,包裝類型–>基本類型
集合也是可以作為方法的參數的。傳遞的是地址值,記住泛型格式一致
字符串內容是常量,字符串是可以共享使用,字符串String str , str保存的是地址值,字符串中 + 號是拼接。
字符串效果相當于是char[ ]字符數組,但底層是byte[ ]字節數組,即都會轉為byte進行與字符串對象進行對應。
public String(char[ ] array)//,根據字符數組內容創建 public String(byte[ ] array), byte[ ] byteArray = {97, 98}; String str = new String(byteArray);
1
2
3
4
5
6
7
直接寫上雙引號,就是字符串對象。存在字符串常量池(在堆中)中。字符串池的對象是指向byte的地址值。
內容一樣的雙引號字符串,字符串池的地址會重復使用。
使用new的不在池當中。
對于引用類型來說,==是{地址值}的比較。基本類型,==是值的比較。
字符串對象名.equals( Object obj ),參數可以是任何對象,進行內容比較。
“XXX”.equals( obj )。推薦把常量字符串寫在前面,可能會出現NullPointerException,空指針異常。
Obj.equalsIgnoreCase( obj ),不區分大小寫的對比。
int length():字符串長度
String concat(String str):拼接字符串,并返回一個新的字符串。
char ch = char chatAt (int index):獲取指定索引的單個字符,索引從0開始。
int indexOf(String str):查找參數字符串第一次出現的索引的位置。
String substring( int index ):截取從參數位置開始到字符串末尾,返回新字符串
String substring( int begin , int end) :截取中間字符串,[ begin, end )
char[ ] toCharArray():把字符串拆分為字符數組作為返回值。
char[ ] chars = xx.toCharArray();
byte[ ] getBytes():獲取字符串底層的字節數組
byte[ ] bytes = xx.getBytes();
String replace( CharSequence oldString , CharSequence newString):將所有出現的老字符串替換為新字符串。 replaceAll所有出現
CharSequence 接口,可以接受字符串數組。
String[ ] split( String regex) :分割字符串,按照參數規則進行切分,返回字符串數組
String[ ] array1 = xx.split(",");
注意:split參數是正則表達式,使用’’." 應該使用"http://.";
直接在類里面進行保存,所有類對象共享一份。不屬于對象自己,屬于類。在棧里面直接與方法區進行連接。只和類有關,隨著類的消失而消失。生命周期最長。
靜態變量存儲在方法區的靜態區中。 實例變量存在于對象所屬的堆內存中。
修飾成員變量:只需要賦值一次。多個對象共享同一個對象。例如:計數器,進行每次new時進行自增,++idCount。
修飾成員方法:靜態方法屬于類,可以使用類名來調用。推薦使用類名稱進行調用。對于本類當中的靜態方法,類名可以省略。
類名稱.靜態變量
類名稱.靜態方法()
注意:
靜態方法不能直接訪問非靜態變量。因為內存中先有靜態內容。
靜態方法不能寫this關鍵字,誰調用的方法,誰就是當前對象。
靜態代碼塊:執行到本類時,靜態代碼塊唯一執行一次。一次性的對靜態成員變量賦值
靜態內容優先于非靜態。比構造方法先執行。可以有多個靜態代碼塊。
public class 類名稱{ static{ //靜態代碼塊內容 } }
1
2
3
4
5
與數組相關的工具類,有大量的靜態方法。
static String toString( 數組 ):將參數數組按照默認格式變為字符串。默認格式:[ 元素1,元素2,… ]
static void sort( 數組 ):按照默認升序進行數組排序。字符串:按照字母升序。自定義的類需要有Comparable或者Comparator接口支持
Math()
java.util.Math
static double abs(double num):獲取絕對值,有多種重載
static double ceil(double num):向上取整
static double floor(double num):向下取整
static long round(double num):四舍五入
Math.PI 圓周率(double)
Arrays.asList()可以插入null,而List.of()不可以
繼承
繼承是多態的前提。主要解決的問題是共性抽取。
父類(超類)—> 子類(派生類)
特點:
子類可以擁有父類的內容,子類還可以進行擴展。
子類可以被當成父類看待。因為在new一個子類是,堆中的子類里面包含一個父類。
public class 父類名稱{ } public class 子類名稱 extends 父類名稱{ }
1
2
3
如果創建子類對象時,成員變量重名:
直接子類對象訪問成員變量:等號左邊用誰就優先用誰。
間接通過成員方法訪問成員變量:優先訪問本類當中的。方法屬于誰,優先用誰。
成員變量名重名
局部變量:直接寫成員變量名
子類成員變量:this.成員變量名
父類成員變量:super.成員變量名
方法重名
創建的對象是誰,就優先用誰。即new 類名(),則用這個類
重寫 Override:方法名稱一樣,參數列表一樣。覆寫,覆蓋。
重載 Overload:方法名稱一樣,參數列表不一樣
創建是子類對象,則使用子類方法。
注解:@Override 寫在方法前面,用來檢測是不是有效的正確覆蓋重寫。這個注解是可選的安全檢測。
子類方法的返回值必須小于等于父類方法的返回值范圍。
修飾符 返回值類型 方法名(參數類型 參數名,…) { return 返回值;}
java.lang.Object 類是所有類的公共最高父類。
子類方法的權限必須大于等于父類的權限修飾符。
修飾符 返回值類型 方法名(參數類型 參數名,…) { return 返回值;}
public > protected > (default) > private
備注: (default) 不是關鍵字,而是什么都不寫,留空。
設計原則:對于已投入使用的類,盡量不要修改。建議定義有個新類,重復使用有共性的內容,并且添加改動的新內容。
先出父類的構造方法,在調用子類構造方法。
子類構造方法有一個隱含的super( ) 調用,無參數的才贈送,有參數的不贈送。
可以通過super關鍵字來子類構造方法調用父類重載構造方法。
使用 super( 參數值 ) 調用父類重載的構造方法。
XX(int num)-- 重載無參數的XX()。
注意:super的父類構造,必須是子類構造方法中的第一個(行),只能調用一次。
用法:
子類的成員方法中訪問父類的成員變量。
子類的成員方法中訪問父類的成員方法。
子類的構造方法中訪問父類的構造方法。
this關鍵字訪問本類內容
在本類的成員方法中,訪問本類的成員變量。
在本類的成員方法中,訪問本類的另一個成員方法。如果覆寫是可以強調是本類的方法。
在本類的構造方法中,訪問本類的另一個構造方法。this調用也必須是構造方法的第一個語句,一個構造方法里唯一一個。且當前構造方法調用另一個構造方法之后,不能被其他構造方法所調用訪問。
super和this的構造調用不能同時。
super_class在子類的方法區中指向父類方法區。
Java是單繼承的,一個類的直接父類只能有唯一一個。
Java可以多級繼承。
一個父類可以擁有很多個子類。
如果父類方法不確定如何進行方法實現。
抽象方法:加上abstract關鍵字,去掉大括號,直接分號結束
抽象類:抽象方法所在的類。必須是抽象類
抽象方法和抽象類:
不能直接創建new抽象類
必須用一個子類來繼承抽象父類。
子類必須覆蓋重寫父類方法中的所有抽象方法,子類去掉抽象方法的abstract關鍵字,補上大括號。否則子類也是抽象類。但后面的子類總要覆寫。
創建子類對象進行使用。
注意:本文符號有中文符號,請不要直接復制
Java 面向對象編程
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。