Chapter10 Java封裝

Lecture1 封裝的實現(xiàn)

  • 封裝:將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問,只能通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問(即隱藏對象信息的同時要留出訪問的接口)
  • 封裝的特點:
    1. 只能通過規(guī)定的方法訪問數(shù)據(jù)
    2. 隱藏類的實例細(xì)節(jié),方便修改和實現(xiàn)
  • 封裝代碼的實現(xiàn):
    1. 修改屬性的可見性 -- 設(shè)為private
    2. 創(chuàng)建getter/setter方法 -- 設(shè)為public,用于屬性的讀寫
    3. 在getter/setter方法中加入屬性控制語句

Tips:只有g(shù)etXXX方法的屬性是只讀屬性;只有setXXX方法的屬性是只寫屬性

  • Java封裝的意義:
    • 防止使用者錯誤修改系統(tǒng)的屬性
    • 提高系統(tǒng)的獨立性
    • 提高軟件的可重用性
  • Java封裝案例:
package Chapter10.Lecture1.cat;

/**
 * 寵物貓類的封裝
 */
public class Cat {
    //1.修改屬性的可見性--private,限定只能在當(dāng)前類內(nèi)被訪問
    private String name;    //昵稱
    private int month;      //年齡

    public Cat(){

    }

    //通過帶參構(gòu)造方法賦值
    public Cat(int month) {
        this.setMonth(month);
    }

    //2. 創(chuàng)建getter/setter方法
    public String getName() {
        return "我是一只叫" + name + "的寵物貓";
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        if (month <= 0) {
            System.out.println("信息輸入錯誤,年齡必須大于0");
        } else {
            this.month = month;
        }
    }
}
package Chapter10.Lecture1.cat;

public class CatTest {
    public static void main(String[] args) {
        //對象實例化
        Cat one = new Cat();
        //通過帶參構(gòu)造方法創(chuàng)建類
        Cat two = new Cat(-2);
        //測試
        //會輸出屬性month的初始值0
        System.out.println("年齡:"+two.getMonth());

        one.setName("花花");
        System.out.println(one.getName());

        one.setMonth(-1);
        if (one.getMonth() == 0) {
            return;
        }
        System.out.println("年齡:" + one.getMonth());
    }
}
  • 定義Java包:語法 -- package 包名;,必須放在Java源文件中的第一行;一個Java源文件中只能有一個package語句
  • Java包的作用:管理Java文件;解決同名文件沖突
  • Java包的特點:Java中一個包里不能存在同名類,建議每個包內(nèi)儲存的信息功能單一
  • Java包的命名:域名倒序+模塊名+功能名(推薦全部使用小寫)
  • 導(dǎo)入包的方法:
    1. 通過import 包名.*;導(dǎo)入此包下的所有類
    2. 通過import 包名.類名;導(dǎo)入此包下的指定類
    3. 通過在源代碼中直接加載包名.類名;

建議采用import 包名.類名;的方式加載,提高效率

Tips:加載類的順序跟import導(dǎo)入語句的位置無關(guān)

  • 當(dāng)通過import 包名.*;只能訪問到指定包名下的類,無法訪問子包下的類
  • Java常用系統(tǒng)包:
java.lang 包含Java語言的基礎(chǔ)的類,該包系統(tǒng)加載時默認(rèn)導(dǎo)入,如:System、String、Math
java.util 包含Java語言中常用工具,如:Scanner、Random
java.io 包含輸入、輸出相關(guān)功能的類,如File、InputStream

Lecture2 static關(guān)鍵字

  • static關(guān)鍵字:表示靜態(tài)信息;特征:類對象共享(即共享同一塊內(nèi)存空間);類加載時產(chǎn)生,銷毀時釋放,生命周期長
  • 靜態(tài)成員的訪問方法:
    1. 對象.成員名
    2. 類名.成員名

推薦調(diào)用方式:類名.靜態(tài)成員

  • static + 屬性 -- 靜態(tài)屬性、靜態(tài)屬性;static + 方法 -- 靜態(tài)方法、類方法;沒有靜態(tài)的類(只能使用public、abstract、final修飾)和靜態(tài)的局部變量(只能使用final修飾)
  • 普通成員方法可以調(diào)用類中任何成員(包括靜態(tài)成員),而靜態(tài)方法中不能直接訪問同一個類中的非靜態(tài)成員,只能直接調(diào)用同一個類中的靜態(tài)成員
  • 代碼塊:在語句中出現(xiàn)“ {} ”,就叫做代碼塊;出現(xiàn)在方法里 -- 普通代碼塊(順序執(zhí)行 - 先出現(xiàn),先執(zhí)行;可以有多個普通代碼塊 );出現(xiàn)在類中 -- 構(gòu)造代碼塊(創(chuàng)建對象時調(diào)用,優(yōu)先于構(gòu)造方法執(zhí)行;可以有多個構(gòu)造代碼塊),可以給所有成員賦值;static + 構(gòu)造代碼塊 -- 靜態(tài)代碼塊(只在類加載時調(diào)用執(zhí)行一次,優(yōu)先于構(gòu)造代碼塊執(zhí)行;可以有多個靜態(tài)代碼塊),只能給靜態(tài)成員賦值
  • 變量的作用范圍:從定義處開始至大括號閉合
  • static關(guān)鍵字及代碼塊案例:
package Chapter10.Lecture2.animal;

public class Cat {
    //靜態(tài)成員、類成員
    public static int price;   //售價

    private String name;    //昵稱
    private int month;  //年齡
    private double weight;  //體重
    private String species; //品種

    {
        System.out.println("我是構(gòu)造代碼塊");
    }

    static {
        System.out.println("我是靜態(tài)代碼塊");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    public String getSpecies() {
        return species;
    }

    public void setSpecies(String species) {
        this.species = species;
    }

    public static void eat() {
        //靜態(tài)方法中不能直接訪問同一個類中的非靜態(tài)成員,只能直接調(diào)用同一個類中的靜態(tài)成員
        //run();
        //name = "小明";
        //只能通過對象實例化后,對象.成員方法的方式訪問非靜態(tài)成員
        Cat temp = new Cat();
        temp.run();
        temp.name = "小明";
        //靜態(tài)方法中不能使用this
        //this.name = "小明";
        Cat.price = 100;
        System.out.println("小貓吃魚");
    }

    //在成員方法中,可以直接訪問類中的靜態(tài)成員
    public void run() {
        {
            System.out.println("我是普通代碼塊");
        }
        this.name = "凡凡";
        Cat.price = 20;
        eat();//此行代碼會導(dǎo)致棧溢出,注釋掉后執(zhí)行(原因:遞歸調(diào)用)
        System.out.println("售價是" + Cat.price + "的" + this.name + "快跑");
    }
}
package Chapter10.Lecture2.test;

import Chapter10.Lecture2.animal.Cat;

public class Test {
    public static void main(String[] args) {
        Cat one = new Cat();
        one.setName("花花");
        one.setMonth(2);
        one.setSpecies("英國短毛貓");
        //one.price = 2000;
        Cat.price = 2000;

        Cat two = new Cat();
        two.setName("凡凡");
        two.setMonth(1);
        two.setSpecies("中華田園貓");
        //two.price = 150;
        Cat.price = 150;

        System.out.println(one.getName() + "的售價為:" + one.price);
        System.out.println(two.getName() + "的售價為:" + two.price);

        //one.eat();
        Cat.eat();
        System.out.println("----------------------");

        one.run();
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,741評論 18 399
  • 一、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計...
    子非魚_t_閱讀 4,564評論 1 44
  • 我不斷地為自己畫餅,卻從來沒有嘗到味道,只有微笑的告訴自己還有下一次,然后慢慢把自己埋葬。
    折木咳咳閱讀 213評論 0 0
  • 白晝,你我相遇在藍天,太陽與白云間。作為伴娘,你雖不耀眼,但潔白無暇;無人關(guān)注,卻依然魅力倔強的出場。 陪伴太陽,...
    粉色的桃林閱讀 594評論 2 26
  • 別名:蔦、寓木、宛童、桑上寄生、寄屑、寄生樹、蔦木 基源植物:桑寄生科鈍果寄生屬植物桑寄生的帶葉枝葉。 拉丁學(xué)名:...
    本草園丁閱讀 5,255評論 0 2

友情鏈接更多精彩內(nèi)容