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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JavaSE——面向对象基础(思想、类与对象、构造方法、重载、匿名对象)

發布時間:2024/7/23 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaSE——面向对象基础(思想、类与对象、构造方法、重载、匿名对象) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第1節 面向對象基礎

一、面向對象思想

1.1 概述

面向對象(Object Oriented)是軟件開發方法。面向對象的概念和應用已超越了程序設計和軟件開發,是一種對現實世界理解和抽象的方法,是計算機編程技術發展到一定階段的產物。面向對象是相對于面向過程來講的,指的是把相關的數據和方法組織為一個整體來看待,從更高的層次來進行系統建模,更貼近事物的自然運行模式。

面向過程到面向對象思想層面的轉變:

  • 面向過程關注的是執行的過程,面向對象關注的是具備功能的對象。

  • 面向過程到面向對象,是程序員思想上 從執行者到指揮者的轉變。

此概念如果直接去理解的話可能會比較抽象,因為大家缺少對原始的面向過程的開發語言的了解,下面我們舉一個栗子:

1.2 三大思想

面向對象思想從概念上講分為以下三種:OOA、OOD、OOP

  • OOA:面向對象分析(Object Oriented Analysis)

  • OOD:面向對象設計(Object Oriented Design)

  • OOP:面向對象程序(Object Oriented Programming)

  • 1.3 三大特征

  • 封裝性:所有內容對外部不可見

  • 繼承性:將其他的功能繼承下來繼續發展

  • 多態性:方法的重載本身就是一個多態性的體現

  • 二、類與對象

    2.1 概念與關系

    類表示一個 共性的 產物,是一個綜合的特征,而對象,是一個 個性的 產物,是一個個體的特征。類必須通過對象才可以使用,對象的所有操作都在類中定義。

    類由屬性和方法組成:

    • 屬性:就相當于人的一個個的特征

    • 方法:就相當于人的一個個行為,例如:說話、吃飯、唱歌、睡覺

    2.2 類的定義格式

    class 類名稱{成員屬性成員方法 }

    注意:

    • 類必須編寫在.java文件中。

    • 一個.java文件中,可以存在N個類,但是只能存在一個public修飾的類。

    • .java文件的文件名稱,必須與public修飾的類名完全一致,否則會報錯。

    2.3 屬性和方法

    屬性定義格式:數據類型 屬性名; 屬性定義并賦值的格式:數據類型 屬性名 = 初始化值;方法定義格式:權限修飾符 返回值類型 方法名(形式參數列表) {//方法體return 返回值;}

    2.4 對象的創建與使用

    一個類想要真正的進行操作,則必須依靠對象,對象的定義格式如下:類名稱 對象名稱 = new 類名稱();如果要想訪問類中的屬性或方法(方法的定義),則可以依靠以下的語法形式:訪問類中的屬性: 對象名.屬性名;調用類中的方法: 對象名.方法(實際參數列表);

    示例如下:

    /*** class 類名{* 成員屬性;* 成員方法;* }** 類必須編寫在.java文件中。* 一個.java文件中,可以存在N個類,但是只能存在一個public修飾的類* .java文件的文件名稱必須與public修飾的類名完全一致**/ public class classobject {public static void main(String[] args) {//創建對象的格式://類名 對象名 = new 類名();Person p = new Person();//對象屬性賦值://格式:對象名.屬性名p.name = "張三";p.age = 18;p.sex = '男';p.say();int sum = p.sum(100, 200);System.out.println(sum);} }/*** 類就像是圖紙*/ class Person{//屬性 - 特征String name;int age;char sex;//方法 - 行為/*** 返回值類型 方法名稱(形式參數列表) {* 方法體* return 返回值;* }** 調用格式:* 對象名.方法名稱(實際參數列表);*/void say() {System.out.println("自我介紹,我是"+name+",我的年齡:"+age+"我的性別:"+sex);}int sum(int x, int y) {return x + y;}// void xxx() { // if (true) { // //return表示結束方法 // return; // } // System.out.println("haha"); // } } public class classobject2 {public static void main(String[] args) {Book b1 = new Book();Book b2 = new Book();b1.name = "三體";b1.info = "科幻小說";b2.name = "平凡的世界";b2.info = "紀實小說";b1.say();b2.say();} }class Book {String name;String info;void say() {System.out.println("書名:"+name+",簡介:"+info);} }

    2.5 創建對象內存分析

    2.5.1 棧

    Java棧的區域很小,大概2M左右,特點是存取的速度特別快。棧存儲的特點:先進后出存儲速度快的原因:

    ????- 棧內存,通過“棧指針”來創建空間與釋放空間,指針向下移動,會創建新的內存,向上移動,會釋放這些內存

    這種方式速度特別快,僅次于PC寄存器,但是這種移動的方式,必須要明確移動的大小與范圍。明確大小與范圍是為了方便指針的移動,這是一個對于數據存儲的限制,存儲的數據大小是固定的,影響了程序的靈活性。由于不太靈活,所以把更大部分的數據存儲到了堆內存中。

    存儲的內容有:

    **基本數據類型的數據** 以及 **引用數據類型的引用** 例如: int a = 10; Person p = new Person();

    10存儲在棧內存中,對象的引用p存儲在棧內存中。

    2.5.2 堆

    存放的內容是:類的對象。

    Java是一個純面向對象語言,限制了對象的創建方式:所有類的對象都是通過new關鍵字創建,new關鍵字,是指告訴JVM,需要明確的去創建一個新的對象,去開辟一塊新的堆內存空間。

    優點:與棧內存相對,創建對象時,不必關注堆內存中需要開辟多少存儲空間,也不需要關注內存占用時長。

    堆內存中內存的釋放是由GC(垃圾回收器)完成的。

    垃圾回收器 回收堆內存的規則:

    當棧內存中不存在此對象的引用時,則視其為垃圾,等待垃圾回收器回收。

    例如:

    Person p0 = new Person(); Person p1 = p0; Person p2 = new Person();

    2.5.3 方法區

    存放的內容是:

    • 類信息

    • 靜態的變量

    • 常量

    • 成員方法

    方法區中包含了一個特殊的區域(常量池)(存儲的是使用static修飾的成員)

    2.5.4 PC寄存器

    PC寄存器保存的是 當前正在執行的JVM指令的 地址

    2.5.5 本地方法棧

    保存本地(native)方法的地址。

    給個例子:

    上述代碼中,創建對象時,對象的引用(b1,b2)存放在棧內存中,另外在堆內存中開辟真正的空間用于存放對象的屬性,而類的方法會存在方法區中。當b2=b1時,就是將b1內存放的地址值賦值給b2,那么b2也就指向了b1,堆內存中0x124位置的內容就沒有引用了,后續會被GC回收。

    三、構造方法

    在對象創建時,`Person p = new Person();`在Person右側的小括號,其實就是在調用構造方法。

    3.1 概述

    作用 :用于對象初始化(個人理解比較像Python的__init__()函數)

    執行時機 :在創建對象時,自動調用,如果類中沒寫,默認調用無參構造方法。

    特點 :所有Java類中都會至少存在一個構造方法,如果一個類中沒有明確的編寫構造方法,則編譯器會自動生成一個無參構造方法,構造方法中沒有任何代碼!(但是最好還是養成寫的習慣)。

    注意 :如果自行編寫了任意一個構造器,則編譯器不會再自動生成無參的構造方法。

    3.2 定義格式

    定義的格式:與普通方法基本相同,區別在于:方法名稱必須與類名相同,沒有返回值類型的聲明! 例如:public class Demo3 {Person p = new Person();p = new Person();}class Person{public Person(){System.out.println("對象創建時,此方法調用");}} public class constructorfunction {public static void main(String[] args) {Person2 p1 = new Person2("張三");p1.age = 18;p1.say();} }class Person2 {String name;int age;Person2(String n) {name = n;}void say() {System.out.println("自我介紹,我是:"+name+",我的年齡:"+age);} }

    3.3 構造方法設計

    • 建議自定義無參構造方法 ,不要對編譯器形成依賴,避免錯誤發生。

    • 當類中有非常量成員變量時,建議提供兩個版本的構造方法,一個是無參構造方法,一個是全屬性做參數的構造方法

    • 當類中所有成員變量都是常量或者沒有成員變量時,建議不提供任何版本的構造。

    四、方法的重載

    4.1 概念

    一個類中定義的方法,是允許重載的。

    滿足下列要求的方法稱之為重載:

  • 方法名稱相同;

  • 參數列表長度 或 參數列表類型 或 參數類型順序不同;

  • 與返回值類型無關

    方法的重載,可以讓我們在不同的需求下,通過傳遞不同的參數調用方法來完成具體的功能。
  • class Math{int sum(double x, int y) {return y;}int sum(int y, double x) {return y;}double sum(double x, double y) {return x + y;} }

    4.2 構造方法的重載

    一個類可以存在多個構造方法:

    參數列表的長度或類型不同 即可完成構造方法的重載。

    作用 :構造方法的重載,可以讓我們在不同的創建對象的需求下,調用不同的方法來完成對象的初始化。

    public class constructor_overload {public static void main(String[] args) {Person3 p = new Person3("張三", 18);p.say();Person3 p2 = new Person3("李四");p2.say();} }class Person3{Person3(String name2, int age2){name = name2;age = age2;}Person3(String name2) {name = name2;}String name;int age;void say() {System.out.println("自我介紹,姓名:"+name+",年齡:"+age);} }

    五、匿名對象

    沒有對象名稱的對象,就是匿名對象。

    匿名對象只能使用一次,因為沒有任何的對象引用,所以將稱為垃圾,等待被GC回收。只使用一次的對象可以通過匿名對象的方式完成,這一點在以后的開發中將經常被使用到。

    public class Anonymousobject {/*** 匿名: 沒有名字,相當于棧內存中沒有創建引用,只在堆內存中開辟了空間* 使用完畢后,該對象就會被回收*/public static void main(String[] args) { // Math2 m = new Math2(); // int num = m.sum(100, 200); // System.out.println(num);int num = new Math2().sum(100, 200);System.out.println(num);} }class Math2{int sum(int x, int y) {return x + y;} }

    總結

    以上是生活随笔為你收集整理的JavaSE——面向对象基础(思想、类与对象、构造方法、重载、匿名对象)的全部內容,希望文章能夠幫你解決所遇到的問題。

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