1. 程式人生 > >Java散落知識點總結(一)

Java散落知識點總結(一)

1.陣列

1.

<span style="white-space:pre">	</span><span style="font-size:18px;">int[] arr=new int[5];
      System.out.println(arr[5]); 
      //編譯通過,發生執行時異常(陣列越界異常) </span> 

    2.二維陣列:要理解二維陣列的記憶體儲存結構,陣列是引用資料型別,因此是堆中開闢空間

<strong><span style="white-space:pre">	</span><span style="font-size:18px;">int[][] arr=new int[2][3];
      //int[2] 這塊空間儲存的是兩個int[3]的記憶體地址
      //注意!!兩個int[3] 記憶體的地址是不連續的</span></strong>
             注意!!由於記憶體的地址是不連續的,這也就解釋了為什麼

          int[ ][ ] arr=new int[2][ ]; //編譯通過

          int[ ][ ] arr=new int[ ][3]; //編譯不通過

2.靜態程式碼塊

 隨著.class的載入執行,優先main函式的執行,且只執行一次

<strong>	class Testw{
		static int num;
		static {
		System.out.println(num);
			}
		}

	public class Test01 {
			
		static {
		     System.out.println("a");
		}
		public static void main(String[] args) {
	            Test f=null;
		}
	}   
	/*output*/
	        a  只輸出a 
        應為在Test01的main函式中並沒有載入 Testw.class檔案,因此Testw的靜態程式碼塊不會執行</strong>
3.構造程式碼塊

在建構函式之前執行,每新建一個物件就會執行構造程式碼塊

<strong><span style="white-space:pre">	</span>class Test{
		{
			System.out.println("first construct");
		}
		public Test(){
			System.out.println("second construct");			
		}
	}
	/*output*/
	    first construct
	    second construct</strong>

4.物件建立過程

1.首先載入.class檔案建立物件

   2.如果有靜態程式碼塊先執行靜態程式碼塊

   3.堆中開闢記憶體為成員變數賦預設值

   4.堆中開闢記憶體為成員變數賦初始值

   5.執行構造程式碼塊

   6.執行建構函式

   7.物件在堆中的地址傳給棧中的引用

5.super和this的對比

  1.this是指向當前的物件的引用,表示當前物件

    2.super表示超類意思

    3.當成員函式中(非靜態)的區域性變數與成員變數同名時,使用this解決同名問題

          eg: public void setName(String name){

               this.name=name; }

    4.super是為了解決子類覆蓋父類的成員函式或者成員方法,解決被遮蔽的問題使其可見。

    5.在子類建構函式中,首先要呼叫建構函式(super() 呼叫可以省略)但是有一點一定要注意!

當父類的建構函式已經被顯示宣告時候(也就是說預設建構函式已經消失),必須要顯示宣告父類的預設建構函式

否則子類在建構函式時候如果不顯示宣告時,就會報錯。

    6.System.out.println(this);           //輸出的是當前物件的地址

       System.out.println(super);       //編譯報錯不通過