最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

全方位講解Java的面向?qū)ο缶幊趟枷?/h1>
 更新時間:2016年01月30日 18:03:40   作者:nisior  
這篇文章主要介紹了Java的面相對象編程思想,包括類對象方法和封裝繼承多態(tài)等各個方面的OOP基本要素,非常推薦,需要的朋友可以參考下

什么是面向?qū)ο螅?br /> Object 對象,Oriendted 以…為導(dǎo)向的, Programming 程序設(shè)計(jì)

面向?qū)ο缶褪鞘褂脤ο筮M(jìn)行程序設(shè)計(jì),簡寫成OOP。

2016130175657163.gif (684×415)

SP和OOP對比

2016130175721344.png (701×461)

面向?qū)ο蟮娜笤瓌t
     封裝  繼承   多態(tài)

對象

對象是面向?qū)ο缶幊痰暮诵牟糠?,是?shí)際存在的具體實(shí)體,具有明確定義的狀態(tài)和行為;
對象其實(shí)就是“數(shù)據(jù)”和“函數(shù)”的封裝體,其中:
數(shù)據(jù)表示自身的狀態(tài),也稱作“屬性”或“成員數(shù)據(jù)”;
函數(shù)表示自身的功能,也稱作“方法”或“成員函數(shù)”。


人們?yōu)榱烁玫卣J(rèn)識世界,將現(xiàn)實(shí)生活中的事物(對象)劃分成類;
同一類中的事物總是具有一些共性;
類以共同的特性和行為定義實(shí)體;
類是具有相同屬性和和行為的一組對象的集合。

屬性
事物的特性在類中用變量表示;
每個對象的每個屬性都擁有其特定的值;
屬性名稱由類的所有對象共享;
對象或?qū)嶓w擁有的特征在類中表示時稱為屬性     

2016130175744604.gif (545×213)

方法
事物的行為和動作在類中用函數(shù)表示;
每個對象都有相同的動作和行為;
對象執(zhí)行的操作在類中表示為方法。

2016130175800960.gif (546×218)

類和對象的區(qū)別
類是用來描述實(shí)體的“模板”或“原型”;
對象是實(shí)際的實(shí)體,每一個對象都是類的一個具體實(shí)例;
類用來定義對象所有的屬性和方法,同一類的所有對象都擁有相同的特征和操作;
可以將類理解成生產(chǎn)產(chǎn)品的模具,而對象則是根據(jù)此模具生產(chǎn)的一個個產(chǎn)品。

類與結(jié)構(gòu)

2016130175817170.gif (620×389)

封裝
將某些東西包裝在一起,然后以新的完整形式呈現(xiàn)出來;
隱藏屬性、方法或?qū)崿F(xiàn)細(xì)節(jié)的處理方式稱為封裝;
封裝其實(shí)就是有選擇性地公開或隱藏某些信息,它解決了數(shù)據(jù)的安全性問題。

2016130175835633.gif (608×265)

繼承
繼承就是重用現(xiàn)有的類來生成新類的一種特征;
通俗地講就是從現(xiàn)有的類(即父類或基類)創(chuàng)建新類(子類或派生類)的過程;
現(xiàn)實(shí)生活中,繼承可以達(dá)到財(cái)產(chǎn)重用的目的,而在Java中,繼承可以使代碼重用。

多態(tài)
多態(tài)是指同一函數(shù)在不同的類中有不同的實(shí)現(xiàn);
多態(tài)的好處就是使類更靈活,更便于擴(kuò)充。

這里還有一個不得不說的的 “抽象”
抽象
把相同的或相似的對象歸為一類的這個過程就是抽象,所以,抽象就是分析問題的方法;
抽象的基本原則:
只關(guān)心主要問題,而不關(guān)心次要問題;
只關(guān)心主要矛盾,而不關(guān)心次要矛盾;
只關(guān)心相同的東西,而不關(guān)心不同的東西;
只關(guān)心問題是什么,能夠完成什么,而不關(guān)心怎樣去完成。
抽象的過程其實(shí)就是面向?qū)ο缶幊痰暮诵乃枷搿?/p>


在Java中定義類

2016130175854501.gif (656×418)

在Java中創(chuàng)建對象

2016130175911018.gif (654×417)

創(chuàng)建對象的語法
和數(shù)組相似,對象也是引用數(shù)據(jù)類型,只能使用new運(yùn)算符從堆中分配內(nèi)存;
創(chuàng)建對象的一般語法:
  類名 引用名 = new 類名();
使用已經(jīng)定義好的類,創(chuàng)建該類對象的過程稱為“實(shí)例化”。

成員運(yùn)算符  “ . ”
只有先實(shí)例化類的對象,才可以訪問到類中的成員(屬性和方法);
使用成員運(yùn)算符(.)來訪問成員屬性或成員方法;
一般語法是:
  對象名.成員名
如:

std.age = 18;  //為成員屬性賦值
  std.dining(); //調(diào)用成員方法

訪問權(quán)限:public和private
C語言中結(jié)構(gòu)體的成員可以從任何地方進(jìn)行訪問,這將給數(shù)據(jù)的安全留下極大的隱患;
為了避免從類外部直接訪問類成員而造成的數(shù)據(jù)損壞,Java對類成員的訪問制定了約束;
關(guān)鍵字public和private是訪問修飾符,用來說明某個成員是否可以從類外部進(jìn)行訪問;
public修飾的成員可以在任何地方進(jìn)行訪問,不受任何約束;
private修飾的成員只能夠被本類中的其它成員訪問,而不能從類的外部進(jìn)行訪問。

無法從類的外部訪問私有成員;
其它類的私有成員對于當(dāng)前類也是隱藏的。

2016130175929736.gif (418×269)

訪問權(quán)限示例

class Student { 
 private String name;  //姓名,私有的,不可以從類外部直接訪問 
 private int age;    //年齡,私有的,不可以從類外部直接訪問 
 private float weight; //體重,私有的,不可以從類外部直接訪問 
  
 //吃飯的方法,公有的,可以從任何地方訪問 
 public void dining() { 
  System.out.println("吃飽了..."); 
  weight++; //dining方法是類內(nèi)部成員,可以直接訪問本類私有成員 
 } 
  
 //走路的方法,公有的,可以從任何地方訪問 
 public void walk() { 
  System.out.println("走累了..."); 
  weight--; //walk方法是類內(nèi)部成員,可以直接訪問本類私有成員 
 } 
} 
 
public class Test { 
 public static void main(String[] args) { 
  Student std = new Student(); //實(shí)例化一個Student對象 
  std.age = 18;  //試圖從類外部訪問私有成員,將會報出一個錯誤 
  std.dining();  //允許訪問公有成員 
 } 
} 


訪問權(quán)限(續(xù))
加上訪問修飾符有時候可能會給操作數(shù)據(jù)帶來不便,但可以在很大程度上保證數(shù)據(jù)的安全;
一般地,我們會將成員屬性聲明為private,而將成員方法聲明為public,但這樣做并不是絕對的;
有時候,類外部可能要操作到某些私有數(shù)據(jù)成員,那么就可以增加一個公有的方法,再由這個方法來操作私有數(shù)據(jù),避免因類外部的誤操作而造成的數(shù)據(jù)損壞;
因?yàn)閙ain方法要由類外部的虛擬機(jī)來調(diào)用,所以main方法必須聲明成public。
如:修改Student類

class Student { //定義學(xué)生類 
 private String name;  //姓名,私有 
 private int age;    //年齡,私有 
 private float weight; //體重,私有 
 
 public void setName(String name) {  //為姓名賦值的方法,公有 
  this.name = name; 
 } 
 public void setAge(int a) {    //為年齡賦值的方法,公有 
  age = a; 
 } 
 public void setWeight(float w) { //為體重賦值的方法,公有 
  weight = w; 
 } 
 public void display() {      //將所有信息打印出來的方法,公有 
  System.out.println("姓名:" + name + ",年齡:" + age + ",體重:" + weight); 
 } 
 public void dining() {……}     //吃飯的方法,公有,代碼略 
 public void walk() {……}      //走路的方法,公有,代碼略 
} 
 
public class Test { 
 public static void main(String[] args) { 
  Student std = new Student(); //實(shí)例化學(xué)生類對象 
  std.setName("張三");      //為姓名賦值 
  std.setAge(18);        //為年齡賦值 
  std.setWeight(55);      //為體重賦值 
  std.dining();         //調(diào)用吃飯的方法 
  std.display();        //將信息打印出來 
 } 
} 

對象初始化
在上例中,只能逐個地為數(shù)據(jù)成員賦值,如果想在對象實(shí)例化的同時就初始化成員屬性,就使用到了構(gòu)造方法;
構(gòu)造方法是特殊的成員方法,它與類同名,在對象實(shí)例化時由虛擬機(jī)自動調(diào)用;
請注意:構(gòu)造方法沒有返回值類型,也不能有返回值。
構(gòu)造方法示例:

/*定義ConstructorDemo類,對構(gòu)造方法進(jìn)行測試*/ 
class ConstructorDemo 
{ 
 /*構(gòu)造方法,方法名與類名完全一致 
 無需指定返回值類型,也不能有返回值*/ 
 public ConstructorDemo() 
 { 
  System.out.println("這是構(gòu)造方法"); 
 } 
} 
 
/*Test類,用來容納main方法 
一般將包含有main方法的類聲明為public*/ 
public class Test 
{ 
 /*main方法,程序入口*/ 
 public static void main(String[] args) 
 { 
  /*實(shí)例化ConstructorDemo類的對象*/ 
  ConstructorDemo cd = new ConstructorDemo(); 
 } 
}    //會輸出“這是構(gòu)造方法” 

構(gòu)造方法
正是由于在實(shí)例化對象的同時會自動調(diào)用構(gòu)造方法,所以構(gòu)造方法一般用來給數(shù)據(jù)成員分配資源或初始化數(shù)據(jù)成員;
構(gòu)造方法的一般形式:
  訪問權(quán)限 類名(形參列表) {
    方法體
  }
因?yàn)槭怯商摂M機(jī)來調(diào)用構(gòu)造方法,所以構(gòu)造方法一般應(yīng)定義成public。

如:為Student類添加構(gòu)造方法

class Student { //定義學(xué)生類 
 private String name;  //姓名,私有 
 private int age;    //年齡,私有 
 private float weight; //體重,私有 
 
 //構(gòu)造方法,根據(jù)傳遞進(jìn)來的參數(shù),為數(shù)據(jù)成員賦值 
 public Student(String n, int a, float w) { 
  //分別為每個數(shù)據(jù)成員賦初始值 
  name = n; 
  age = a; 
  weight = w; 
 } 
 public void setName(String n) {……} //為姓名賦值的方法,公有,代碼略 
 public void setAge(int a) {……}   //為年齡賦值的方法,公有,代碼略 
 public void setWeight(float w) {……} //為體重賦值的方法,公有,代碼略 
 public void display() {……}  //將所有信息打印出來的方法,公有,代碼略 
 public void dining() {……}  //吃飯的方法,公有,代碼略 
 public void walk() {……}   //走路的方法,公有,代碼略 
} 
 
public class Test { 
 public static void main(String[] args) { 
  //利用構(gòu)造方法,為數(shù)據(jù)成員指定初始值 
  Student std = new Student("張三", 18, 55); 
  std.display();        //將信息打印出來 
 } 
}  


構(gòu)造方法(續(xù))
每個對象在生成時都必須執(zhí)行構(gòu)造方法,而且只能執(zhí)行一次;
如果構(gòu)造方法調(diào)用失敗,那么對象也無法創(chuàng)建;
不可以顯式地直接調(diào)用構(gòu)造方法;
在沒有定義構(gòu)造方法的情況下,類會自動產(chǎn)生一個無參數(shù)的默認(rèn)構(gòu)造方法,這個默認(rèn)的構(gòu)造方法什么都不做;
一旦顯式地定義了構(gòu)造方法,默認(rèn)構(gòu)造方法自動消失。故一般定義無參和有參兩個構(gòu)造方法。

總結(jié)

  • 對象由狀態(tài)(屬性)和行為(方法)組成;
  • 類是具有相同屬性和方法的對象的集合;
  • 封裝可以隱藏對象實(shí)現(xiàn)的具體細(xì)節(jié);
  • 必須先實(shí)例化類的對象,才可以訪問到其中的成員;
  • 成員運(yùn)算符用于訪問對象的成員;
  • 成員可以定義為公有,也可以定義為私有;
  • 構(gòu)造方法一般用來初始化對象中的數(shù)據(jù)成員;
  • 如果不定義構(gòu)造方法,將有默認(rèn)的構(gòu)造方法,一旦定義,默認(rèn)的構(gòu)造方法自動消失。

相關(guān)文章

  • Mybatis批量修改聯(lián)合主鍵數(shù)據(jù)的兩種方法

    Mybatis批量修改聯(lián)合主鍵數(shù)據(jù)的兩種方法

    最近遇上需要批量修改有聯(lián)合主鍵的表數(shù)據(jù),找很多資料都不是太合適,最終自己摸索總結(jié)了兩種方式可以批量修改數(shù)據(jù),對Mybatis批量修改數(shù)據(jù)相關(guān)知識感興趣的朋友一起看看吧
    2022-04-04
  • IDEA 2020.1.1好用的plugins插件推薦

    IDEA 2020.1.1好用的plugins插件推薦

    這篇文章主要介紹了IDEA 2020.1.1好用的plugins插件推薦,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java實(shí)現(xiàn)下載文件的6種方式

    Java實(shí)現(xiàn)下載文件的6種方式

    本文主要介紹了Java實(shí)現(xiàn)下載文件的6種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作

    MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作

    這篇文章主要介紹了MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • SpringMVC中事務(wù)是否可以加在Controller層的問題

    SpringMVC中事務(wù)是否可以加在Controller層的問題

    這篇文章主要介紹了SpringMVC中事務(wù)是否可以加在Controller層的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java實(shí)現(xiàn)bmp和jpeg圖片格式互轉(zhuǎn)

    Java實(shí)現(xiàn)bmp和jpeg圖片格式互轉(zhuǎn)

    本文主要介紹了Java實(shí)現(xiàn)bmp和jpeg圖片格式互轉(zhuǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Springboot多種情況yml配置代碼實(shí)例

    Springboot多種情況yml配置代碼實(shí)例

    這篇文章主要介紹了Springboot多種情況yml配置代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 如何使用 Spring Boot 和 Canal 實(shí)現(xiàn) MySQL 數(shù)據(jù)庫同步

    如何使用 Spring Boot 和 Canal 實(shí)現(xiàn) My

    本文介紹了如何使用SpringBoot和Canal實(shí)現(xiàn)MySQL數(shù)據(jù)庫之間的數(shù)據(jù)同步,通過配置主庫、創(chuàng)建Canal用戶、配置CanalServer以及開發(fā)SpringBoot客戶端,實(shí)現(xiàn)了將主庫的數(shù)據(jù)實(shí)時同步到多個從庫,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • Java程序中Doc文檔注釋示例教程

    Java程序中Doc文檔注釋示例教程

    這篇文章主要為大家介紹了Java程序中Doc文檔注釋的示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • jxl操作excel寫入數(shù)據(jù)不覆蓋原有數(shù)據(jù)示例

    jxl操作excel寫入數(shù)據(jù)不覆蓋原有數(shù)據(jù)示例

    網(wǎng)上很多例子,都是用Jxl讀或者寫excel,本文實(shí)現(xiàn)的功能就是將數(shù)據(jù)源in.xls的第幾行第幾列數(shù)據(jù)寫入到out.xls的第幾行第幾列,不覆蓋out.xls其他原有的數(shù)據(jù)。
    2014-03-03

最新評論

彝良县| 石棉县| 揭西县| 博白县| 郧西县| 龙川县| 溆浦县| 丹东市| 嘉善县| 公安县| 庆云县| 元朗区| 定远县| 东兴市| 罗山县| 延津县| 咸阳市| 玉门市| 潜山县| 厦门市| 阳原县| 稻城县| 紫金县| 察哈| 北碚区| 犍为县| 桦南县| 东乌| 铜梁县| 夹江县| 沽源县| 金寨县| 永昌县| 故城县| 渭南市| 洛南县| 鹰潭市| 灵璧县| 苍南县| 余干县| 双城市|