動力節點學習筆記java
- /*
- static修飾的方法叫作靜態方法
- 通常狀況下工具類中的方法大部分都是靜態方法。
- 靜態方法不用建立對象也能直接訪問該方法。
- */
- public class StaticTest03{
- //成員方法
- //成員方法必須使用「引用.」調用
- public void m1(){
- }
- //靜態方法
- //可使用「類名.」方式調用.也能夠用「引用.」,即便用的是「引用.」,底層仍是用的「類名.」
- //靜態方法中不能直接訪問非靜態數據.
- //靜態方法中不能使用this
- public static void m2(){
- System.out.println("m2....");
- }
- //入口
- public static void main(String[] args){
- StaticTest03 st = new StaticTest03();
- st.m1();
- m2();
- //靜態的方法按照正規的方式訪問:「類名.」
- //靜態的方法也能用「引用.」訪問
- st.m2(); //編譯階段檢查出st是StaticTest03類型,編譯經過,運行的時候,仍然使用 "StaticTest03."的方式訪問。
- //該方法執行不須要對象。
- //空的引用去訪問成員的時候會出現空指針異常。
- //m2方法不是「成員」而是靜態的。
- //因此即便引用是空的,也不會報空指針異常。
- StaticTest03 s = null;
- s.m2();
- }
- }
- /*
- static關鍵字:
- 1.static修飾的變量叫作「靜態變量」.
- 2.static修飾的方法叫作「靜態方法」.
- 3.static還能夠定義靜態語句塊.
- 如下例子演示:static定義靜態語句塊
- static定義的靜態語句塊在類加載階段執行,而且只執行一次,而且是自上而下的順序執行。
- */
- public class StaticTest01{
- //靜態語句塊
- static{
- System.out.println("1");
- }
- static{
- System.out.println("2");
- }
- static{
- System.out.println("3");
- }
- static{
- System.out.println("4");
- }
- //入口
- public static void main(String[] args){
- System.out.println("main execute! 1");
- System.out.println("main execute! 2");
- }
- }
- /*
- 關於實例語句塊
- 每一次調用構造方法以前會執行一次。
- 實例語句塊執行順序也是自上而下。
- */
- public class StaticTest02{
- //靜態語句塊
- static{
- System.out.println("A");
- }
- //實例語句塊
- {
- System.out.println("1");
- }
- {
- System.out.println("2");
- }
- {
- System.out.println("3");
- }
- //構造方法
- StaticTest02(){
- System.out.println("StaticTest02無參數的構造執行!");
- }
- //入口
- public static void main(String[] args){
- //調用構造方法
- new StaticTest02();
- new StaticTest02();
- new StaticTest02();
- }
- }
- /*
- static修飾的變量叫作「靜態變量」
- 變量分類:
- 1.局部變量
- 2.成員變量(實例變量,非靜態變量)
- 3.靜態變量(方法區)
- 何時變量聲明成靜態變量?
- 若是這個屬性全部的對象都有,而且這個屬性的值是相同的,則該屬性聲明成
- 靜態的屬性。
- 成員變量:建立java對象的時候初始化。
- 靜態變量:在類加載階段賦值,而且只賦值一次。
- */
- public class StaticTest04{
- public static void main(String[] args){
- Animal a1 = new Animal("AAA",10);
- Animal a2 = new Animal("BBB",11);
- //如何訪問(類名.)
- System.out.println(Animal.type);
- //也可使用 引用.
- System.out.println(a1.type);
- Animal a3 = null;
- System.out.println(a3.type); //靜態變量底層訪問的時候必定使用的 類名. 和對象無關,不會出現空指針異常。
- }
- }
- //抽象現實世界中的「陸生」動物
- class Animal{
- //Field
- //成員變量(一個對象一份.)
- //成員變量在建立對象的時候初始化,而且存儲在堆中的每個對象中。
- String name;
- int age;
- //靜態變量,被存儲在方法區.
- //全部的java對象共享這一份。
- //因此靜態變量是類級別的,使用「類名.」的方式訪問.
- static String type = "陸生";
- //Constructor
- Animal(String name,int age){
- this.name = name;
- this.age = age;
- }
- }
- /*
- 關於代碼的順序
- */
- public class StaticTest05{
- //編譯經過
- static int i = 100;
- static{
- System.out.println(i);
- }
- //非法向前引用
- /*
- static{
- System.out.println(i);
- }
- static int i = 100;
- */
- }
- /*
- 類{
- //能夠經過「類名.」,也能夠經過「引用.」,即便使用「引用.」底層也是「類名.」
- //1.靜態變量
- //2.靜態方法
- //必須對象存在才能夠訪問,採用「引用.」
- //3.成員變量
- //4.成員方法
- //建立對象,給成員變量賦值
- //5.構造方法
- //類加載時只執行一次。
- //6.靜態語句塊
- //構造方法沒調用以前執行一次。
- //7.實例語句塊
- //用在成員方法和構造方法中。
- //8.this
- }
- 空指針異常:空引用訪問成員
- */