Java 面向對象之靜態

靜態

一、沒有靜態:若是某個類型的全部對象,都具備一個相同的屬性值,那麼這個屬性值就沒有必要在全部對象中,都存儲一份。還有壞處:浪費內存空間;維護難度大,一旦須要修改,就得修改全部的對象。java

二、有靜態的狀態:若是某個類型的全部對象,都具備一個相同的屬性值,那麼就在這個屬性的定義上,加一個static靜態關鍵字。讓該變量存儲在方法區字節碼的靜態區中,避免了全部對象都存儲相同數據的問題,節省了內存空間,未來維護容易(只須要修改一次)。程序員

靜態變量

一、用static關鍵字修飾的變量 不會隨着對象的變化而變化api

二、加載時機:隨着類的加載而加載,加載進方法區的靜態區數組

三、靜態變量在對象以前就存在,被該類的全部對象所共享jvm

四、可使用 類名.變量名 直接調用,也可以使用對象來調用ide

靜態方法

一、用static關鍵字修飾的方法工具

二、靜態方法不能使用非靜態變量測試

  緣由:靜態方法在一開始就被加載進靜態區,能夠在沒建立對象時使用,而非靜態變量只有在對象建立以後this

    才能使用,若是靜態方法能夠訪問非靜態的變量,就至關於在對象建立以前就訪問了對象裏面的數據spa

三、靜態方法不能訪問非靜態方法

  緣由:非靜態方法能夠訪問非靜態變量,若是靜態方法能夠訪問非靜態方法,就至關於訪問了非靜態變量,

    與第二點矛盾。

四、靜態方法中不能存在this關鍵字

  緣由:靜態方法在對象建立以前就存在了,而this指代當前對象,若是使用this指針,就至關於在

    對象建立以前訪問對象  

 5.總結 靜態不能夠訪問非靜態,非靜態能夠訪問靜態。

靜態變量和非靜態變量的區別

一、概念上 ,所屬不一樣

  非靜態變量屬於對象,靜態變量屬於類

二、內存空間不一樣,存儲位置不一樣

  非靜態屬於對象,因此存儲在堆內存中

  靜態變量屬於類,存儲在方法區的靜態區中

三、生命週期不一樣

  非靜態變量隨着對象的建立而存在,消失而消失

  靜態變量隨着類的加載而存在,類的消失而消失

四、訪問方式不一樣

  非靜態變量 對象名.變量名;

  靜態變量 類名.靜態對象名;   對象名.靜態變量名;

補充內容:主方法解釋

public static void main(String[] args)

關鍵字public 表示公共狀態,權限修飾符,全部狀況均可以訪問

  主方法是全部虛擬機都直接調用的,語言之間相互調用,須要使用最高權限。

static 靜態 在不建立對象的狀況下也能夠訪問

  主方法是jvm虛擬機直接調用的,測試類中,不須要定義成員變量,也不須要有對象存儲數據,

  能夠直接調用主方法,主方法沒有必要聲明爲非靜態;jvmC語言寫的,是一個面向過程的語言,不能建立對象。

void 返回值爲空

main 程序的惟一入口

Sring[] args 形式參數 字符串類型的數組

補充內容:工具類

一、工具類:在一個類中,沒有維護什麼數據,沒有任何的成員變量,至關因而一個工具。

  類中就都是一些靜態方法,快速的解決一些常見的問題。

二、名稱:ArrayTool

三、做用:能夠提供操做數據的各類方法

四、功能:

  數組的遍歷

  獲取數組的最大值

  獲取數組的最小值

  數組元素的交換

  數組元素反轉

五、方法都是靜態的,不須要建立對象;建立對象會浪費系統資源。但願控制不讓建立對象。

  方式:使用構造方法私有化

public class Test2 {
    private Test2(){}
    /**數組的遍歷
    @param arr 要遍歷的數組
    */
    public static void printArr(int[] arr) {
        for(int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
    /**
    數組獲取最大值
    @param arr 要獲取最大值的數組
    @return 獲取到的最大值
    */
    public static int getMax(int[] arr) {
        int max = arr[0];
        for(int i = 1; i < arr.length; i++) {
            if(arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }
    /**
    獲取數組最小值
    @param arr 要獲取最小值的數組
    @return 獲取到的最小值
    */
    public static int getMin(int[] arr) {
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(arr[i] < min) {
                min  = arr[i];
            }
        }
        return min;
    }
    /**
    交換數組中的兩個元素
    @param arr 要交換元素的數組
    @param a 要交換的第一個元素的索引
    @param b 要交換的第二個元素的索引
    */
    public static void swap(int[] arr, int a, int b) {
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
    /**
    數組反轉
    @param arr 要反轉的數組
    */
    public static void reverse(int[] arr) {
        for(int i = 0, j = arr.length - 1; i < j; i++, j--) {
            swap(arr, i, j);
        }
    }
    /**
     冒泡排序
     * @param arr 要排序的數組
     */
    public static void paiXu(int[] arr) {
        for(int i=0;i<arr.length;i++) {
            for(int j=0;j<arr.length-1-i;j++) {
                if(arr[i]<arr[j]) {
                    swap(arr, i, j);
                }
            }
        }
    }
}
工具類模擬

六、幫助文檔的製做

一、工具類準備好以後,編譯成.class的字節碼文件,外界就沒法看懂,因此須要編寫工具類的程序員,準備一份工具類的幫助文檔。

二、文檔註釋:用於給代碼生成幫助文檔的註釋

  格式:

/**

      文檔註釋

*/

  特色:

    不能嵌套

三、幫助文檔註解:未來能夠被文檔生成工具解析出來的格式,能夠解析出來其中的數據

  做者:@author lc

  版本:@version v1.0

  從哪一個版本該是:@since

  參數:@param 參數名稱 參數名稱的解釋

  返回值:@return 返回內容的解釋

四、生成幫助文檔:

  使用jdk中的bin目錄中的javadoc這個工具,就能夠生成幫助文檔

  Javadoc -d ArrayToolDoc -author -version 源代碼文件

五、幫助文檔的使用

  一、雖然之後不去製做幫助文檔,可是對於已經存在的工具類,使用頻繁,頻繁使用工具類的幫助文檔。

  二、在線幫助文檔:

    http://tool.oschina.net/apidocs

  三、離線的幫助文檔:

      1、打開文檔

      2、點擊顯示

      3、點擊索引

      4、搜索須要的類型

相關文章
相關標籤/搜索