a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

靜態(tài)方法和非靜態(tài)方法的區(qū)別

2019-11-14 09:54:08
字體:
供稿:網(wǎng)友
    使用static修飾的靜態(tài)方法是屬于整個(gè)類的類方法,它在內(nèi)存中的代碼段會(huì)隨類的定義而被分配和裝載;而非靜態(tài)方法是屬于具體對(duì)象的方法,當(dāng)這個(gè)對(duì) 象創(chuàng)建時(shí),在對(duì)象的內(nèi)存中會(huì)擁有此方法的專用代碼段。在引用靜態(tài)方法時(shí),可以使用對(duì)象名加前綴,也可以使用類名加前綴。eg. classA 實(shí)例化了一個(gè)對(duì)象objectA,classA中定義了一個(gè)靜態(tài)方法:run( ). 則可使用 classA.run( ) 或者objectA.run( )來執(zhí)行。非靜態(tài)方法既可以訪問靜態(tài)數(shù)據(jù)成員 又可以訪問非靜態(tài)數(shù)據(jù)成員,而靜態(tài)方法只能訪問靜態(tài)數(shù)據(jù)成員;同樣地非靜態(tài)方法既可以訪問靜態(tài)方法又可以訪問非靜態(tài)方法,而靜態(tài)方法只能訪問靜態(tài)數(shù)據(jù)方法。特別注意的是靜態(tài)方法中的main方法,它作為程序運(yùn)行的入口點(diǎn),在每個(gè)程序中有且只能有一個(gè)。  例如:public class Person{      public int age;      public static double height;      public static String Address(String x){      System.out.PRintln("address:"+x);      }       public int Birthday(int x){      System.out.println("birthday is "+x+" month");      }      public static void main(String[] args){//靜態(tài)方法      age=24;           //引用了非靜態(tài)數(shù)據(jù)成員      height=173;      Address("xi'an");      Birthday(5);      //引用了非靜態(tài)方法      }}  編譯時(shí),就會(huì)出現(xiàn)無法從靜態(tài)上下文中引用非靜態(tài)變量age和非靜態(tài)方法Birthday(int)的錯(cuò)誤。    還有一點(diǎn)就是靜態(tài)方法不能被覆蓋,有一個(gè)形象的例子引自http://blog.csdn.net/rujiao/archive/2009/01/13/3764115.aspx  首先我們提供兩個(gè)類,基類為Parent,派生類為Child。在Parent中我們提供兩個(gè)方法,一個(gè)是靜態(tài)方法staticMethod(),一個(gè)是非靜態(tài)方法nonStaticMethod()。在Child類中我們覆蓋著兩個(gè)方法。class Parent{public void nonStaticMethod(){  System.out.println("parent's Non-Static Method is Called"); } public static void staticMethod(){  System.out.println("parent's static method is called"); }}class Child extends Parent{public void nonStaticMethod(){  System.out.println("child's non-static method is called"); }public static void staticMethod(){  System.out.println("child's static method is called"); }  }    在Test類中我們分別使用Parent p1 = new Parent(),Parent p2 = new Child(),Child c = new Child()得到三個(gè)實(shí)例,并分別調(diào)用靜態(tài)方法和非靜態(tài)方法,我們來看程序的運(yùn)行結(jié)果public class Test{         public static void main(String args[])          {          Parent p1 = new Parent();          Parent p2 = new Child();          Child c = new Child();          System.out.print("parent.static: "); Parent.staticMethod();          System.out.print("p1.static: "); p1.staticMethod();          System.out.print("p2.static: "); p2.staticMethod();          System.out.print("p1.nonStatic: "); p1.nonStaticMethod();          System.out.print("p2.nonStatic: "); p2.nonStaticMethod();          System.out.print("Child.static: "); Child.staticMethod();          System.out.print("c.static: "); c.staticMethod();          System.out.print("c.nonStatic: "); c.nonStaticMethod();         }}程序的運(yùn)行結(jié)果為:Parent.static: parent's static method is calledp1.static: parent's static method is calledp2.static: parent's static method is calledp1.nonStatic: Parent's Non-Static Method is Calledp2.nonStatic: child's non-static method is calledChild.static: child's static method is calledc.static: child's static method is calledc.nonStatic: child's non-static method is called值得注重的是p2實(shí)際上是一個(gè)Child的類型的引用,然而在調(diào)用靜態(tài)方法的時(shí)候,它執(zhí)行的卻是父類的靜態(tài)方法,而不是Child的靜態(tài)方法,而調(diào)用 p2的非靜態(tài)方法的時(shí)候執(zhí)行的是Child的非靜態(tài)方法,為什么呢?原因是靜態(tài)方法是在編譯的時(shí)候把靜態(tài)方法和類的引用類型進(jìn)行匹配,而不是在運(yùn)行的時(shí)候 和類引用進(jìn)行匹配。因此我們得出結(jié)論:當(dāng)我們?cè)谧宇愔袆?chuàng)建的靜態(tài)方法,它并不會(huì)覆蓋父類中相同名字的靜態(tài)方法。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 毛片网站在线 | 午夜精品视频 | 久久精品国产99国产 | 亚洲高清在线观看 | 欧美日韩精品一区二区 | 日韩h在线观看 | 人人干人人干 | 中文字幕久久精品 | 久久成人精品视频 | 情趣视频在线免费观看 | 91精品国产欧美一区二区 | 夜夜骑天天操 | 超碰高清 | 日韩啊啊啊 | 欧美日韩在线观看中文字幕 | 欧美日韩成人在线视频 | 欧美日韩精品一区二区三区在线观看 | 国产精品久久毛片 | 国产成人啪精品午夜在线观看 | 天天爱天天操 | 色综合国产 | 中文字幕精品一区久久久久 | 日韩国产在线 | 国产午夜久久 | 亚洲社区在线观看 | www.xxxx在线观看 | 高清视频一区二区 | 成人夜晚看av | 日本精品久久 | 国产精品永久在线观看 | 国外成人在线视频网站 | 在线色 | a级毛片视频免费观看 | 国产日韩高清在线 | 天天碰天天操 | 国产精品视频一区二区三区, | 成人av播放 | 日本午夜在线 | 黄色亚洲 | 国外成人免费视频 | 国产激情视频 |