一、沒有靜態:若是某個類型的全部對象,都具備一個相同的屬性值,那麼這個屬性值就沒有必要在全部對象中,都存儲一份。還有壞處:浪費內存空間;維護難度大,一旦須要修改,就得修改全部的對象。java
二、有靜態的狀態:若是某個類型的全部對象,都具備一個相同的屬性值,那麼就在這個屬性的定義上,加一個static靜態關鍵字。讓該變量存儲在方法區字節碼的靜態區中,避免了全部對象都存儲相同數據的問題,節省了內存空間,未來維護容易(只須要修改一次)。程序員
一、用static關鍵字修飾的變量 不會隨着對象的變化而變化api
二、加載時機:隨着類的加載而加載,加載進方法區的靜態區數組
三、靜態變量在對象以前就存在,被該類的全部對象所共享jvm
四、可使用 類名.變量名 直接調用,也可以使用對象來調用ide
一、用static關鍵字修飾的方法工具
二、靜態方法不能使用非靜態變量測試
緣由:靜態方法在一開始就被加載進靜態區,能夠在沒建立對象時使用,而非靜態變量只有在對象建立以後this
才能使用,若是靜態方法能夠訪問非靜態的變量,就至關於在對象建立以前就訪問了對象裏面的數據spa
三、靜態方法不能訪問非靜態方法
緣由:非靜態方法能夠訪問非靜態變量,若是靜態方法能夠訪問非靜態方法,就至關於訪問了非靜態變量,
與第二點矛盾。
四、靜態方法中不能存在this關鍵字
緣由:靜態方法在對象建立以前就存在了,而this指代當前對象,若是使用this指針,就至關於在
對象建立以前訪問對象
5.總結 靜態不能夠訪問非靜態,非靜態能夠訪問靜態。
一、概念上 ,所屬不一樣
非靜態變量屬於對象,靜態變量屬於類
二、內存空間不一樣,存儲位置不一樣
非靜態屬於對象,因此存儲在堆內存中
靜態變量屬於類,存儲在方法區的靜態區中
三、生命週期不一樣
非靜態變量隨着對象的建立而存在,消失而消失
靜態變量隨着類的加載而存在,類的消失而消失
四、訪問方式不一樣
非靜態變量 對象名.變量名;
靜態變量 類名.靜態對象名; 對象名.靜態變量名;
public static void main(String[] args)
關鍵字public 表示公共狀態,權限修飾符,全部狀況均可以訪問
主方法是全部虛擬機都直接調用的,語言之間相互調用,須要使用最高權限。
static 靜態 在不建立對象的狀況下也能夠訪問
主方法是jvm虛擬機直接調用的,測試類中,不須要定義成員變量,也不須要有對象存儲數據,
能夠直接調用主方法,主方法沒有必要聲明爲非靜態;jvm是C語言寫的,是一個面向過程的語言,不能建立對象。
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、搜索須要的類型