2017 - 10 -14 java基礎

1 java程序爲了提高程序的效率,就對數據進行了不同的空間分配。
  具體劃分爲五個內存空間
  棧:存放的是局部變量
  堆:存放的是所有new出來的東西
  方法區:(類的方法,靜態等)
  本地方法區:(和系統相關)
  寄存器:(CPU使用)

  局部變量:在方法定義中或者方法聲明上的變量都稱爲局部變量

  int[] arr = new int[3]
  System.out.println(arr);//地址值
  System.out.println(arr[0]);// 0
  System.out.println(arr[1]);// 0
  System.out.println(arr[2]);// 0

     棧                           堆
                               new int[3]
 int[] arr  <-------  0x0001(地址)
                                  0  0
                                  1  0
                                  2  0 

堆內存的特點:
A:每一個new出來的東西都有地址值
B:每個變量都有默認值
     byte,short,int,long 0
     float,double  0.0
     char '\u00000'
     boolean false
     引用類型 null

C:使用完畢就變成了垃圾,但是並沒有立即回收。會在垃圾回收器空閒的時候回收。

棧內存的數據用完就釋放掉。例如:


 int a = 100;
 System.out.println(a);
}

2  數組動態初始化和靜態初始化
  動態:
  int[] arr = new int[3];
  arr[0] = 1;
  靜態:
  int[] arr = new int[]{1,2,3}
  簡化後:
  int[] arr = {1,2,3}

3 數組操作的兩個常見小問題  
  編譯時不報錯,運行報錯
  int[] arr = {1,2,3};
  System.out.println(arr[3]);
  //(ArrayIndexOutOfBoundsExceptin)數組索引越界異常越界
  //原因:訪問了不存在的索引

  arr = null;
  System.out.println(arr[0]);
  //(NullPointerException)空指針異常
  //原因:數組已經不再指向堆內存了,而你還用數組名去訪問元素
  作用:請自己把所用的場景Exception結尾的問題總結一下,以後遇到就記錄下來。

4 二維數組
  A:
  int[][] arr = new int[3][4];
  arr[1][1] = 100;
  B:
  int[][] arr = new int[2][];
  arr[0] = new int[1];
  arr[1] = new int[2];
  arr[2] = new int[3];
  arr[1][1] = 100;
  C:
  int[][] arr = {{1,2,3},{4,5},{6}};


5 一個對象的內存圖



6 成員變量和局部變量的區別

  A:位置不同
    成員變量:在類中方法外
    局部變量:在方法定義中或者方法聲明上
  B:內存中的位置不同
    成員變量:在堆內存
    局部變量:在棧內存
  C:生命週期不同
   成員變量:隨着對象的創建而存在,隨着對象的消失而消失
   局部變量:隨着方法的調用而存在,隨着方法的調用完畢而消失
  D:初始化時不同
   成員變量:有默認初始化值
   局部變量:沒有默認初始化值,必須定義,賦值,然後才能使用

  注意事項:
       局部變量名稱可以和成員變量名稱一樣,在方法中使用的時候,採用就近原則。

  class Variable{
    //成員變量
    int num = 10;
    //int num; //0

    public void show(){
     //int num2 = 20;//局部變量
     //可能尚未初始化變量num2
     //int num2; 沒有默認值
       int num2 = 20;
       System.out.println(num2);

       int num = 100;  
       System.out.println(num); // 100  採用就近原則
      }
}


7  匿名對象
   就是沒有名字的對象

   匿名對象的應用場景:
   A:調用方法,僅僅只調用一次的時候。
       注意:調用多次的時候,不適合。
       那麼,這種匿名對象調用有什麼好處嗎?
         1.匿名對象調用完畢就是垃圾,可以被垃圾回收器回收。
   B:匿名對象可以作爲實際參數傳遞
   
   //帶名字的對象
   Student s = new Student;
   s.show();
   s.show();

   //匿名對象
   //new Student()
   //匿名對象調用方法
   new Student().show();
   new Student().show();// 這裏其實是重新創建了一個新的對象

   //匿名對象作爲實際參數傳遞
   StudentDemo sd = new StudentDemo();
   //Student ss = new Student();
   //sd.method(ss);//這裏的s是一個實際參數
   //匿名對象
   sd.method(new Student());

   //再來一個
   new StudentDemo().method(new Student());

8 static
  (所以感覺作用兩點,成員變量和成員方法)
  (成員變量  被對象共享)
  (成員方法  即不用建立對象而調用類的方法)
    (可以修飾內部類,但主類不能)
    (靜態方法只能訪問靜態成員)
    (靜態方法不能被重寫,靜態變量是變量不是常量,可以被改變,對所有對象都有影響)
   (目前看到的修飾:變量(成員變量和局部變量)、方法、代碼塊、內部類 )
  針對多個對象有共同的這樣的成員變量,java提供了static 
  static的特點:(它可以修飾成員變量,也可以修飾成員方法)
    A:隨着類的加載而加載
      回想main方法。。。
    B:優先於對象存在
    C:被類的所有對象共享
        舉例:我們班上的學生應該共用一個班級編號
          如果某個成員變量是所有對象共享的沒那麼它就應該定義爲靜態的
    D:可以通過類名調用
         其實它本身也可以通過對象名調用

    靜態修飾的內容一般我們稱其爲:與類相關的,類成員


9 main方法的格式講解
  public static void main(String[] args)

  public:公共的,訪問權限是最大的,由於main方法是被jvm調用,所以權限要夠大
  static:靜態的,不需要創建對象,通過類名就可以,方便jvm的調用
  void:因爲我們曾經說過,方法的返回值是返回給調用者的,而main方法是被jvm調用,返回給jvm沒有意義
  main:是一個常見的方法入口,(我)見過的語言都是以main爲入口
  String[] args:這是一個字符串數組,值去哪裏了?
        這個東西到底有什麼用?怎麼給值?
          這個東西早起是爲了接受鍵盤錄入的數據的
         java MainDemo hello world
   http://blog.csdn.net/yxmaomao1991/article/details/50507177
發佈了31 篇原創文章 · 獲贊 2 · 訪問量 9205
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章