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

Java全面分析面向?qū)ο笾庋b

 更新時(shí)間:2022年04月25日 16:37:30   作者:厚積薄發(fā)?  
或許大家都聽說(shuō)過(guò)java是純面向?qū)ο笳Z(yǔ)言,面向?qū)ο笏枷胍簿褪俏覀兂Uf(shuō)的OOP,我們聽說(shuō)最多的思想就是繼承,封裝,多態(tài),今天我們來(lái)講一講封裝

什么是封裝呢

封裝就是一種將數(shù)據(jù)和操作數(shù)據(jù)的方法進(jìn)行有機(jī)結(jié)合,一種函數(shù)抽象類的接口實(shí)現(xiàn)了對(duì)細(xì)節(jié)的封裝和隱藏,使得我們只需要調(diào)用對(duì)外開放的公共接口去實(shí)現(xiàn)與對(duì)象的交互。我們可以把封裝理解為一種保護(hù)的屏障,需要一些嚴(yán)格的接口進(jìn)行控制,我們可以修改自己實(shí)現(xiàn)類的內(nèi)部結(jié)構(gòu)的代碼,但是不可以修改那些公共接口。這就提供更好的安全性。

封裝的好處意義

  • 好的封裝能夠減少耦合度
  • 能夠?qū)Τ蓡T變量更精準(zhǔn)的控制
  • 實(shí)現(xiàn)對(duì)細(xì)節(jié)的封裝和隱藏,使得更具有安全性。
  • 可以修改類的內(nèi)部代碼,不用修改那些公共的接口

講到封裝那必然講到關(guān)鍵字private也就是訪問(wèn)修飾限定符。

回憶一下我們見過(guò)哪些訪問(wèn)修飾限定符呢?有public ,還有成員變量什么也不加的默認(rèn)權(quán)限英文是default,還有就是我們今天要講解的private,下一篇文章會(huì)講解protected。

那private到底有什么用處呢?

我們?cè)趤?lái)回憶一下上篇文章講過(guò)的類和對(duì)象,下面我會(huì)創(chuàng)建一個(gè)學(xué)生類。

//創(chuàng)建一個(gè)學(xué)生類
class Student {
    public String name;//學(xué)生姓名
    public int age;//學(xué)生年齡
    public String sex;//學(xué)生性別
    public double score;//學(xué)生分?jǐn)?shù)
   
    public void sleep() {
        System.out.println("我要睡覺(jué)了?。?!");
    }
    public void eat() {
        System.out.println("我要干飯了!??!");
    }
    public void exam() {
        System.out.println("我要考試了!??!");
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Student student = new Student();//利用new關(guān)鍵字實(shí)例化一個(gè)對(duì)象
        student.age = 19;
        student.name = "厚積薄發(fā)";
        student.score = 99.9;
        student.sex = "男";
    }
}

以上的代碼我們將這個(gè)學(xué)生成員變量分別賦值。這樣寫會(huì)不會(huì)有什么不足呢?

想一想,如果我們每次要定義一個(gè)學(xué)生對(duì)象,每次都要這樣賦值會(huì)不會(huì)有點(diǎn)太麻煩?今天我們講到封裝就會(huì)讓它更簡(jiǎn)單一些。請(qǐng)看下面代碼:

class Student {
    private String name;//學(xué)生姓名
    private int age;//學(xué)生年齡
    private String sex;//學(xué)生性別
    private double score;//學(xué)生分?jǐn)?shù)
 
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("厚積薄發(fā)");
        System.out.println(student.getName());
    }
}

根據(jù)封裝的概念我是不是可以給它封裝成一個(gè)公共的接口然后調(diào)用。

好接下來(lái)分析一下這個(gè)代碼:

 所以,我們?cè)诔蓡T變量前面加上private修飾使得成員變量只能在類的內(nèi)部訪問(wèn),不能在類的外部訪問(wèn),然后我們實(shí)現(xiàn)了setName getName方法,調(diào)用者兩個(gè)接口就可以進(jìn)行初始化和返回值操作,更好地體現(xiàn)了封裝性。

getter方法和setter方法

為了更方便的調(diào)用這些接口,IDEA會(huì)為我們提供了這些接口,我們通常情況下把這些方法叫做getter方法和setter方法。只要我們需要我們就可以調(diào)用這些共有的getter方法和setter方法。

IDEA快捷鍵:Alt + insert

class Student {
    private String name;//學(xué)生姓名
    private int age;//學(xué)生年齡
    private String sex;//學(xué)生性別
    private double score;//學(xué)生分?jǐn)?shù)
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    public void sleep() {
        System.out.println("我要睡覺(jué)了?。?!");
    }
    public void eat() {
        System.out.println("我要干飯了?。?!");
    }
    public void exam() {
        System.out.println("我要考試了?。?!");
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Student student = new Student();//利用new關(guān)鍵字實(shí)例化一個(gè)對(duì)象
        student.setName("厚積薄發(fā)");
        student.setAge(19);
        student.setScore(99.9);
        student.setSex("male");
        System.out.println(student.getName());
        System.out.println(student.getAge());
        System.out.println(student.getScore());
        System.out.println(student.getSex());
    }
}

toString方法

此外,我們每個(gè)成員變量都要自己實(shí)現(xiàn)一遍打印操作,沒(méi)錯(cuò)IDEA編譯器又為我們提供了一個(gè)方法,這個(gè)方法叫做toString方法,快捷鍵是 Alt +insert然后選擇toString方法。

 我們直接打印對(duì)象的引用就可以調(diào)用toString方法.

有同學(xué)就會(huì)問(wèn)為什么呢?

這就得需要我們看一看println的源碼是怎么實(shí)現(xiàn)的了。

我們按住ctrl 點(diǎn)進(jìn)println這個(gè)方法

 我們通過(guò)源碼就可以發(fā)現(xiàn),println會(huì)調(diào)用toString方法,如果定義了toString方法,那他就調(diào)用toString方法,如果沒(méi)有調(diào)用他就會(huì)打?。?/p>

 eg:

其中IDEA還為我們提供了構(gòu)造方法,為了更好地方便初始化,構(gòu)造方法的文章請(qǐng)看這篇文章:

Java 類與對(duì)象超基礎(chǔ)講解

快捷鍵: Alt + insert  選擇constructor

總結(jié):

private關(guān)鍵字:利用private修飾的成員變量和方法只能在本類中訪問(wèn),如果在外部訪問(wèn)可以調(diào)用公有的setter方法和getter方法。

封裝的優(yōu)點(diǎn):減少代碼的耦合性    , 可以自由修改自己的內(nèi)部類,不用修改公有地接口 ,隱藏信息實(shí)現(xiàn)細(xì)節(jié),更精準(zhǔn)的控制成員變量。

要記住并且運(yùn)用并且調(diào)用這些公共的接口:getter方法和setter方法 還有toString方法  以及 構(gòu)造方法。

面向?qū)ο蠓庋b之包

包是什么呢?

包其實(shí)就是類似于文件夾,為了更好地管理。在java中引入包的概念,包的用處:如果一個(gè)包中的類不想被另外一個(gè)包中的類使用這就更好地體現(xiàn)了封裝性,還有一個(gè)作用就是,Java中不可以在src底下創(chuàng)建相同的類名,這一點(diǎn)包就可以解決,只要在不同的包中,類的名稱可以一樣。

怎么進(jìn)行導(dǎo)包呢?

還記得我們?cè)趯W(xué)習(xí)數(shù)組的時(shí)候使用過(guò)Arrays這個(gè)類,我們就要導(dǎo)入java.util包

例如:

 當(dāng)然我們還可以手動(dòng)導(dǎo)入

 這里還需要注意一個(gè)問(wèn)題:

我們可以注意到在包中有java.util包也有java.sql包,當(dāng)我們同時(shí)導(dǎo)入這兩個(gè)包,計(jì)算機(jī)就會(huì)反應(yīng)不過(guò)來(lái)到底導(dǎo)入哪個(gè)包

所以,當(dāng)同時(shí)導(dǎo)入util包和sql包時(shí)候,我們需要手動(dòng)導(dǎo)入具體是導(dǎo)入那一個(gè)包。

自定義包

 一般包的名字都是域名倒著過(guò)來(lái)  例如 com.hjbf.TestDemo

 我們上面文章講過(guò)訪問(wèn)修飾限定符,有一個(gè)是默認(rèn)訪問(wèn)權(quán)限(default)其實(shí)也叫作包訪問(wèn)權(quán)限,如果成員變量前邊什么也不加那就是默認(rèn)訪問(wèn)權(quán)限也叫作包訪問(wèn)權(quán)限只能夠在同一包中使用。

這里我們要注意一下我們創(chuàng)建一個(gè)包,他就會(huì)導(dǎo)入這個(gè)包,其中packge是聲明在包中,后面的就是路徑。

我們可不可以在這個(gè)包里訪問(wèn)其他包呢?

答案是可以的,當(dāng)我們?cè)L問(wèn)其他包時(shí)候,他就會(huì)在本包中導(dǎo)入其他的包。

包的基本規(guī)則:

  • 在文件的最上方加上一個(gè) package 語(yǔ)句指定該代碼在哪個(gè)包中.
  • 包名需要盡量指定成唯一的名字, 通常會(huì)用公司的域名的顛倒形式(例如 com.bit.demo1 ).
  • 包名要和代碼路徑相匹配. 例如創(chuàng)建 com.bit.demo1 的包, 那么會(huì)存在一個(gè)對(duì)應(yīng)的路徑 com/bit/demo1 來(lái)存儲(chǔ)代碼.
  • 如果一個(gè)類沒(méi)有 package 語(yǔ)句, 則該類被放到一個(gè)默認(rèn)包中.

常見的包分類:

1. java.lang:系統(tǒng)常用基礎(chǔ)類(String、Object),此包從JDK1.1后自動(dòng)導(dǎo)入。

2. java.lang.reflect:java 反射編程包;

3. java.net:進(jìn)行網(wǎng)絡(luò)編程開發(fā)包。

4. java.sql:進(jìn)行數(shù)據(jù)庫(kù)開發(fā)的支持包。

5. java.util:是java提供的工具程序包。(集合類等) 非常重要

6. java.io:I/O編程開發(fā)包

到此這篇關(guān)于Java全面分析面向?qū)ο笾庋b的文章就介紹到這了,更多相關(guān)Java封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決springboot bean中大寫的字段返回變成小寫的問(wèn)題

    解決springboot bean中大寫的字段返回變成小寫的問(wèn)題

    這篇文章主要介紹了解決springboot bean中大寫的字段返回變成小寫的問(wèn)題,具有很好的參考價(jià)值希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • java中double轉(zhuǎn)化為BigDecimal精度缺失的實(shí)例

    java中double轉(zhuǎn)化為BigDecimal精度缺失的實(shí)例

    下面小編就為大家?guī)?lái)一篇java中double轉(zhuǎn)化為BigDecimal精度缺失的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • MyBatis入門初體驗(yàn)之使用大全(2)

    MyBatis入門初體驗(yàn)之使用大全(2)

    這篇文章主要介紹了MyBatis入門初體驗(yàn)之使用大全(2)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • MyBatis中resultMap和resultType的區(qū)別詳解

    MyBatis中resultMap和resultType的區(qū)別詳解

    這篇文章主要介紹了MyBatis中resultMap和resultType的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java中數(shù)組轉(zhuǎn)list的兩種簡(jiǎn)單實(shí)現(xiàn)方式

    Java中數(shù)組轉(zhuǎn)list的兩種簡(jiǎn)單實(shí)現(xiàn)方式

    這篇文章主要介紹了兩種將數(shù)組轉(zhuǎn)換為L(zhǎng)ist的方法,兩種方法分別是使用Arrays.asList()方法和使用ArrayList構(gòu)造函數(shù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • SpringBoot3集成Swagger3的詳細(xì)教程

    SpringBoot3集成Swagger3的詳細(xì)教程

    Swagger 3(OpenAPI 3.0)提供了更加強(qiáng)大和靈活的API文檔生成能力,本教程將指導(dǎo)您如何在Spring Boot 3項(xiàng)目中集成Swagger3,并使用Knife4j作為UI界面,需要的朋友可以參考下
    2024-03-03
  • java類的全限定名是什么

    java類的全限定名是什么

    Java中的全限定名指的是包含包名和類名的完整標(biāo)識(shí),例如“java.lang.String”,而非限定名僅指類名,如“String”,全限定名用于區(qū)分不同包中相同名字的類,避免引用混淆,特別是在有多個(gè)包含相同類名的庫(kù)時(shí)
    2024-09-09
  • 記一次線上SpringCloud Feign請(qǐng)求服務(wù)超時(shí)異常排查問(wèn)題

    記一次線上SpringCloud Feign請(qǐng)求服務(wù)超時(shí)異常排查問(wèn)題

    這篇文章主要介紹了記一次線上SpringCloud Feign請(qǐng)求服務(wù)超時(shí)異常排查問(wèn)題,本項(xiàng)目與下游項(xiàng)目均注冊(cè)在Eureka上面,對(duì)這個(gè)1秒就超時(shí)感到很迷惑,于是開始查閱底層源碼之旅。需要的朋友可以參考下
    2022-01-01
  • JAVA工程中引用本地jar的3種常用簡(jiǎn)單方式

    JAVA工程中引用本地jar的3種常用簡(jiǎn)單方式

    Jar文件的全稱是Java Archive File即Java歸檔文件,主要是對(duì)class文件進(jìn)行壓縮,是一種壓縮文件,和常見的zip壓縮文件兼容,下面這篇文章主要給大家介紹了關(guān)于JAVA工程中引用本地jar的3種常用簡(jiǎn)單方式,需要的朋友可以參考下
    2024-03-03
  • Springboot集成JSR303參數(shù)校驗(yàn)的方法實(shí)現(xiàn)

    Springboot集成JSR303參數(shù)校驗(yàn)的方法實(shí)現(xiàn)

    這篇文章主要介紹了Springboot集成JSR303參數(shù)校驗(yàn)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論

德保县| 上蔡县| 扶余县| 六盘水市| 阜宁县| 蓬莱市| 定远县| 定边县| 堆龙德庆县| 青阳县| 神木县| 平舆县| 祁阳县| 内丘县| 贡觉县| 青神县| 江北区| 泗洪县| 巩义市| 通化市| 青川县| 遂溪县| 新密市| 肃南| 乾安县| 黑山县| 伽师县| 务川| 深州市| 河西区| 马边| 顺平县| 时尚| 金沙县| 乌拉特中旗| 惠安县| 蓬安县| 维西| 集贤县| 双峰县| 定襄县|