|
static方法就是沒有this的方法。在static方法的內(nèi)部不能調(diào)用非靜態(tài)方法和變量,反過來是可以的。 一般情況下,如果有些代碼必須在項(xiàng)目啟動的時(shí)候就執(zhí)行的時(shí)候,需要使用靜態(tài)代碼塊,這種代碼是主動執(zhí)行的;需要在項(xiàng)目啟動的時(shí)候就初始化,在不創(chuàng)建對象的情況下,其他程序來調(diào)用的時(shí)候,需要使用靜態(tài)方法,這種代碼是被動執(zhí)行的. 靜態(tài)方法在類加載的時(shí)候 就已經(jīng)加載 可以用類名直接調(diào)用 比如main方法就必須是靜態(tài)的 這是程序入口。 兩者的區(qū)別就是:靜態(tài)代碼塊是自動執(zhí)行的; 靜態(tài)方法是被調(diào)用的時(shí)候才執(zhí)行的.
靜態(tài)方法 (1)在Java里,可以定義一個不需要創(chuàng)建對象的方法,這種方法就是靜態(tài)方法。要實(shí)現(xiàn)這樣的效果,只需要在類中定義的方法前加上static關(guān)鍵字。例如:public static int maximum(int n1,int n2)
使用類的靜態(tài)方法時(shí),注意: a.在靜態(tài)方法里只能直接調(diào)用同類中其他的靜態(tài)成員(包括變量和方法),而不能直接訪問類中的非靜態(tài)成員。這是因?yàn)?,對于非靜態(tài)的方法和變量,需要先創(chuàng)建類的實(shí)例對象后才可使用,而靜態(tài)方法在使用前不用創(chuàng)建任何對象。 b.靜態(tài)方法不能以任何方式引用this和super關(guān)鍵字,因?yàn)殪o態(tài)方法在使用前不用創(chuàng)建任何實(shí)例對象,當(dāng)靜態(tài)方法調(diào)用時(shí),this所引用的對象根本沒有產(chǎn)生(this關(guān)鍵字只能在方法內(nèi)部使用,表示對“調(diào)用方法的那個對象”的引用)。
(2)靜態(tài)變量是屬于整個類的變量而不是屬于某個對象的。注意不能把任何方法體內(nèi)的變量聲明為靜態(tài),例如: fun() { static int i=0;//非法。 } (3)一個類可以使用不包含在任何方法體中的靜態(tài)代碼塊,當(dāng)類被載入時(shí),靜態(tài)代碼塊被執(zhí)行,且之被執(zhí)行一次,靜態(tài)塊常用來執(zhí)行類屬性的初始化。例如: static { } (4)非靜態(tài)代碼塊 eg:
- public class TestStaticCon {
- public static int a = 0;
-
- static {
- a = 10;
- System.out.println("父類的非靜態(tài)代碼塊在執(zhí)行a=" + a);
- }
-
- {
- a = 8;
- System.out.println("父類的非靜態(tài)代碼塊在執(zhí)行a=" + a);
- }
-
- public TestStaticCon() {
- this("a在父類帶參構(gòu)造方法中的值:" + TestStaticCon.a);
- System.out.println(a);
- System.out.println("父類無參構(gòu)造方法在執(zhí)行a=" + a);
- }
-
- public TestStaticCon(String n) {
- System.out.println(n);
- System.out.println(a);
-
- }
-
- public static void main(String[] args) {
- TestStaticCon tsc = null;
- System.out.println("!!!!!!!!!!!!!!!!!!!!!");
- tsc = new TestStaticCon();
- }
-
-
-
-
-
-
-
-
-
- }
- public class TestStaticCon {
- public static int a = 0;
-
- static {
- a = 10;
- System.out.println("父類的非靜態(tài)代碼塊在執(zhí)行a=" + a);
- }
-
- {
- a = 8;
- System.out.println("父類的非靜態(tài)代碼塊在執(zhí)行a=" + a);
- }
-
- public TestStaticCon() {
- this("a在父類帶參構(gòu)造方法中的值:" + TestStaticCon.a);
- System.out.println(a);
- System.out.println("父類無參構(gòu)造方法在執(zhí)行a=" + a);
- }
-
- public TestStaticCon(String n) {
- System.out.println(n);
- System.out.println(a);
-
- }
-
- public static void main(String[] args) {
- TestStaticCon tsc = null;
- System.out.println("!!!!!!!!!!!!!!!!!!!!!");
- tsc = new TestStaticCon();
- }
-
-
-
-
-
-
-
-
-
- }
|