有關static靜態修飾符的學習心得

來源:互聯網
上載者:User

標籤:

  初學java,面對著這個static修飾符,愣是琢磨了兩天時間,還在今天琢磨透了,現在將悟到的東西記錄下來:
  1、static修飾符表示靜態修飾符,其所修飾的內容(變數、方法、代碼塊暫時學到這三種)統稱為靜態內容(靜態變數、靜態方法、靜態代碼塊)   2、靜態內容是與類相關的內容。解釋:靜態變數在類載入時就會被分配記憶體空間,而且只會被分配一次,也就是說靜態變數對類內部是共用的,大家都可以去調用訪問它,只要在一個調用裡改變了它的值,那麼所有調用內部的值全部都會被改變。靜態方法也是在類載入時就分配了入口地址,而且所有的方法都可以調用它(在不建立對象的前提下)。靜態代碼塊會在類載入時執行一次,且僅僅執行一次。   3、這裡針對靜態內容,介紹一下非靜態內容,作為對比。非靜態變數必須在建立對象之後,才會在記憶體中分配空間,此時才能被調用,非靜態方法會在建立對象之後才能利用對象點取調用(即以“對象名.方法()”調用),非靜態代碼塊則在每次建立對象時執行一次,而且是優先執行。這些非靜態內容都是與對象相關的內容,都需要在擁有對象之後才能使用,這是與靜態內容最基本的區別。   4、現在說說具體的調用細則:所有的靜態方法或變數可以被本類或異類中的靜態或非靜態方法以“類名.變數名”和“類名.方法名()”的格式調用,甚至在本類中調用時,可以省略掉“類名.”,而直接調用,而且堅守【一處改變,處處改變】的原則。   5、所有的非靜態變數或方法都可以被本類或異類中的靜態或非靜態方法以“先建立類的執行個體對象後,用‘對象名.變數名’和‘對象名。方法名()’”的格式調用,甚至在本類中的非靜態方法中可以省略對象執行個體化過程而直接調用(警告:此處的直接調用與省略調用所調用的變數或方法是不同的,他們在記憶體中存放在不同的位置,建立對象的內容在對象地區,而直接調用的話是直接對類的屬性本值進行操作)   下面是實驗代碼,(可以直接複製到你的編輯器中試運行):(代碼中部分注釋為測試內容,可去掉注釋查看是否正確)
 1 /** 2  * 不區分本類還是異類,在靜態成員被調用必須以類名點取調用,非靜態成員必須建立累的執行個體去調用 3  * 區別: 4  * 1、靜態成員的調用: 5  *   在本類(靜態與非靜態方法)中調用可以省略類名點,直接調用(此處無論是哪裡的調用只要改變了屬性的值,那麼所有的調用都會改變,因為他們都指向記憶體中的同一個地址) 6  * 2、非靜態成員的調用: 7  *   在本類的非靜態方法中調用可以省略執行個體對象的建立,直接調用(這樣寫不會報錯,但是與建立對象再用對象命點用所指向的內容不同了,因為他們指向記憶體中的不同地址) 8  */ 9 package com.test;10 11 public class StaticTest{12     int a = 1;13     static int b = 2;14     //非靜態方法15     void testa(){16         System.out.println("一類中的非靜態方法");17 //實驗同一類中非靜態方法調用靜態與非靜態變數(方法的調用與變數一樣)18 19 //調用本類靜態變數(此處省略了類名點取)20 StaticTest.b = 12;21 System.out.println(b);//省略類名點取22 23 //調用本類非靜態變數24 //此處可以以建立執行個體對象的方式調用a變數,但是這樣的話這裡的a就與直接調用a不同了,前者指的是建立對象的屬性a,後者則是類的a屬性25 // StaticTest m = new StaticTest();26 // m.a = 11;27 // a = m.a;28 a = 11;29  System.out.println(a);30 31 //調用異類靜態變數(此處直接調用會報錯)32 // b2 = 14;//報錯33 Qita.b2 = 14;34  System.out.println(Qita.b2);35 36 //調用異類非靜態變數(此處直接調用會報錯)37 // a2 = 13;//報錯38 Qita x = new Qita();39 x.a2 = 13;40  System.out.println(x.a2);41  }42 static void testb(){43 System.out.println("一類中的靜態方法");44 //實驗同一類中非靜態方法調用靜態與非靜態變數(方法的調用與變數一樣)45 46 //調用本類靜態變數47 StaticTest.b = 22;48 System.out.println(b);//此處省略類名點49 50 //調用本類非靜態變數51 StaticTest y = new StaticTest();52 y.a = 21;53  System.out.println(y.a);54 55 //調用異類靜態變數56 Qita.b2 = 24;57  System.out.println(Qita.b2);58 59 //調用異類非靜態變數60 Qita x = new Qita();61 x.a2 = 23;62  System.out.println(x.a2);63  }64 public static void main(String[] args) {65 //靜態方法調用本類中的非靜態方法66 StaticTest z = new StaticTest();67  z.testa();68 69 //靜態方法中調用本類中靜態方法70  testb();71  }72 }73 class Qita{74 int a2 = 3;75 static int b2 = 4;76 void testa2(){77 System.out.println("二類中的非靜態方法");78  }79 static void testb2(){80 System.out.println("二類中的靜態方法");81  }82 }

有關static靜態修飾符的學習心得

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.