日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java面向对象

發布時間:2024/8/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java面向对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

面向對象

特點

  • 封裝:分類整理和保護
  • 繼承
  • 多態
  • 抽象

面向對象編程

  • OOA:面向對象的分析

    將構成問題的事物分解成對象,給對象賦予相應的屬性和行為

  • OOD:面向對象的設計

    讓對象相互通信

  • OOP:面向對象的編程實現

    編寫代碼

  • 面向對象編程思想就是運用對象、類、繼承、封裝、聚合、關聯、消息、多態性等概念來構成系統的軟件開發方式面向對象

與面向過程異同

  • 面向對象 = 數據結構 + 算法

    面向對象 = 工具人(清潔阿姨 保潔阿姨) + 工具人實現功能

  • 面向過程 = 算法 + 數據結構

    面向過程 = 實現功能 + 工具(拖把 掃把 抹布)

概念

  • 抽象 abstract
    • 從事物中舍棄個別非本質特征,抽取共同體的本質特征
    • 只考慮問題域相關的信息
  • 對象 Object --是系統中?來描述客觀事物的?個實體
    • 可以是有形的,也可以是?形的 – 例如?個客戶,?張卡,?個窗體中的按鈕等
    • 對象是構成世界的獨?單位
    • 具有??的靜態結構(屬性)和動態?為(?法)
    • 每個對象都有??的唯?標識
  • 類 class
    • 類是?組具有相同屬性和?為的對象的抽象,類的作?是利?來創建對象,對象就是類
      的?個實例
  • 類和對象的關系
    • 抽象和具體的關系
    • 每?個類在某?時刻都有零個或者更多的實例,類是?成對象的模板
    • ?個類定義了使?那些數據來描述屬性,每?個對象都有相應的屬性值數據,?個類通
      過?系列?法來定義?為,這些?法能在每個對象中被激活
  • 聲明

    • 成員變量 等同于局部變量 , 只是位置發?了變化 , 在類中, ?法外
    • 成員?法 等同于以前定義的?法 , static 暫時不要了
    //定義類 public class Dog {//定義屬性String name;//名字int age;//年齡String breed;//品種//定義方法:吃飯public void eat() {System.out.println("狗狗正在吃東西...");}//定義方法:睡覺public void sleep() {System.out.println("狗狗開始睡覺了...");} }public class TestDog {public static void main(String[] args) {//實例化Dog并且創建對象、賦值Dog dog = new Dog();dog.age = 2;dog.breed = "金毛";dog.name = "金寶寶";System.out.println(dog.name + "\t" + dog.breed + "\t\t" + dog.age + "\t\t");//調用方法dog.eat();dog.sleep();}}

    對象

    格式

    • new關鍵字創建對象
    • 類名 對象名=new 類名();
    • Student student=new Student();

    調用

    • 使用對象名調用
    • 對象名.變量名
    • 對象名.方法名();
    public static void main(String[] args) {Student student = new Student();//調?對象的屬性String name = student.name;System.out.println(name);//調?對象的?法student.eat();student.sleep();student.study(); }

    對象和類

    關系

    • 類:定義了對象應該具有的特征和行為,類是對象的模板
    • 對象:擁有特征和行為的實體,對象的類的實例

    內存關系

  • 存儲關系
    • 類存儲內存中的方法區內,只有一份
    • new出來的對象存儲于內存中的堆內存中,一個類的對象可以有多個
  • 問題
    • 類無法直接使用,是一個骨架、圖紙
    • 對象可以使用成員
  • 引用
    • 一個對象名引用一個實例對象
    • 多個對象名引用不同的實例對象
    • 多個對象名引用相同的實例對象
  • public static void main(String[] args) {//?個對象名引??個實例對象Student student = new Student();//多個對象名引?不同的實例對象Student student2 = new Student();//?較兩個對象表示的地址值System.out.println(student==student2);//多個對項名引?相同的實例對象Student student3 = student;System.out.println(student==student3); }

    成員變量與局部變量

    定義

    • 成員變量屬于類或對象,使用對象名直接調用
    • 局部變量屬于方法,對象無法直接調用,只能在運行方法的時候運行

    區別

  • 在類中的位置不同

    • 成員變量:在類中方法外
    • 局部變量:定義在方法中或者方法聲明上
    public class Student {String name ;public void method(){//?法內的局部變量String name ;}//?法聲明上的局部變量public void method(String name){} }
  • 在內存中位置不同

    • 成員變量:在堆內存中(屬于對象,對象進堆內存)
    • 局部變量:在棧內存中(屬于方法,方法進棧內存)
  • 生命周期不同(誕生-活著-死亡)

    • 成員變量:對象創建而存在,對象消亡而消失
    • 局部變量:方法調用而存在,方法結束而消亡
  • 初始化值不同

    • 成員變量:有默認值,在對象創建的時候jvm設置默認值
    • 局部變量:沒有默認值,必須在使用之前賦值
    public class Student {//可以不賦值, 創建對象的時候會有?個默認值String name ;public void method(){//使?前必須賦值String name ;//這?會報錯//System.out.println(name);}//在調??法執?之前必須給參數賦值,不然會報錯public void method(String name){} }
  • 注意事項

    • 局部變量可以與成員變量名稱一樣,在方法中使用的時候,采用就近原則
    • 基本類型:byte short int long float double boolean char
    • 引用數據類型:數組、類、接口、注解、枚舉

    重載Overload

    定義

    一個類中定義多個相同名稱的方法。

    規則

    • ? 方法名稱相同。
    • ? 參數列表不同(類型、個數、順序)。
    • ? 與訪問修飾符、返回值類型無關。

    注意事項

    • 調用帶有重載的方法時,需要根據傳入的實參去找到與之匹配的方法。
    • 好處:屏蔽使用差異,靈活、方使。
    • 只是參數的名稱不同并不能構成重載
    package work;/*** @Author night* @Date 2021/8/12 13:48* 方法重載:* ·方法名稱相同。* ·參數列表不同(類型、個數、順序)。* ·與訪問修飾符、返回值類型無關。*/ public class Operation {public void show() {System.out.println("無參方法");}public void show(int num) {System.out.println("int參方法" + num);}public void show(String name) {System.out.println("String參方法" + name);}public void show(String name,int num) {System.out.println("String+int參方法" + name+"\t\t"+name);} }class TestOperation {public static void main(String[] args) {Operation operation=new Operation();operation.show();operation.show(100);operation.show("dadsa");operation.show("dadw",54);} }

    public void m(int a){} public void m(int b){} 上面兩個方法不是重載,他們的方法名相同,參數也一致,所以不是。

    構造方法

    定義

    • 用于初始化對象
    • new關鍵字創建對象的時候,必須調用構造方法

    特點

    • 名稱與類名完全相同
    • 沒有返回值類型、返回值
    • 可以有參,也可以無參
    • 注意:如果沒有在類中顯示定義構造方法,則編譯器默認提供無參構造方法
    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("默認構造方法");name = "dada";age = 5;sex = '男';score = 99.2;}public void sayHi() {System.out.println("姓名:" + name + "年齡:" + age + "性別:"+ sex + "分數:" + score);} }class Test {public static void main(String[] args) {Student student = new Student();student.sayHi();}}

    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關鍵字

    定義

    • 一個權限修飾符
    • 可以修飾成員變量和成員方法
    • 被修飾的成員只能在本類中使用

    作用

    • 限定使?范圍, 禁?別?調?類的成員
    • 保證數據的安全性, 可以通過?法中的代碼對有害數據進?過濾
    public class Person {private int age;public void setAge(int age2){//符合規則的信息才去賦值if (age2 > 0 && age2 < 150) {age = age2;}else{System.out.println("年齡信息不對");}}//獲取年齡信息public int getAge(){return age;} }

    JavaBean POJO

    • 類中的屬性全部私有化
    • 通過getter 和 setter?法進?設置
    • 提供toString?法?來描述對象
    • javabean的主要作?是運送數據
    public class Person {private String name;private int age;//name的getter?法public String getName() {return name;}//name的setter?法public void setName(String name) {this.name = name;}//age的getter?法public int getAge() {return age;}//age的setter?法public void setAge(int age) {this.age = age;}public String toString(){return name +","+ age;} }

    實例:

    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

    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;}//輸出方法:使用this關鍵字public void sayHi() {System.out.println("姓名:" + this.name + "年齡:" + this.age + "性別:"+ this.sex + "分數:" + this.score);} }class Test {public static void main(String[] args) {Student student = new Student("du", 12, 54.1, '男');student.sayHi();} }

    應用

    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;}

    總結

    以上是生活随笔為你收集整理的java面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。