天天看點

day08_java面向對象(數組的工具類+單例設計模式+繼承)

01-面向對象(數組工具對象建立)

ArrayTool.java裡面的練習:

下面是一些數組工具的練習

練習的有:

l  擷取整型數組的最大值。

//  擷取整型數組的最大值。

    public int getMax_1(int[] arr)

    {

        int max = arr[0];//初始化數組中的任何一個數

        for (int i = 1; i < arr.length; i++) {

            if (max<arr[i])

            {

                max = arr[i];

            }

        }

        return max;

    }

    // 擷取整型數組的最大值。

    public int getMax_2(int[] arr)

    {

        int max = 0; // 初始化數組中的任何一個角标

        for (int i = 0; i < arr.length; i++) {

            if (arr[max]<arr[i])

            {

                max = i;

            }

        }

        return arr[max];

    }

l  對數組進行選擇排序。

// 選擇排序

    public int[] selectSort(int[] arr)

    {

        for (int i = 0; i < arr.length-1; i++) {

            for (int j = i+1; j < arr.length; j++) {

                if (arr[i]>arr[j])

                {

                    swap(arr,i,j);

                }

            }

        }

        return arr;

    }

l  擷取指定的元素在指定數組中的索引.

public int arrIndex(int[] arr,int key)

    {

        for (int i = 0; i < arr.length; i++) {

            if (arr[i]==key)

            {

                return i;

            }

        }

        return -1;

    }

l  将int數組轉換成字元串。格式是:[e1,e2,...]

public String conString(int[] arr)

    {

        String str = "[";

        for (int i = 0; i < arr.length; i++) {

            if (i != arr.length-1)

            {

                str+=arr[i]+",";

            }else

            {

                str+=+arr[i]+"]";

            }

        }

        return str;

    }

在這個工具類裡面的設計原理也隻要這個方法沒有通路到這個對象裡面的特有資料就應該靜态化

private ArrayTool(){}//該類中的方法都是靜态的,是以該類是不需要的建立對象的。為了保證不讓其他成建立該類對象

                        //可以将構造函數私有化。

數組工具類-文檔注釋

Java中提供了一個工具來提取java文檔中的注釋,但前提是你在java檔案是寫了文檔的注釋才會被提取,這個工具就是javadoc

Javadoc的使用

單例設計模式-概述&展現

有了方法才可控

//餓漢式

class Single//類一加載,對象就已經存在了。

{

    private static Single s = new Single();

    private Single(){}

    public static Single getInstance()

    {

        return s;

    }

}

//懶漢式

class Single2//類加載進來,沒有對象,隻有調用了getInstance方法時,才會建立對象。

            //延遲加載形式。

{

    private static Single2 s = null;

    private Single2(){}

    public static Single2 getInstance()

    {

        if(s==null)

            s = new Single2();

        return s;

    }

}

class  SingleDemo

{

    public static void main(String[] args)

    {

        Single s1 = Single.getInstance();

        Single s2 = Single.getInstance();

        System.out.println(s1==s2);

//      Single ss =Single.s;

//      Test t1 = new Test();

//      Test t2 = new Test();

        Test t1 = Test.getInstance();

        Test t2 = Test.getInstance();

        t1.setNum(10);

        t2.setNum(20);

        System.out.println(t1.getNum());

        System.out.println(t2.getNum());

    }

}

class Test

{

    private int num;

    private static Test t = new Test();

    private Test(){}

    public static TestgetInstance()

    {

        return t;

    }

    public void setNum(int num)

    {

        this.num = num;

    }

    public int getNum()

    {

        return num;

    }

}

單例設計模式-記憶體圖解

day08_java面向對象(數組的工具類+單例設計模式+繼承)

真真在面試的時候懶漢式一般問的比較多,然而也在真真的開發中餓漢式用的比較多為什麼也不用懶漢式,因為在後面的多線程的時候會有問題,這裡面隻作一個了解

day08_java面向對象(數組的工具類+單例設計模式+繼承)
day08_java面向對象(數組的工具類+單例設計模式+繼承)

注意:子類不可以具備父類中私有的内容。

父類怎麼來的?共性不斷向上抽取而來的。

day08_java面向對象(數組的工具類+單例設計模式+繼承)
day08_java面向對象(數組的工具類+單例設計模式+繼承)

08-面向對象(繼承-Java中的單繼承和多重繼承)

現在解釋為什麼java不直接支援多繼承,事例:

class A

{

       voidshow()

       {

              System.out.println("a");

       }

}

class B

{

       voidshow()

       {

              System.out.println("b");

       }

}

class C extends A,B

{

}

newC().show();,當執行這條語句的時候也,C這個對象不知道調用哪一個,會産生不确定性,這就是為什麼java不直接支援多繼承的原因

day08_java面向對象(數組的工具類+單例設計模式+繼承)

因為多繼承容易出現問題。

兩個父類中有相同的方法。子類到底要執行哪一個是不确定的。

是以java不支援多繼承,但将這種機制換了另一個種安全的方式來展現,多實作。

多次繼承出現的繼承體系中,通常看父類中的功能,了解該體系的基本功能,建立子類對象即可使用該體系功能。

面向對象(繼承-子父類中成員變量的特點)

//1,成員變量。

class Fu

{

    private int num = 4;

    public int getNum()

    {

        return num;

    }

}

class Zi extends Fu

{

    private int num = 5;

    void show()

    {

        System.out.println(this.num+"....."+super.getNum());

    }

}

class ExtendsDemo2

{

    public static void main(String[] args)

    {

        Zi z = new Zi();

        z.show();

    }

}

成員變量名字如果相同不存在一種覆寫,因為它們都有自己的所屬

繼承-子父類中成員變量的記憶體圖解)

day08_java面向對象(數組的工具類+單例設計模式+繼承)

繼承-子父類中成員函數特點-覆寫

//成員函數。

class Fu

{

    public static  void show()

    {

        System.out.println("fu show run");

    }

}

class  Zi extends Fu

{

    public static void show()

    {

        System.out.println("Zi show run");

    }

}

class ExtendsDemo3

{

    public static void main(String[] args)

    {

//      Zi z = new Zi();

//      z.show();

        NewPhone p = new NewPhone();

        p.show();

        p.call();

    }

}

繼承-子父類中成員函數特點-覆寫的應用

class ExtendsDemo3

{

    public static void main(String[] args)

    {

//      Zi z = new Zi();

//      z.show();

        NewPhone p = new NewPhone();

        p.show();

        p.call();

    }

}

class honeP

{

    void call()

    {}

    void show()

    {      

        System.out.println("number");

    }

}

class NewPhone extends Phone

{

    void show()

    {

        System.out.println("name");

        System.out.println("pic");

        super.show();

    }

}