亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Java Core.四.對(duì)象與類(lèi)

eechen / 2342人閱讀

摘要:四對(duì)象與類(lèi)面向?qū)ο蟪绦蛟O(shè)計(jì)概述類(lèi)之間的關(guān)系分類(lèi)依賴(lài),聚合,繼承依賴(lài)一個(gè)類(lèi)的方法操縱另一個(gè)類(lèi)的對(duì)象最常見(jiàn)的關(guān)系,最明顯的關(guān)系設(shè)計(jì)中應(yīng)該遵循盡可能減少依賴(lài),依賴(lài)越低,耦合越低聚合一個(gè)類(lèi)中包含著另一個(gè)類(lèi)使用預(yù)定義類(lèi)對(duì)象與對(duì)象變量對(duì)象變量定義引用變

四.對(duì)象與類(lèi) 4.1 面向?qū)ο蟪绦蛟O(shè)計(jì)概述 4.1.4 類(lèi)之間的關(guān)系

分類(lèi):依賴(lài)(uses a),聚合(has a),繼承(is a)

依賴(lài)

一個(gè)類(lèi)的方法操縱另一個(gè)類(lèi)的對(duì)象

最常見(jiàn)的關(guān)系,最明顯的關(guān)系

設(shè)計(jì)中應(yīng)該遵循盡可能減少依賴(lài),依賴(lài)越低,耦合越低

聚合

一個(gè)類(lèi)中包含著另一個(gè)類(lèi)

4.2 使用預(yù)定義類(lèi) 4.2.1 對(duì)象與對(duì)象變量 1.對(duì)象變量

定義:引用變量的部分

注意

一個(gè)對(duì)象變量不包含對(duì)象,僅僅引用一個(gè)對(duì)象

4.3 用戶(hù)自定義類(lèi) 4.3.4 構(gòu)造器

規(guī)則

構(gòu)造器與類(lèi)同名

每個(gè)類(lèi)可以有一個(gè)及以上的構(gòu)造器

構(gòu)造器可以有0至多個(gè)參數(shù)

構(gòu)造器沒(méi)有返回值

構(gòu)造器隨著new操作符的執(zhí)行被調(diào)用,無(wú)法通過(guò)構(gòu)造器重新設(shè)置實(shí)例域

4.3.5 隱式參數(shù)與顯式參數(shù)

隱式參數(shù):方法名面前的類(lèi)對(duì)象,使用this關(guān)鍵字代表

顯式參數(shù):傳入方法的參數(shù)

public void raise(double ByPercent){
  double raise = this.salary * ByPercent;
}
/* conclusion
1.ByPercent為顯式參數(shù)
2.this為隱式參數(shù),代表類(lèi)對(duì)象
*/

4.3.6 封裝的優(yōu)點(diǎn) 1.域訪(fǎng)問(wèn)器

定義:返回實(shí)例域值的機(jī)器

組成

私有數(shù)據(jù)域

公有的域訪(fǎng)問(wèn)器方法

公有的域更改器方法

格式:public修飾,返回值為實(shí)例域值

// 需求:返回薪水值
public class Worker{
  private int salary;
}
// 域訪(fǎng)問(wèn)器
public int getSalary(){
  return salary;
}

優(yōu)勢(shì)

支持修改內(nèi)部實(shí)現(xiàn),不影響其他代碼

支持執(zhí)行錯(cuò)誤檢查

注意

如果需要返回一個(gè)可變數(shù)據(jù)域的拷貝,使用clone()

class E{
    ...
    public Date getH(){
    return (Date)hire.clone();
  }
}

4.4 靜態(tài)域和靜態(tài)方法 4.4.1 靜態(tài)域

定義:被static修飾的域

特點(diǎn):靜態(tài)域?qū)儆陬?lèi),不屬于對(duì)象。 也就是所有對(duì)象共享一個(gè)靜態(tài)域

4.4.2 靜態(tài)常量

常用的靜態(tài)常量

Math.PI

// 定義
public class Math {
    public static final double PI = 3.123453454354535345;
}
// 使用
public class TestMath {
    public static void main(String[] args) {
        int l = 5;
        double circle = l*l*Math.PI;
        System.out.println(circle);
    }
}

System.out

4.4.3 靜態(tài)方法

定義:不能向?qū)ο髮?shí)施操作的方法 (靜態(tài)方法是沒(méi)有this參數(shù)的方法)

使用場(chǎng)景

方法不需要訪(fǎng)問(wèn)對(duì)象狀態(tài),所需參數(shù)都是通過(guò)顯示參數(shù)提供

方法只需要訪(fǎng)問(wèn)類(lèi)的靜態(tài)域

4.4.4 工廠方法

定義:靜態(tài)方法模式,支持返回預(yù)期的對(duì)象

步驟

創(chuàng)建抽象產(chǎn)品類(lèi),定義公共的接口

創(chuàng)建具體產(chǎn)品類(lèi)

創(chuàng)建工廠類(lèi),創(chuàng)建靜態(tài)方法來(lái)返回具體產(chǎn)品類(lèi)

外部類(lèi)調(diào)用工廠類(lèi)中的靜態(tài)方法獲得相應(yīng)的產(chǎn)品對(duì)象

// 抽象產(chǎn)品類(lèi),方便產(chǎn)生多種產(chǎn)品類(lèi)型
abstract class Product {
    protected abstract void show();
}
// 具體產(chǎn)品類(lèi)1
public class Product1 extends Product {
    @Override public void show() {
        System.out.println("Product1");
    }
}

// 具體產(chǎn)品類(lèi)2
public class Product2 extends Product {
    @Override public void show() {
        System.out.println("Product2");
    }
}

// 具體產(chǎn)品類(lèi)3
public class Product3 extends Product {
    @Override public void show() {
        System.out.println("Product3");
    }
}
// 工廠類(lèi),根據(jù)傳入?yún)?shù)類(lèi)型返回相應(yīng)的對(duì)象
public class ProductFatory {
    public static Product getProduct(String s){
        switch (s){
            default:return null;
            case "a" :return new Product1();
            case "b" :return new Product2();
            case "c" :return new Product3();
        }
    }
}
// 測(cè)試類(lèi)
public class TestFactory {
    public static void main(String[] args) {
        ProductFatory.getProduct("a").show();
        ProductFatory.getProduct("b").show();
        ProductFatory.getProduct("c").show();
    }
}
/* output 
Product1
Product2
Product3
*/

Pros

創(chuàng)建實(shí)例和使用實(shí)例解耦

Cons

工廠類(lèi)出現(xiàn)錯(cuò)誤時(shí),整個(gè)系統(tǒng)受到影響

違背“開(kāi)放-關(guān)閉原則”,新增類(lèi)需要修改工廠邏輯,工廠類(lèi)將冗雜

4.5 方法參數(shù)

規(guī)則:java按值調(diào)用,方法得到的是所有參數(shù)值的拷貝

無(wú)法修改基本數(shù)據(jù)類(lèi)型的值。

// 修改值的方法
public class Method {
    public void changeNum(int num){
        num = num * 3;
    }
}

// 測(cè)試類(lèi)
public class TestMethodParam {
    public static void main(String[] args) {
        int n = 5;
        Method method = new Method();
        System.out.println(n);
        method.changeNum(n);
        System.out.println(n);
    }
}
/* output
5
5
*/

/* conclusion
因?yàn)閚um被初始化為n值的拷貝,因此修改num不會(huì)影響n(yōu)的值
*/

支持修改對(duì)象參數(shù)的狀態(tài)

原因:形參是對(duì) 對(duì)象引用的拷貝,因此指向的是對(duì)象,當(dāng)發(fā)生修改時(shí),會(huì)修改對(duì)象中的值

不支持讓對(duì)象參數(shù)引用一個(gè)新的對(duì)象

原因:形參是對(duì)象引用的拷貝,修改引用無(wú)法對(duì)原引用造成影響

原理圖:

4.6 對(duì)象構(gòu)造 4.6.1 重載 1.方法的簽名

格式:方法名以及參數(shù)類(lèi)型

indexOf(int)

4.6.6 調(diào)用另一個(gè)構(gòu)造器

格式:在類(lèi)中的構(gòu)造器中使用this關(guān)鍵字調(diào)用另一個(gè)構(gòu)造器

public class TestCons {
    private int age;
    private String name;

    private TestCons(int aAge) {
        this.age = aAge;
    }

    private TestCons(int aAge , String aName) {
        this(5);
        this.name = aName;
    }

    public static void main(String[] args) {
        TestCons testCons = new TestCons(4,"Toyz");
        System.out.println(testCons.age);
        System.out.println(testCons.name);
    }
}

4.6.7 初始化數(shù)據(jù)的方法

方法

在構(gòu)造器中設(shè)置值

private TestCons(int aAge) {
        this.age = aAge;
    }

在聲明中賦值

private int age = 5;

在初始化塊中賦值(不常見(jiàn),通??梢栽跇?gòu)造器中實(shí)現(xiàn))

{
   int age = 5;
}

執(zhí)行順序

所有數(shù)據(jù)域初始化為默認(rèn)值

根據(jù)在類(lèi)中的聲明順序,執(zhí)行初始化語(yǔ)句(上述方法2)和初始化域(上述方法3)

執(zhí)行構(gòu)造器(上述方法1)

4.10 類(lèi)設(shè)計(jì)技巧

一定要保證數(shù)據(jù)私有性

一定要對(duì)數(shù)據(jù)初始化

不要在類(lèi)中使用過(guò)多的基本類(lèi)型(使用其他類(lèi)來(lái)代替)

不是所有域都需要獨(dú)立的域訪(fǎng)問(wèn)和修改器

對(duì)職責(zé)過(guò)多的類(lèi)進(jìn)行分解(不然會(huì)導(dǎo)致耦合過(guò)高)

類(lèi)名和方法名能夠體現(xiàn)職責(zé)

優(yōu)先使用不可變的類(lèi)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/75777.html

相關(guān)文章

  • Java核心技術(shù)筆記 對(duì)象與類(lèi)

    摘要:核心技術(shù)卷第章對(duì)象與類(lèi)面向?qū)ο蟪绦蛟O(shè)計(jì)創(chuàng)建標(biāo)準(zhǔn)類(lèi)庫(kù)中的類(lèi)對(duì)象如何編寫(xiě)自己的類(lèi)傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)首先確定如何操作數(shù)據(jù),再?zèng)Q定如何組織數(shù)據(jù)。當(dāng)使用構(gòu)造器時(shí),無(wú)法改變所構(gòu)造的對(duì)象類(lèi)型。 《Java核心技術(shù) 卷Ⅰ》 第4章 對(duì)象與類(lèi) 面向?qū)ο蟪绦蛟O(shè)計(jì) 創(chuàng)建標(biāo)準(zhǔn)Java類(lèi)庫(kù)中的類(lèi)對(duì)象 如何編寫(xiě)自己的類(lèi) OOP 傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì):首先確定如何操作數(shù)據(jù),再?zèng)Q定如何組織數(shù)據(jù)。 面向?qū)ο蟪绦蛟O(shè)...

    imtianx 評(píng)論0 收藏0
  • Java三種代理模式:靜態(tài)代理、動(dòng)態(tài)代理和cglib代理

    摘要:動(dòng)態(tài)代理又被稱(chēng)為代理或接口代理。靜態(tài)代理在編譯時(shí)產(chǎn)生字節(jié)碼文件,可以直接使用,效率高。代理無(wú)需實(shí)現(xiàn)接口,通過(guò)生成類(lèi)字節(jié)碼實(shí)現(xiàn)代理,比反射稍快,不存在性能問(wèn)題,但會(huì)繼承目標(biāo)對(duì)象,需要重寫(xiě)方法,所以目標(biāo)對(duì)象不能為類(lèi)。 一、代理模式介紹 代理模式是一種設(shè)計(jì)模式,提供了對(duì)目標(biāo)對(duì)象額外的訪(fǎng)問(wèn)方式,即通過(guò)代理對(duì)象訪(fǎng)問(wèn)目標(biāo)對(duì)象,這樣可以在不修改原目標(biāo)對(duì)象的前提下,提供額外的功能操作,擴(kuò)展目標(biāo)對(duì)象的功...

    Kaede 評(píng)論0 收藏0
  • java學(xué)習(xí)(三) —— 面對(duì)對(duì)象

    摘要:前言是面對(duì)對(duì)象的語(yǔ)言,因此有必要單獨(dú)紀(jì)錄下對(duì)象的各種定義和理解。面對(duì)對(duì)象基本概述概述是基于面向過(guò)程的變成思想,是對(duì)面向過(guò)程的一種封裝。面對(duì)對(duì)象開(kāi)發(fā)就是不斷的創(chuàng)建對(duì)象,使用對(duì)象,指揮對(duì)象做事情。面對(duì)對(duì)象設(shè)計(jì)其實(shí)就是在管理和維護(hù)對(duì)象之間的關(guān)系。 前言 java是面對(duì)對(duì)象的語(yǔ)言,因此有必要單獨(dú)紀(jì)錄下對(duì)象的各種定義和理解。 面對(duì)對(duì)象,主要包括:面向?qū)ο笏枷?,?lèi)與對(duì)象及其使用,對(duì)象的內(nèi)存圖,成...

    褰辯話(huà) 評(píng)論0 收藏0
  • 第3章:抽象數(shù)據(jù)類(lèi)型(ADT)和面向對(duì)象編程(OOP) 3.4面向對(duì)象編程(OOP)

    摘要:抽象數(shù)據(jù)類(lèi)型的多個(gè)不同表示可以共存于同一個(gè)程序中,作為實(shí)現(xiàn)接口的不同類(lèi)。封裝和信息隱藏信息隱藏將精心設(shè)計(jì)的模塊與不好的模塊區(qū)分開(kāi)來(lái)的唯一最重要的因素是其隱藏內(nèi)部數(shù)據(jù)和其他模塊的其他實(shí)施細(xì)節(jié)的程度。 大綱 面向?qū)ο蟮臉?biāo)準(zhǔn)基本概念:對(duì)象,類(lèi),屬性,方法和接口OOP的獨(dú)特功能 封裝和信息隱藏 繼承和重寫(xiě) 多態(tài)性,子類(lèi)型和重載 靜態(tài)與動(dòng)態(tài)分派 Java中一些重要的Object方法設(shè)計(jì)好的類(lèi)面向...

    Heier 評(píng)論0 收藏0
  • 設(shè)計(jì)模式之軟件設(shè)計(jì)七大原則

    摘要:引申意義子類(lèi)可以擴(kuò)展父類(lèi)的功能,但不能改變父類(lèi)原有的功能。含義當(dāng)子類(lèi)的方法實(shí)現(xiàn)父類(lèi)的方法時(shí)重寫(xiě)重載或?qū)崿F(xiàn)抽象方法,方法的后置條件即方法的輸出返回值要比父類(lèi)更嚴(yán)格或相等。優(yōu)點(diǎn)約束繼承泛濫,開(kāi)閉原則的一種體現(xiàn)。降低需求變更時(shí)引入的風(fēng)險(xiǎn)。 0x01.開(kāi)閉原則 定義:一個(gè)軟件實(shí)體如類(lèi),模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉 要點(diǎn): 當(dāng)變更發(fā)生時(shí),不要直接修改類(lèi),而是通過(guò)繼承擴(kuò)展的方式完成變...

    ixlei 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<