Java面向對象(下)-創(chuàng)新互聯(lián)

Java面向對象(下) 1. static關鍵字

static可以用來修飾類的內部結構(除了構造器):屬性、方法、代碼塊、內部類

創(chuàng)新互聯(lián)長期為1000+客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為勉縣企業(yè)提供專業(yè)的成都網(wǎng)站建設、網(wǎng)站制作,勉縣網(wǎng)站改版等技術服務。擁有10多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。1.1 靜態(tài)屬性
  1. 用static修飾的屬性為靜態(tài)屬性(類變量),非靜態(tài)變量(或稱實例變量)
  • 實例變量:每個對象都有屬于自己的一套非靜態(tài)屬性,互不影響
  • 類變量:所有對象共用的。當通過一個對象修改靜態(tài)變量,會導致其他變量調用此靜態(tài)變量時,得到的是修改過的數(shù)值。
  1. 靜態(tài)變量隨著類的加載而加載,早于對象的創(chuàng)建。
    而實例變量是在對象創(chuàng)建后才加載的
    所以可以通過 “類.靜態(tài)變量” 的方式進行調用
  2. 靜態(tài)變量存儲在方法區(qū)的靜態(tài)域中
  3. 靜態(tài)屬性舉例:System.out , Math.PI
class Chinese{String name;
    int age;
    static nation;
}
class Test{public static void main(String[] args){//不用創(chuàng)建對象,就可以調用靜態(tài)變量
        //因為靜態(tài)變量隨著類的加載而加載
        Chinese.nation = "CHINA";
    }
}
1.2 靜態(tài)方法
  • 隨著類的加載而加載,可以通過 類.方法 來調用方法
  • 靜態(tài)方法中只能調用靜態(tài)的方法、靜態(tài)的屬性(由生命周期決定)
  • 非靜態(tài)方法既可以調用靜態(tài)的,也可以調用非靜態(tài)的
  • 在靜態(tài)的方法內,不能使用this,super關鍵字
1.3 什么時候聲明為static

屬性

  1. 該屬性是被多個對象共用的,不會隨著對象的不同而不同
  2. 類中的常量也常被修飾為static,如Math.PI
    方法
  3. 操作靜態(tài)屬性的方法,通常為static
  4. 工具類中的方法,比如Math類、Arrays類、Collections類
2.單例設計模式 2.1 什么是設計模式
  • 設計模式是在大量的實踐中總結和理論化之后優(yōu)選的代碼結構、編程風格以及解決問題的思考方式。類似于棋譜。
  • 設計模式是獨立于語言的(和數(shù)據(jù)結構類似),對Java、Python等編程設計都適用
2.2 單例設計模式
  • 單例設計模式的類只能由一個對象
    實現(xiàn)方式
  1. 將構造器設置為private的(這樣類的外部就不能創(chuàng)建對象了)
  2. 在類的內部創(chuàng)建靜態(tài)的類對象instance
  3. 聲明public的靜態(tài)方法getInstance(),返回類內部創(chuàng)建的對象
2.3 餓漢式和懶漢式
//單例設計模式
//餓漢式
public class SingletonTest1 {public static void main(String[] args) {Bank b1 = Bank.getInstance();
        Bank b2 = Bank.getInstance();
        //地址值相同,說明這個類只有一個對象
        System.out.println(b1 == b2);
    }
}

class Bank {//私有化類的構造器
    private Bank() {}

    //內部創(chuàng)建類的對象
    private static Bank instance = new Bank();

    //聲明public,static的getInstance方法,返回內部創(chuàng)建的類
    public static Bank getInstance() {return instance;
    }
}
//單例模式
//懶漢式
public class SingletonTest2 {public static void main(String[] args) {Order order1 = Order.getInstance();
        Order order2 = Order.getInstance();
        System.out.println(order1 == order2);
    }
}

class Order{private Order(){}

    private static Order instance = null;

    public static Order getInstance(){if(instance == null){instance = new Order();
        }
        return instance;
    }
}

餓漢式和懶漢式的比較

  • 餓漢式:
    1. 壞處:對象加載時間過長
    2. 好處:餓漢式是線程安全的
  • 懶漢式:
    1. 好處:延遲對象的創(chuàng)建
    2. 目前的寫法的壞處是線程不安全,到多線程時,可以修改
2.4 單例模式的使用場景

因為只生成一個對象,所以減少了系統(tǒng)的開銷
image.png

3. main方法的理解
  1. main方法是程序的入口
  2. main方法也是一個普通的靜態(tài)方法
  3. main()也可以作為我們與控制臺交互的方式
4. 代碼塊(初始化塊) 類的成員之四
  1. 代碼塊又稱初始化塊,作用是初始化類、對象
  2. 代碼塊如果有修飾的話,只能使用static
  3. 根據(jù)是否用static修飾分為:靜態(tài)代碼塊、非靜態(tài)代碼塊
class Person{//非靜態(tài)代碼塊
    {
    }
    //靜態(tài)代碼塊
    static{}
}
4.1 靜態(tài)代碼塊
  1. 內部可以有輸出語句
  2. 隨著類的加載而執(zhí)行,因而只會執(zhí)行一次
  3. 可以初始化類的靜態(tài)屬性
  4. 如果一個類中定義了多個靜態(tài)代碼塊,則先聲明的靜態(tài)代碼塊先執(zhí)行
  5. 而所有的靜態(tài)代碼塊的執(zhí)行都先于非靜態(tài)的代碼塊(因為靜態(tài)代碼塊隨著類的加載而執(zhí)行,先于對象的創(chuàng)建)
  6. 靜態(tài)代碼塊只能調用靜態(tài)的結構
4.2 非靜態(tài)代碼塊
  1. 內部可以有輸出語句
  2. 隨著對象的創(chuàng)建而執(zhí)行,每創(chuàng)建一個對象就會執(zhí)行一次非靜態(tài)代碼塊
  3. 可以在創(chuàng)建對象的時候,對屬性進行初始化
  4. 多個非靜態(tài)代碼塊,執(zhí)行順序也是先聲明先執(zhí)行
  5. 非靜態(tài)代碼塊既可以調用靜態(tài)結構也可以調用非靜態(tài)結構
5. 對屬性賦值

數(shù)字表示賦值的先后順序

  1. 默認初始化
  2. 顯示初始化 代碼塊中初始化
    哪個先寫,哪個先賦值
  3. 構造器中初始化
  4. 使用對象.屬性賦值
6.final 關鍵字

final —— 最終的(不可修改)
final可以用來修飾類、方法、變量

6.1 final修飾類

final類不能有子類,不能被繼承
比如String類、System類、StringBuffer類

6.2 final修飾方法

表示此方法不能被重寫

6.3 final修飾變量

final修飾變量,此時的變量就稱為一個常量

  1. final修飾屬性:可以賦值的位置:顯示初始化、代碼塊初始化、構造器初始化
  2. final修飾局部變量:表示常量,只能調用,不能修改。
    尤其是用final修飾形參時,在方法中只能使用,不能修改
6.4 static final

static final修飾屬性:全局常量

7. abstract關鍵字

abstract 可以用來修飾類和方法

7.1 抽象類

抽象類不能實例化,只能被其他類繼承

  • 抽象類一定有構造器,便于子類實例化時調用
    1. 若子類重寫了所有的抽象方法,則此子類可以實例化
    1. 否則,此子類也是抽象類,需要用abstract來修飾
7.2 抽象方法

抽象方法只有方法的聲明,沒有方法體

  • 包含抽象方法的類一定時抽象類,反之抽象類中不一定有抽象方法
public abstract void eat();

注意點

  1. 什么時候用抽象類呢?
    舉個例子:幾何圖形這個類就是抽象的,計算面積這種方法只能聲明,不能實現(xiàn)。
  2. abstract不能用來修飾私有方法、靜態(tài)方法、final的方法、final的類
7.3 抽象類的匿名子類
  • 一些抽象類因為有抽象方法,需要將抽象方法重寫了才能創(chuàng)建對象
  • 目的:匿名子類只需要使用一次(省事)
//假設Person是一個抽象類
//Person中eat方法是抽象方法

//創(chuàng)建匿名子類,把抽象類的抽象方法給實現(xiàn)了
//使用多態(tài)將子類對象賦給父類的引用
Person p = new Person(){public void eat(){System.out.println("你要好好吃飯啊");
    }
}
7.4 模板方法設計模式

image.png

import java.time.format.TextStyle;

import javax.sound.midi.SysexMessage;

//模板方法設計模式
public class TemplateTest {public static void main(String[] args) {Template test = new SubTemplate();
        test.spendTime();
    }
  
}


//一個計算代碼運行時間的類模板
abstract class Template{public void spendTime(){long start = System.currentTimeMillis();

        code();
        
        long end = System.currentTimeMillis();

        System.out.println("代碼運行的時間為"+(end - start));
    }

    public abstract void code();
}


class SubTemplate extends Template{@Override
    public void code() {// TODO Auto-generated method stub
        for(int i = 2;i<=1000;++i){boolean isPrime = true;
            for(int j = 2;j<=Math.sqrt(i);++j){if((i%j==0)){isPrime = false;
                }
            }
            if(isPrime){System.out.println(i);
            }
        }
        
    }

}

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

分享文章:Java面向對象(下)-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://www.muchs.cn/article34/ceocse.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設、域名注冊虛擬主機、建站公司、關鍵詞優(yōu)化、網(wǎng)站設計

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設