Java基礎知識學習——面向對象設計模式、抽象方法、靜態方法及接口

一.知識點彙總

設計模式:
1.單例(singleleton)設計模式 餓漢式 vs懶漢式
單例設計模式:就是採取一定的方法保證在整個的軟件系統中,對於某個類只能存在一個對象實例。
創建單例設計模式:①私有化類的構造器②內部創建類的對象(此對象要求聲明爲靜態的)③提供公共的靜態的方法返回類的對象
代碼塊:總結由父及子,靜態先行
屬性可以賦值的位置:①默認初始化②顯示初始化/在代碼塊中賦值
③構造器中初始化④有了對象以後可以通過“對象.屬性”或者“對象.方法”的方式進行賦值 執行先後順序爲:①-》②-》③-》④

public class ModelTest {
    public static void main(String[] args) {
        //實例化測試
        Bank bank1 = Bank.getInstance();
        Bank bank2 = Bank.getInstance();
        System.out.println(bank1 == bank2);
    }
}
//餓漢式
class Bank {
    //私有化構造器
    private Bank() {
    }
    //內部創建類的對象
    private static Bank instance = new Bank();
    //提供公共的靜態方法返回類的對象
    public static Bank getInstance() {
        return instance;
    }
}
//懶漢式
class Order {
    //私有化構造器
    private Order() {
    }
    //聲明當前類的對象沒有初始化
    private static Order stance = null;

    public static Order getStance() {
        if (stance == null) {
            stance = new Order();
        }
        return stance;
    }
}

二.知識點彙總

一.static關鍵字的使用
靜態的,可以用來修飾:屬性、方法、代碼塊、內部類
1利用static修飾的屬性:靜態變量
棧:存放局部變量;堆:new出來的結構:對象數組;方法區:類的加載信息、靜態域、常量池
2.使用static修飾方法靜態方法 隨着類的加載而加載通過“類.靜態方法”來調用,靜態方法中只能調用靜態的方法 或屬性,非靜態方法中既可以調用非靜態的方法和屬性也可以調用靜態的屬性方法,在靜態方法內不能使用this和super。

public class StaticTest {
    public static void main(String[] args) {
        StaticTest staticTest=new StaticTest();
        staticTest.method();
    }
    //若無static修飾則不能直接在main方法中調用
    public static void method(){
        System.out.println("此方法是靜態方法");
    }
}
class TestStatic{
    //修飾屬性
    public static int num;
    //修飾方法
    public static void method1(){
        System.out.println("修飾方法示例");
    }
    //修飾代碼塊
    static {
         String ss="代碼塊";
    }
}

二.abstract關鍵字abstract抽象的
1.abstract可以用來修飾的結構:類、方法
2.abstract修飾類:抽象類,此類不能實例化
抽象類中一定有構造器子類實例化時調用(涉及:子類對象實例化的全過程),開發中都會提供抽象類的子類讓子類對象實例化,完成相關的操作.
3.abstract修飾方法:抽象方法
抽象方法只有方法的聲明,沒有方法體public abstract void eat();
包含抽象方法的類,一定是一個抽象類,反之抽象類中不一定有抽象方法
若子類重寫了父類中的所有抽象方法,子類方可實例化.
abstract使用上的注意點:不能用來修飾:屬性、構造器等結構;不能用來修飾私有方法、靜態方法、final的方法、final的類.
代碼示例:

public class AbstractTest {
    public static void main(String[] args) {
        instance ins=new instance();
        ins.method();
    }

}
//定義抽象類
abstract class TestAbstract{
    private int num;
    //定義抽象方法
    public abstract void method();
}
//繼承抽象類
class instance extends TestAbstract{
    //實現父類中的抽象方法
    @Override
    public void method() {
        System.out.println("抽象方法的實現");
    }
}

三.interface接口
接口的使用:1.接口使用interface來定義.
2.java中接口和類是並列結構.
3.如何定義接口,定義接口中的成員,jdk7及以前:只能定義全局常量和抽象方法.
全局常量: public static final 抽象方法:public abstract.
jdk8還可以定義靜態方法,默認方法.
知識點一:接口中定義的靜態方法只能通過接口來調用.
知識點二:通過實現類的對象,可以調用接口中的默認方法.
4.接口中不能定義構造器意味着接口不可以實例化.
5.java開發中接口通過讓類實現(implements)的方式來使用,如果實現類覆蓋了接口中所有的抽象方法則此實現類就可以實例化.
6.java可以實現多個接口,彌補了Java單繼承性的侷限,格式:class AA extends BB implements CC,DD.
7.接口與接口之間可以繼承而且可以多繼承,接口的具體實現體現了多態性.

public class InterfaceTest {
    public static void main(String[] args) {
        instant ins=new instant();
        ins.method();
    }
}
//定義接口
interface TestInterface{
    public static void compare() {
        System.out.println("compare");
    }
    public default void method() {
        System.out.println("默認方法");
    }
    default void method1() {
        System.out.println("默認方法");
    }
}
//實現接口
class instant implements TestInterface{
    //重寫接口中的方法
    public void method(){
        System.out.println("這是重寫了接口中的method方法");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章