java面向对象
面向對象
特點
- 封裝:分類整理和保護
- 繼承
- 多態
- 抽象
面向對象編程
-
OOA:面向對象的分析
將構成問題的事物分解成對象,給對象賦予相應的屬性和行為
-
OOD:面向對象的設計
讓對象相互通信
-
OOP:面向對象的編程實現
編寫代碼
-
面向對象編程思想就是運用對象、類、繼承、封裝、聚合、關聯、消息、多態性等概念來構成系統的軟件開發方式面向對象
與面向過程異同
-
面向對象 = 數據結構 + 算法
面向對象 = 工具人(清潔阿姨 保潔阿姨) + 工具人實現功能
-
面向過程 = 算法 + 數據結構
面向過程 = 實現功能 + 工具(拖把 掃把 抹布)
概念
- 從事物中舍棄個別非本質特征,抽取共同體的本質特征
- 只考慮問題域相關的信息
- 可以是有形的,也可以是?形的 – 例如?個客戶,?張卡,?個窗體中的按鈕等
- 對象是構成世界的獨?單位
- 具有??的靜態結構(屬性)和動態?為(?法)
- 每個對象都有??的唯?標識
- 類是?組具有相同屬性和?為的對象的抽象,類的作?是利?來創建對象,對象就是類
的?個實例
- 抽象和具體的關系
- 每?個類在某?時刻都有零個或者更多的實例,類是?成對象的模板
- ?個類定義了使?那些數據來描述屬性,每?個對象都有相應的屬性值數據,?個類通
過?系列?法來定義?為,這些?法能在每個對象中被激活
類
聲明
- 成員變量 等同于局部變量 , 只是位置發?了變化 , 在類中, ?法外
- 成員?法 等同于以前定義的?法 , static 暫時不要了
對象
格式
- new關鍵字創建對象
- 類名 對象名=new 類名();
- Student student=new Student();
調用
- 使用對象名調用
- 對象名.變量名
- 對象名.方法名();
對象和類
關系
- 類:定義了對象應該具有的特征和行為,類是對象的模板
- 對象:擁有特征和行為的實體,對象的類的實例
內存關系
- 類存儲內存中的方法區內,只有一份
- new出來的對象存儲于內存中的堆內存中,一個類的對象可以有多個
- 類無法直接使用,是一個骨架、圖紙
- 對象可以使用成員
- 一個對象名引用一個實例對象
- 多個對象名引用不同的實例對象
- 多個對象名引用相同的實例對象
成員變量與局部變量
定義
- 成員變量屬于類或對象,使用對象名直接調用
- 局部變量屬于方法,對象無法直接調用,只能在運行方法的時候運行
區別
在類中的位置不同
- 成員變量:在類中方法外
- 局部變量:定義在方法中或者方法聲明上
在內存中位置不同
- 成員變量:在堆內存中(屬于對象,對象進堆內存)
- 局部變量:在棧內存中(屬于方法,方法進棧內存)
生命周期不同(誕生-活著-死亡)
- 成員變量:對象創建而存在,對象消亡而消失
- 局部變量:方法調用而存在,方法結束而消亡
初始化值不同
- 成員變量:有默認值,在對象創建的時候jvm設置默認值
- 局部變量:沒有默認值,必須在使用之前賦值
注意事項
- 局部變量可以與成員變量名稱一樣,在方法中使用的時候,采用就近原則
- 基本類型:byte short int long float double boolean char
- 引用數據類型:數組、類、接口、注解、枚舉
重載Overload
定義
一個類中定義多個相同名稱的方法。
規則
- ? 方法名稱相同。
- ? 參數列表不同(類型、個數、順序)。
- ? 與訪問修飾符、返回值類型無關。
注意事項
- 調用帶有重載的方法時,需要根據傳入的實參去找到與之匹配的方法。
- 好處:屏蔽使用差異,靈活、方使。
- 只是參數的名稱不同并不能構成重載
構造方法
定義
- 用于初始化對象
- new關鍵字創建對象的時候,必須調用構造方法
特點
- 名稱與類名完全相同
- 沒有返回值類型、返回值
- 可以有參,也可以無參
- 注意:如果沒有在類中顯示定義構造方法,則編譯器默認提供無參構造方法
Student student = new Student();有什么用?
- 內存中開辟一個空間,并賦值屬性為默認值
- 調用構造方法初始化
- 把對象地址賦值給變量student
構造方法重載
對默認的構造方法進行重載
package work;/*** @Author night* @Date 2021/8/12 11:32*/ public class Student {String name;int age;char sex;double score;//默認構造方法public Student() {System.out.println("默認構造方法");}//重載構造方法public Student(String na, int ag, double sc, char se) {//實例變量=局部變量;name = na;age = ag;sex = se;score = sc;}//輸出方法public void sayHi() {System.out.println("姓名:" + name + "年齡:" + age + "性別:"+ sex + "分數:" + score);} }class Test {public static void main(String[] args) {Student student = new Student("du", 12, 54.1, '男');student.sayHi();}} 如果添加有參的構造方法,同時刪除無參的構造方法, Student student = new Student();會報錯匿名對象
定義
沒有名字的對象
使用場景
當前方法內,對象只使用一次
public class Car {public void fire(){System.out.println("??啟動了");}public void run(){System.out.println("???馳?去");} } public class Driver {public void drive(Car car){//調?汽?的點?和開動?法car.fire();car.run();} } public static void main(String[] args) {Driver driver = new Driver();//調?司機的開??法driver.drive(new Car()); }private關鍵字
定義
- 一個權限修飾符
- 可以修飾成員變量和成員方法
- 被修飾的成員只能在本類中使用
作用
- 限定使?范圍, 禁?別?調?類的成員
- 保證數據的安全性, 可以通過?法中的代碼對有害數據進?過濾
JavaBean POJO
- 類中的屬性全部私有化
- 通過getter 和 setter?法進?設置
- 提供toString?法?來描述對象
- javabean的主要作?是運送數據
實例:
public class Person { private String name = "?明"; //private void method(){如果是private,主方法無法調用,權限不足 public void method(){System.out.println(name);//判斷是或否成?} } public static void main(String[] args) {Person person = new Person();person.method(); }this關鍵字
定義
- 代表本類對象的引?
- ?來區分重名的成員變量和局部變量
注意事項
- 只能在本類?法中使?
- 本類的靜態?法中?法使?
- 當我們創建對象并調?對象的?法時, ?法中如果出現了this,指的就是當前創建的這個對象
- 本類對象中的?法調?本類中的其他?法時, 其實被調??法的前?就有?個省略的this
應用
1、調用本類中的其他構造方法。如this(實參)
//重載構造方法public Student(String name, int age) {//實例變量=局部變量;this.name = name;this.sex = sex;}//重載構造方法public Student(String name, int age, char sex, double score) {//使用this調用上面兩個參數的構造方法this(name, age);//實例變量=局部變量;this.sex = sex;this.score = score;}使用this調用構造方式時,該語句必須是第一條,而且只能使用一次
2、賦值:當實例變量與局部變量名稱相同時,可以使用this關鍵字賦值.
String name;int age;char sex;double score;//重載構造方法public Student(String name, int age, char sex, double score) {//實例變量=局部變量;this.name = name;this.sex = sex;this.score = score;this.age = age;} }//重載構造方法 public Student(String name, int age, char sex, double score) {//使用this調用上面兩個參數的構造方法this(name, age);//實例變量=局部變量;this.sex = sex;this.score = score; } **使用this調用構造方式時,該語句必須是第一條,而且只能使用一次**2、賦值:當實例變量與局部變量名稱相同時,可以使用this關鍵字賦值.```javaString name;int age;char sex;double score;//重載構造方法public Student(String name, int age, char sex, double score) {//實例變量=局部變量;this.name = name;this.sex = sex;this.score = score;this.age = age;}總結
- 上一篇: 查看单元测试用例覆盖率新姿势:IDEA
- 下一篇: IIS漏洞