Java面向?qū)ο螅ㄏ拢?創(chuàng)新互聯(lián)

Java面向?qū)ο螅ㄏ拢? 1. static關(guān)鍵字

static可以用來修飾類的內(nèi)部結(jié)構(gòu)(除了構(gòu)造器):屬性、方法、代碼塊、內(nèi)部類

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

屬性

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

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

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

    //聲明public,static的getInstance方法,返回內(nèi)部創(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. 壞處:對象加載時(shí)間過長
    2. 好處:餓漢式是線程安全的
  • 懶漢式:
    1. 好處:延遲對象的創(chuàng)建
    2. 目前的寫法的壞處是線程不安全,到多線程時(shí),可以修改
2.4 單例模式的使用場景

因?yàn)橹簧梢粋€(gè)對象,所以減少了系統(tǒng)的開銷
image.png

3. main方法的理解
  1. main方法是程序的入口
  2. main方法也是一個(gè)普通的靜態(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. 內(nèi)部可以有輸出語句
  2. 隨著類的加載而執(zhí)行,因而只會(huì)執(zhí)行一次
  3. 可以初始化類的靜態(tài)屬性
  4. 如果一個(gè)類中定義了多個(gè)靜態(tài)代碼塊,則先聲明的靜態(tài)代碼塊先執(zhí)行
  5. 而所有的靜態(tài)代碼塊的執(zhí)行都先于非靜態(tài)的代碼塊(因?yàn)殪o態(tài)代碼塊隨著類的加載而執(zhí)行,先于對象的創(chuàng)建)
  6. 靜態(tài)代碼塊只能調(diào)用靜態(tài)的結(jié)構(gòu)
4.2 非靜態(tài)代碼塊
  1. 內(nèi)部可以有輸出語句
  2. 隨著對象的創(chuàng)建而執(zhí)行,每創(chuàng)建一個(gè)對象就會(huì)執(zhí)行一次非靜態(tài)代碼塊
  3. 可以在創(chuàng)建對象的時(shí)候,對屬性進(jìn)行初始化
  4. 多個(gè)非靜態(tài)代碼塊,執(zhí)行順序也是先聲明先執(zhí)行
  5. 非靜態(tài)代碼塊既可以調(diào)用靜態(tài)結(jié)構(gòu)也可以調(diào)用非靜態(tài)結(jié)構(gòu)
5. 對屬性賦值

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

  1. 默認(rèn)初始化
  2. 顯示初始化 代碼塊中初始化
    哪個(gè)先寫,哪個(gè)先賦值
  3. 構(gòu)造器中初始化
  4. 使用對象.屬性賦值
6.final 關(guān)鍵字

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

6.1 final修飾類

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

6.2 final修飾方法

表示此方法不能被重寫

6.3 final修飾變量

final修飾變量,此時(shí)的變量就稱為一個(gè)常量

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

static final修飾屬性:全局常量

7. abstract關(guān)鍵字

abstract 可以用來修飾類和方法

7.1 抽象類

抽象類不能實(shí)例化,只能被其他類繼承

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

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

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

注意點(diǎn)

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

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

image.png

import java.time.format.TextStyle;

import javax.sound.midi.SysexMessage;

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


//一個(gè)計(jì)算代碼運(yùn)行時(shí)間的類模板
abstract class Template{public void spendTime(){long start = System.currentTimeMillis();

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

        System.out.println("代碼運(yùn)行的時(shí)間為"+(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)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享文章:Java面向?qū)ο螅ㄏ拢?創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://bm7419.com/article34/ceocse.html

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

廣告

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

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