網站地圖 | RSS訂閱 老鐵博客 - 上海SEO優化|上海網站建設|蜘蛛池出租|站群代搭建
你的位置:首頁 ? 前端腳本 ? 正文

java修飾符,java方法修飾符有哪些

2020-6-12 13:56:2 | 作者:老鐵SEO | 0個評論 | 人瀏覽

  1、類的修飾符分為:可訪問控制符和非訪問控制符兩種。


  可訪問控制符是:公共類修飾符public


  非訪問控制符有:抽象類修飾符abstract;最終類修飾符final


  1)公共類修飾符public:Java語言中類的可訪問控制符只有一個:public即公共的。每個Java程序的主類都必須是public類作為公共工具供其它類和程序使用的應定義為public類。


  2)抽象類修飾符abstract:凡是用abstract修飾符修飾的類,被稱為抽象類。所謂抽象類是指這種類沒有具體對象的一種概念類。這樣的類就是Java語言的abstract類。


  3)最終類修飾符final:當一個類不可能有子類時可用修飾符final把它說明為最終類。被定義為final的類通常是一些有固定作用、用來完成某種標準功能的類。


  4)類缺省訪問控制符:如果一個類沒有訪問控制符,說明它具有缺省的訪問控制符特性。此時,這個類只能被同一個包中的類訪問或引用。這一訪問特性又稱為包訪問性。


  2.域的控制修飾符也分為:可訪問控制符和非訪問控制符兩類。


  可訪問控制符有4種:公共訪問控制符:public;私有訪問控制符:private;保護訪問控制符:protected;私有保護訪問控制符:privateprotected


  非訪問控制符有4種:靜態域修飾符:static;最終域修飾符:final;易失(共享)域修飾符:volatile;暫時性域修飾符:transient


  1)公共訪問控制符public:用public修飾的域稱為公共域。如果公共域屬于一個公共類,則可以被所有其它類所引用。由于public修飾符會降低運行的安全性和數據的封裝性,所以一般應減少public域的使用。


  2)私有訪問控制符private:用private修飾的成員變量(域)只能被該類自身所訪問,而不能被任何其它類(包括子類)所引用。


  3)保護訪問控制符protected:用protected修飾的成員變量可以被三種類所引用:①該類自身;②與它在同一個包中的其它類;③在其它包中的該類的子類。使用修飾符protected的主要作用是允許其它包中它的子類來訪問父類的特定屬性。


  4)私有保護訪問控制符privateprotected:用修飾符privateprotected修飾的成員變量可以被該類本身或該類的子類兩種類訪問和引用。


  5)靜態域修飾符static:用static修飾的成員變量僅屬于類的變量,而不屬于任何一個具體的對象,靜態成員變量的值是保存在類的內存區域的公共存儲單元,而不是保存在某一個對象的內存區間。任何一個類的對象訪問它時取到的都是相同的數據;任何一個類的對象修改它時,也都是對同一個內存單元進行操作。


  6)最終域修飾符final:最終域修飾符final是用來定義符號常量的。一個類的域(成員變量)如果被修飾符final說明,則它的取值在程序的整個執行過程中都是不變的。


  7)易失(共享)域修飾符volatile:易失(共享)域修飾符volatile是用來說明這個成員變量可能被幾個線程所控制和修改。也就是說在程序運行過程中,這個成員變量有可能被其它的程序影響或改變它的取值。因此,在使用中要注意這種成員變量取值的變化。通常volatile用來修飾接受外部輸入的域。


  8)暫時性域修飾符transient:暫時性域修飾符transient用來定義一個暫時性變量。其特點是:用修飾符transient限定的暫時性變量,將指定Java虛擬機認定該暫時性變量不屬于永久狀態,以實現不同對象的存檔功能。否則,類中所有變量都是對象的永久狀態的一部分,存儲對象時必須同時保存這些變量。


  3.方法的控制修飾符也分為:可訪問控制符和非訪問控制符兩類。


  可訪問控制符有4種:公共訪問控制符:public;私有訪問控制符:private;保護訪問控制符:protected;私有保護訪問控制符:privateprotected


  非訪問控制符有5種:抽象方法控制符:abstract;靜態方法控制符:static;最終方法控制符:final;本地方法控制符:native;同步方法控制符:synchronized


  1)抽象方法控制符abstract:用修飾符abstract修飾的方法稱為抽象方法。抽象方法是一種僅有方法頭,沒有方法體和操作實現的一種方法。


  2)靜態方法控制符static:用修飾符static修飾的方法稱為靜態方法。靜態方法是屬于整個類的類方法;而不使用static修飾、限定的方法是屬于某個具體類對象的方法。由于static方法是屬于整個類的,所以它不能操縱和處理屬于某個對象的成員變量,而只能處理屬于整個類的成員變量,即static方法只能處理static的域。


  3)最終方法控制符final:用修飾符final修飾的方法稱為最終方法。最終方法是功能和內部語句不能更改的方法,即最終方法不能重載。這樣,就固定了這個方法所具有的功能和操作,防止當前類的子類對父類關鍵方法的錯誤定義,保證了程序的安全性和正確性。所有被private修飾符限定為私有的方法,以及所有包含在final類(最終類)中的方法,都被認為是最終方法。


  4)本地方法控制符native:用修飾符native修飾的方法稱為本地方法。為了提高程序的運行速度,需要用其它的高級語言書寫程序的方法體,那么該方法可定義為本地方法用修飾符native來修飾;


  5)同步方法控制符synchronized:該修飾符主要用于多線程共存的程序中的協調和同步。


  本文出自http://hi.baidu.com/lifa868/blog/item/d91674ecb346c64779f0557d.html


  Java內部類的修飾符有哪些?


  一、內部類可以為四種:


 ?、膘o態內部類


 ?、渤蓡T內部類


 ?、尘植績炔款?/p>


 ?、?/p>


  匿名內部類幾種內部類的共性:


  A、內部類仍然是一個獨立的類,在編譯之后會內部類會被編譯成獨立的.class文件,但是前面冠以外部類的類命和$符號。


  B、內部類不能用普通的方式訪問。內部類是外部類的一個成員,因此內部類可以自由地訪問外部類的成員變量,無論是否是private的。


  1、靜態嵌套類:從技術上講,靜態嵌套類不屬于內部類。因為內部類與外部類共享一種特殊關系,更確切地說是對實例的共享關系。而靜態嵌套類則沒有上述關系。它只是位置在另一個類的內部,因此也被稱為頂級嵌套類。靜態的含義是該內部類可以像其他靜態成員一樣,沒有外部類對象時,也能夠訪問它。靜態嵌套類不能訪問外部類的成員和方法。classOuter{staticclassInner{}}classTest{publicstaticvoidmain(String[]args){Outer.Innern=newOuter.Inner();}}


  2、成員內部類:形式如下


  classOuter{classInner{}}


  編譯上述代碼會產生兩個文件:Outer.class和Outer$Inner.class。成員內部類內不允許有任何靜態聲明!下面代碼不能通過編譯。


  classInner{staticinta=10;


  }能夠訪問成員內部類的唯一途徑就是通過外部類的對象!


  A、從外部類的非靜態方法中實例化內部類對象。classOuter{private


  inti=10;publicvoidmakeInner(){Innerin=newInner();


  in.seeOuter();}classInner{publicvoidseeOuter(){


  System.out.print(i);}}


  }表面上,我們并沒有創建外部類的對象就實例化了內部類對象,和上面的話矛盾。事實上,如果不創建外部類對象也就不可能調用makeInner()方法,所以到頭來還是要創建外部類對象的??赡茉噲D把makeInner()方法修飾為靜態方法,即static


  publicvoid


  makeInner()。這樣不創建外部類就可以實例化外部類了!但是在一個靜態方法里能訪問非靜態成員和方法嗎?顯然不能。它沒有this引用。沒能跳出那條規則!但是如果在這個靜態方法中實例化一個外部類對象,再用這個對象實例化外部類完全可以!也就是下一條的內容。


  B、從外部類的靜態方法中實例化內部類對象。


  classOuter{privateinti=10;classInner{publicvoidseeOuter(){


  System.out.print(i);


  }}publicstaticvoidmain(String[]args){Outerout=newOuter();


  Outer.Innerin=out.newInner();//Outer.Innerin=newOuter().new


  Inner();in.seeOuter();}


  }被注釋掉的那行是它上面兩行的合并形式,一條簡潔的語句。對比一下:在外部類的非靜態方法中實例化內部類對象是普通的new方式:Innerin=


  newInner();在外部類的靜態方法中實例化內部類對象,必須先創建外部類對象:Outer.Inner


  in=newOuter().new


  Inner();


  C、內部類的this引用。普通的類可以用this引用當前的對象,內部類也是如此。但是假若內部類想引用外部類當前的對象呢?用“外部類名”.this;的形式,如下例的Outer.this。


  classOuter{classInner{publicvoidseeOuter(){


  System.out.println(this);System.out.println(Outer.this);}}


  }


  D、成員內部類的修飾符。對于普通的類,可用的修飾符有final、abstract、strictfp、public和默認的包訪問。但是成員內部類更像一個成員變量和方法??捎玫男揎椃校篺inal、abstract、public、private、protected、strictfp和static。一旦用static修飾內部類,它就變成靜態內部類了。


  3、方法內部類:顧名思義,把類放在方法內。


  classOuter{publicvoiddoSomething(){classInner{publicvoid


  seeOuter(){}}}


  }


  A、方法內部類只能在定義該內部類的方法內實例化,不可以在此方法外對其實例化。


  B、方法內部類對象不能使用該內部類所在方法的非final局部變量。因為方法的局部變量位于棧上,只存在于該方法的生命期內。當一個方法結束,其棧結構被刪除,局部變量成為歷史。但是該方法結束之后,在方法內創建的內部類對象可能仍然存在于堆中!例如,如果對它的引用被傳遞到其他某些代碼,并存儲在一個成員變量內。正因為不能保證局部變量的存活期和方法內部類對象的一樣長,所以內部類對象不能使用它們。下面是完整的例子:


  classOuter{publicvoiddoSomething(){finalinta=10;classInner{


  publicvoidseeOuter(){System.out.println(a);}}Innerin=new


  Inner();in.seeOuter();}publicstaticvoidmain(String[]args){Outer


  out=newOuter();out.doSomething();}


  }


  C、方法內部類的修飾符。與成員內部類不同,方法內部類更像一個局部變量??梢杂糜谛揎椃椒▋炔款惖闹挥衒inal和abstract。


  D、靜態方法內的方法內部類。靜態方法是沒有this引用的,因此在靜態方法內的內部類遭受同樣的待遇,即:只能訪問外部類的靜態成員。


  4、匿名內部類:顧名思義,沒有名字的內部類。表面上看起來似乎有名字,實際那不是名字。


  A、繼承式的匿名內部類。


  classCar{publicvoiddrive(){System.out.println("Drivingacar!");}


  }classTest{publicstaticvoidmain(String[]args){Carcar=new


  Car(){publicvoiddrive(){System.out.println("Drivinganothercar!");}


  };car.drive();}}結果輸出了:Drivinganother


  car!


  Car引用變量不是引用Car對象,而是Car匿名子類的對象。建立匿名內部類的關鍵點是重寫父類的一個或多個方法。再強調一下,是重寫父類的方法,而不是創建新的方法。因為用父類的引用不可能調用父類本身沒有的方法!創建新的方法是多余的。簡言之,參考多態。B、接口式的匿名內部類。


  interfaceVehicle{publicvoiddrive();}classTest{publicstatic


  voidmain(String[]args){Vehiclev=newVehicle(){


  publicvoiddrive(){System.out.println("Drivingacar!");}};


  v.drive();}


  }上面的代碼很怪,好像是在實例化一個接口。事實并非如此,接口式的匿名內部類是實現了一個接口的匿名類。而且只能實現一個接口。


  C、參數式的匿名內部類。class


  Bar{voiddoStuff(Foof){}}interfaceFoo{voidfoo();}classTest{


  staticvoidgo(){Barb=newBar();


  b.doStuff(newFoo(){publicvoidfoo(){System.out.println("foofy");}


  });


  }}


  二、權限修飾符:public、protected、default、private。


  修飾符:abstract、static、final。


  public??使用對象:最廣,類、接口、變量、方法。


  protected使用對象:變量、方法注意:不能修飾類(外部類)。


  default?使用對象:類、接口、變量、方法。(即缺省,什么也不寫)。


  private?使用對象:變量、方法注意:不能修飾類(外部類)。


  abstract使用對象:類、接口、方法。


  static?使用對象:類、變量、方法、初始化函數(注意:修飾類時只能修飾內部類)。


  final??使用對象:類、變量、方法。


  transient:告訴編譯器,在類對象序列化的時候,此變量不需要持久保存


  volatile:指出可能有多個線程修改此變量,要求編譯器優化以保證對此變量的修改能夠被正確的處理。


  native:用該修飾符定義的方法在類中沒有實現,而大多數情況下該方法的實現是用C、C++編寫的。


  synchronized:修飾方法,多線程的支持。


  java中類修飾符有哪些?


  1.class不加修飾符的時候即直接聲明classA{}


  在這種情況下,class前面沒有加任何的訪問修飾符,通常稱為“默認訪問模式”,在該模式下,這個類只能被同一個包中的類訪問或引用,這一訪問特性又稱包訪問性。


  2.類修飾符:


  (1)public(訪問控制符),將一個類聲明為公共類,他可以被任何對象訪問,一個程序的主類必須是公共類。


  (2)abstract,將一個類聲明為抽象類,沒有實現的方法,需要子類提供方法實現。


  (3)final,將一個類生命為最終(即非繼承類),表示他不能被其他類繼承。


  3.成員變量修飾符:


  (1)public(公共訪問控制符),指定該變量為公共的,他可以被任何對象的方法訪問。


  (2)private(私有訪問控制符)指定該變量只允許自己的類的方法訪問,其他任何類(包括子類)中的方法均不能訪問。


  (3)protected(保護訪問控制符)指定該變量可以別被自己的類和子類訪問。在子類中可以覆蓋此變量。


  (4)friendly?,在同一個包中的類可以訪問,其他包中的類不能訪問。


  (5)final,最終修飾符,指定此變量的值不能變。


  (6)static(靜態修飾符)指定變量被所有對象共享,即所有實例都可以使用該變量。變量屬于這個類。


  (7)transient(過度修飾符)指定該變量是系統保留,暫無特別作用的臨時性變量。


  (8)volatile(易失修飾符)指定該變量可以同時被幾個線程控制和修改。


  4.方法修飾符:


  (1)public(公共控制符)


  (2)private(私有控制符)指定此方法只能有自己類等方法訪問,其他的類不能訪問(包括子類)


  (3)protected(保護訪問控制符)指定該方法可以被它的類和子類進行訪問。


  (4)final,指定該方法不能被重載。


  (5)static,指定不需要實例化就可以激活的一個方法。


  (6)synchronize,同步修飾符,在多個線程中,該修飾符用于在運行前,對他所屬的方法加鎖,以防止其他線程的訪問,運行結束后解鎖。


  (7)native,本地修飾符。指定此方法的方法體是用其他語言在程序外部編寫的。


  擴展資料:百度百科-java關鍵字


  java的訪問修飾符是什么?


  Java中的訪問修飾符


  Java面向對象的基本思想之一是封裝細節并且公開接口。Java語言采用訪問控制修飾符來控制類及類的方法和變量的訪問權限,從而向使用者暴露接口,但隱藏實現細節。訪問控制分為四種級別:


 ?。?)public:用public修飾的類、類屬變量及方法,包內及包外的任何類(包括子類和普通類)均可以訪問;


 ?。?)protected:用protected修飾的類、類屬變量及方法,包內的任何類及包外那些繼承了該類的子類才能訪問(此處稍后解釋),protected重點突出繼承;


 ?。?)default:如果一個類、類屬變量及方法沒有用任何修飾符(即沒有用public、protected及private中任何一種修飾),則其訪問權限為default(默認訪問權限)。默


  認訪問權限的類、類屬變量及方法,包內的任何類(包括繼承了此類的子類)都可以訪問它,而對于包外的任何類都不能訪問它(包括包外繼承了此類的子類)。default重點突出包;


 ?。?)private:用private修飾的類、類屬變量及方法,只有本類可以訪問,而包內包外的任何類均不能訪問它。


  網上一些資料及一些書上用表格對java訪問修飾符做了清楚的總結,如下表所示:?


  重要總結:通過上面的分析,我們可以看到:


  1.?public、private和protected對我們來說沒有任何異議。


  2.頂層類只能用public訪問修飾符和default(默認)訪問修飾符修飾,其中用默認修飾符修飾的類(及沒有任何修飾符的類,如classB{})不能被其他包中的類繼承,這也說明了default(默認)訪問修飾符突出的是包權限


  3.protected:本人做了一次實驗,發現在不同包的子類中,new一個父類對象,并用該父類對象去訪問父類中的用protected修飾的類屬變量和方法時不能訪問,而new一個子類對象時,子類對象可以訪問(說明protected修飾的類可以被其他包中的類繼承)。也可以在子類重寫父類的方法中使用super關鍵字調用。這豈不是和上面表格中的總結(紅色對勾)沖突了?本人也是百思不得其解。最后在網上找到了一個相對比較認可的解釋,如下:


  protected修飾符的修飾的成員變量和方法也稱為受保護的成員變量和方法,受保護的成員變量和方法可以在本類或同一個包中的其它類(包括子類)中通過類的實例進行訪問,也可以被同一個包中的類或不同包中的類繼承,但是不能在不同包中的其它類(包括子類)中通過類的實例進行訪問。


  4.如果一個類使用public修飾,那該類的類名必須與他所在的源文件名相同。一個.java源文件中有且只有一個public類,頂層類只能用public和默認修飾符(即無修飾符)修飾;


  5.?final修飾的類不能被繼承,沒有子類。


  6.?abstract修飾的類不能被實例化,必須被子類繼承。類只要有一個抽象方法就必定是抽象類,但抽象類不一定要有抽象方法。


  最終總結,就一句話:protected修飾符所修飾的類(這句話中指父類)屬成員變量和方法,只可以被子類訪問,而不管子類是不是和父類位于同一個包中。default修飾符所修飾的類屬成員變量和方法,只可被同一個包中的其他類訪問,而不管其他類是不是該類的子類。protected屬于子類限制修飾符,而default屬于包限制修飾符。

  • 本文來自: 老鐵博客,轉載請保留出處!歡迎發表您的評論
  • 相關標簽:
  • 已有0位網友發表了一針見血的評論,你還等什么?

    必填

    選填

    記住我,下次回復時不用重新輸入個人信息

    必填,不填不讓過哦,嘻嘻。

    ◎歡迎參與討論,請在這里發表您的看法、交流您的觀點。

    相關推薦

    苍穹之上手游怎么赚钱 秒速时时彩盛世官网 江西省十一选五基本走势图 快乐12中奖规则 陕西11选5基本走势图 广东好彩1开奖时间 股票配资平台 湖南快乐十分开奖详情 湖北快三开奖结果360 飞鹤奶粉股票代码 一分钟11选五计划