简单了解static
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                简单了解static
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            初學java,面對著這個static修飾符,愣是琢磨了兩天時間,還在今天琢磨透了,現(xiàn)在將悟到的東西記錄下來: 
1、static修飾符表示靜態(tài)修飾符,其所修飾的內(nèi)容(變量、方法、代碼塊暫時學到這三種)統(tǒng)稱為靜態(tài)內(nèi)容(靜態(tài)變量、靜態(tài)方法、靜態(tài)代碼塊) 2、靜態(tài)內(nèi)容是與類相關(guān)的內(nèi)容。解釋:靜態(tài)變量在類加載時就會被分配內(nèi)存空間,而且只會被分配一次,也就是說靜態(tài)變量對類內(nèi)部是共享的,大家都可以去調(diào)用訪問它,只要在一個調(diào)用里改變了它的值,那么所有調(diào)用內(nèi)部的值全部都會被改變。靜態(tài)方法也是在類加載時就分配了入口地址,而且所有的方法都可以調(diào)用它(在不創(chuàng)建對象的前提下)。靜態(tài)代碼塊會在類加載時執(zhí)行一次,且僅僅執(zhí)行一次。 3、這里針對靜態(tài)內(nèi)容,介紹一下非靜態(tài)內(nèi)容,作為對比。非靜態(tài)變量必須在創(chuàng)建對象之后,才會在內(nèi)存中分配空間,此時才能被調(diào)用,非靜態(tài)方法會在創(chuàng)建對象之后才能利用對象點取調(diào)用(即以“對象名.方法()”調(diào)用),非靜態(tài)代碼塊則在每次創(chuàng)建對象時執(zhí)行一次,而且是優(yōu)先執(zhí)行。這些非靜態(tài)內(nèi)容都是與對象相關(guān)的內(nèi)容,都需要在擁有對象之后才能使用,這是與靜態(tài)內(nèi)容最基本的區(qū)別。 4、現(xiàn)在說說具體的調(diào)用細則:所有的靜態(tài)方法或變量可以被本類或異類中的靜態(tài)或非靜態(tài)方法以“類名.變量名”和“類名.方法名()”的格式調(diào)用,甚至在本類中調(diào)用時,可以省略掉“類名.”,而直接調(diào)用,而且堅守【一處改變,處處改變】的原則。 5、所有的非靜態(tài)變量或方法都可以被本類或異類中的靜態(tài)或非靜態(tài)方法以“先創(chuàng)建類的實例對象后,用‘對象名.變量名’和‘對象名。方法名()’”的格式調(diào)用,甚至在本類中的非靜態(tài)方法中可以省略對象實例化過程而直接調(diào)用(警告:此處的直接調(diào)用與省略調(diào)用所調(diào)用的變量或方法是不同的,他們在內(nèi)存中存放在不同的位置,新建對象的內(nèi)容在對象區(qū)域,而直接調(diào)用的話是直接對類的屬性本值進行操作) 下面是試驗代碼,(可以直接復制到你的編輯器中試運行):(代碼中部分注釋為測試內(nèi)容,可去掉注釋查看是否正確) 1 /**2 * 不區(qū)分本類還是異類,在靜態(tài)成員被調(diào)用必須以類名點取調(diào)用,非靜態(tài)成員必須創(chuàng)建累的實例去調(diào)用3 * 區(qū)別:4 * 1、靜態(tài)成員的調(diào)用:5 * 在本類(靜態(tài)與非靜態(tài)方法)中調(diào)用可以省略類名點,直接調(diào)用(此處無論是哪里的調(diào)用只要改變了屬性的值,那么所有的調(diào)用都會改變,因為他們都指向內(nèi)存中的同一個地址)6 * 2、非靜態(tài)成員的調(diào)用:7 * 在本類的非靜態(tài)方法中調(diào)用可以省略實例對象的創(chuàng)建,直接調(diào)用(這樣寫不會報錯,但是與創(chuàng)建對象再用對象命點用所指向的內(nèi)容不同了,因為他們指向內(nèi)存中的不同地址)8 */9 package com.test; 10 11 public class StaticTest{ 12 int a = 1; 13 static int b = 2; 14 //非靜態(tài)方法 15 void testa(){ 16 System.out.println("一類中的非靜態(tài)方法"); 17 //試驗同一類中非靜態(tài)方法調(diào)用靜態(tài)與非靜態(tài)變量(方法的調(diào)用與變量一樣) 18 19 //調(diào)用本類靜態(tài)變量(此處省略了類名點取) 20 StaticTest.b = 12; 21 System.out.println(b);//省略類名點取 22 23 //調(diào)用本類非靜態(tài)變量 24 //此處可以以創(chuàng)建實例對象的方式調(diào)用a變量,但是這樣的話這里的a就與直接調(diào)用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 //調(diào)用異類靜態(tài)變量(此處直接調(diào)用會報錯) 32 // b2 = 14;//報錯 33 Qita.b2 = 14; 34 System.out.println(Qita.b2); 35 36 //調(diào)用異類非靜態(tài)變量(此處直接調(diào)用會報錯) 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("一類中的靜態(tài)方法"); 44 //試驗同一類中非靜態(tài)方法調(diào)用靜態(tài)與非靜態(tài)變量(方法的調(diào)用與變量一樣) 45 46 //調(diào)用本類靜態(tài)變量 47 StaticTest.b = 22; 48 System.out.println(b);//此處省略類名點 49 50 //調(diào)用本類非靜態(tài)變量 51 StaticTest y = new StaticTest(); 52 y.a = 21; 53 System.out.println(y.a); 54 55 //調(diào)用異類靜態(tài)變量 56 Qita.b2 = 24; 57 System.out.println(Qita.b2); 58 59 //調(diào)用異類非靜態(tài)變量 60 Qita x = new Qita(); 61 x.a2 = 23; 62 System.out.println(x.a2); 63 } 64 public static void main(String[] args) { 65 //靜態(tài)方法調(diào)用本類中的非靜態(tài)方法 66 StaticTest z = new StaticTest(); 67 z.testa(); 68 69 //靜態(tài)方法中調(diào)用本類中靜態(tài)方法 70 testb(); 71 } 72 } 73 class Qita{ 74 int a2 = 3; 75 static int b2 = 4; 76 void testa2(){ 77 System.out.println("二類中的非靜態(tài)方法"); 78 } 79 static void testb2(){ 80 System.out.println("二類中的靜態(tài)方法"); 81 } 82 }
                        
                        
                        1、static修飾符表示靜態(tài)修飾符,其所修飾的內(nèi)容(變量、方法、代碼塊暫時學到這三種)統(tǒng)稱為靜態(tài)內(nèi)容(靜態(tài)變量、靜態(tài)方法、靜態(tài)代碼塊) 2、靜態(tài)內(nèi)容是與類相關(guān)的內(nèi)容。解釋:靜態(tài)變量在類加載時就會被分配內(nèi)存空間,而且只會被分配一次,也就是說靜態(tài)變量對類內(nèi)部是共享的,大家都可以去調(diào)用訪問它,只要在一個調(diào)用里改變了它的值,那么所有調(diào)用內(nèi)部的值全部都會被改變。靜態(tài)方法也是在類加載時就分配了入口地址,而且所有的方法都可以調(diào)用它(在不創(chuàng)建對象的前提下)。靜態(tài)代碼塊會在類加載時執(zhí)行一次,且僅僅執(zhí)行一次。 3、這里針對靜態(tài)內(nèi)容,介紹一下非靜態(tài)內(nèi)容,作為對比。非靜態(tài)變量必須在創(chuàng)建對象之后,才會在內(nèi)存中分配空間,此時才能被調(diào)用,非靜態(tài)方法會在創(chuàng)建對象之后才能利用對象點取調(diào)用(即以“對象名.方法()”調(diào)用),非靜態(tài)代碼塊則在每次創(chuàng)建對象時執(zhí)行一次,而且是優(yōu)先執(zhí)行。這些非靜態(tài)內(nèi)容都是與對象相關(guān)的內(nèi)容,都需要在擁有對象之后才能使用,這是與靜態(tài)內(nèi)容最基本的區(qū)別。 4、現(xiàn)在說說具體的調(diào)用細則:所有的靜態(tài)方法或變量可以被本類或異類中的靜態(tài)或非靜態(tài)方法以“類名.變量名”和“類名.方法名()”的格式調(diào)用,甚至在本類中調(diào)用時,可以省略掉“類名.”,而直接調(diào)用,而且堅守【一處改變,處處改變】的原則。 5、所有的非靜態(tài)變量或方法都可以被本類或異類中的靜態(tài)或非靜態(tài)方法以“先創(chuàng)建類的實例對象后,用‘對象名.變量名’和‘對象名。方法名()’”的格式調(diào)用,甚至在本類中的非靜態(tài)方法中可以省略對象實例化過程而直接調(diào)用(警告:此處的直接調(diào)用與省略調(diào)用所調(diào)用的變量或方法是不同的,他們在內(nèi)存中存放在不同的位置,新建對象的內(nèi)容在對象區(qū)域,而直接調(diào)用的話是直接對類的屬性本值進行操作) 下面是試驗代碼,(可以直接復制到你的編輯器中試運行):(代碼中部分注釋為測試內(nèi)容,可去掉注釋查看是否正確) 1 /**2 * 不區(qū)分本類還是異類,在靜態(tài)成員被調(diào)用必須以類名點取調(diào)用,非靜態(tài)成員必須創(chuàng)建累的實例去調(diào)用3 * 區(qū)別:4 * 1、靜態(tài)成員的調(diào)用:5 * 在本類(靜態(tài)與非靜態(tài)方法)中調(diào)用可以省略類名點,直接調(diào)用(此處無論是哪里的調(diào)用只要改變了屬性的值,那么所有的調(diào)用都會改變,因為他們都指向內(nèi)存中的同一個地址)6 * 2、非靜態(tài)成員的調(diào)用:7 * 在本類的非靜態(tài)方法中調(diào)用可以省略實例對象的創(chuàng)建,直接調(diào)用(這樣寫不會報錯,但是與創(chuàng)建對象再用對象命點用所指向的內(nèi)容不同了,因為他們指向內(nèi)存中的不同地址)8 */9 package com.test; 10 11 public class StaticTest{ 12 int a = 1; 13 static int b = 2; 14 //非靜態(tài)方法 15 void testa(){ 16 System.out.println("一類中的非靜態(tài)方法"); 17 //試驗同一類中非靜態(tài)方法調(diào)用靜態(tài)與非靜態(tài)變量(方法的調(diào)用與變量一樣) 18 19 //調(diào)用本類靜態(tài)變量(此處省略了類名點取) 20 StaticTest.b = 12; 21 System.out.println(b);//省略類名點取 22 23 //調(diào)用本類非靜態(tài)變量 24 //此處可以以創(chuàng)建實例對象的方式調(diào)用a變量,但是這樣的話這里的a就與直接調(diào)用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 //調(diào)用異類靜態(tài)變量(此處直接調(diào)用會報錯) 32 // b2 = 14;//報錯 33 Qita.b2 = 14; 34 System.out.println(Qita.b2); 35 36 //調(diào)用異類非靜態(tài)變量(此處直接調(diào)用會報錯) 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("一類中的靜態(tài)方法"); 44 //試驗同一類中非靜態(tài)方法調(diào)用靜態(tài)與非靜態(tài)變量(方法的調(diào)用與變量一樣) 45 46 //調(diào)用本類靜態(tài)變量 47 StaticTest.b = 22; 48 System.out.println(b);//此處省略類名點 49 50 //調(diào)用本類非靜態(tài)變量 51 StaticTest y = new StaticTest(); 52 y.a = 21; 53 System.out.println(y.a); 54 55 //調(diào)用異類靜態(tài)變量 56 Qita.b2 = 24; 57 System.out.println(Qita.b2); 58 59 //調(diào)用異類非靜態(tài)變量 60 Qita x = new Qita(); 61 x.a2 = 23; 62 System.out.println(x.a2); 63 } 64 public static void main(String[] args) { 65 //靜態(tài)方法調(diào)用本類中的非靜態(tài)方法 66 StaticTest z = new StaticTest(); 67 z.testa(); 68 69 //靜態(tài)方法中調(diào)用本類中靜態(tài)方法 70 testb(); 71 } 72 } 73 class Qita{ 74 int a2 = 3; 75 static int b2 = 4; 76 void testa2(){ 77 System.out.println("二類中的非靜態(tài)方法"); 78 } 79 static void testb2(){ 80 System.out.println("二類中的靜態(tài)方法"); 81 } 82 }
轉(zhuǎn)載于:https://www.cnblogs.com/V1haoge/p/5450170.html
總結(jié)
以上是生活随笔為你收集整理的简单了解static的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 13个大数据应用案例,告诉你最真实的大数
- 下一篇: java ndk 在哪_NDK简介
