国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

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

Java內(nèi)部類

2019-11-14 09:15:02
字體:
供稿:網(wǎng)友

java中,可以將一個(gè)類定義在另一個(gè)類里面或者一個(gè)方法里面,這樣的類稱為內(nèi)部類。廣泛意義上的內(nèi)部類一般來說包括這四種:非靜態(tài)內(nèi)部成員類、靜態(tài)內(nèi)部成員類、局部內(nèi)部類和匿名內(nèi)部類。下面就先來了解一下這四種內(nèi)部類的用法。

內(nèi)部類是指在一個(gè)外部類的內(nèi)部再定義一個(gè)類。類名不需要和文件夾相同。內(nèi)部類可以是靜態(tài)static的,也可用public,default,PRotected和private修飾。(而外部頂級類即類名和文件名相同的只能使用public和default)。

 注意:內(nèi)部類是一個(gè)編譯時(shí)的概念,一旦編譯成功,就會(huì)成為與外部類完全不同的兩個(gè)類。對于一個(gè)名為outer的外部類和其內(nèi)部定義的名為inner的內(nèi)部類。編譯完成后出現(xiàn)outer.class和outer$inner.class兩類。所以內(nèi)部類的成員變量及方法名可以和外部類的相同。

非靜態(tài)成員內(nèi)部類

非靜態(tài)成員內(nèi)部類即普通成員內(nèi)部類,就是作為外部類的成員,可以直接使用外部類的所有成員和方法,即使是private的。同時(shí)外部類如果要訪問內(nèi)部類的所有成員變量與方法,則需要通過內(nèi)部類的實(shí)例對象來獲取。要注意的是,普通成員內(nèi)部類不能含有static的變量和方法。因?yàn)?strong>普通成員內(nèi)部類需要先創(chuàng)建了外部類,才能創(chuàng)建它自己,了解這一點(diǎn),就可以明白更多事情,在此省略更多的細(xì)節(jié)了。在普通成員內(nèi)部類要引用外部類對象時(shí),使用outer.this來表示外部類對象;而需要?jiǎng)?chuàng)建內(nèi)部類對象時(shí),可以使用outer.inner obj = outerobj.new inner()來創(chuàng)建,在創(chuàng)建內(nèi)部類實(shí)例之前需要先創(chuàng)建外部類的實(shí)例對象。測試代碼如下:

public class OuterNestedClass {	private int x = 100;	class MyInner {		private String y = "Hello!";		public void innerMethod() 		{			System.out.println("內(nèi)部類中 String = " + y);			System.out.println("外部類中的x = " + x);//直接訪問外部類變量x			outerMethod();			System.out.println("內(nèi)部類調(diào)用外部類方法執(zhí)行x++后,x = " + OuterNestedClass.this.x);		  }	 }	 	 public void outerMethod() {		 x++;	 }	 	 public MyInner makeInner() {		return new MyInner();	//在外部類方法中創(chuàng)建內(nèi)部類實(shí)例	 }	 public int getX(){		 return x;	 }	 	 public static void main(String[] args) {		 OuterNestedClass outer = new OuterNestedClass();	//創(chuàng)建外部類實(shí)例		 OuterNestedClass.MyInner inner = outer.new MyInner();//內(nèi)部類實(shí)例		 outer.outerMethod();		 System.out.println("外部類中的x = " + outer.getX());	    inner.innerMethod();		    	    OuterNestedClass.MyInner inner2 = outer.makeInner();//創(chuàng)建內(nèi)部類實(shí)例	    inner2.innerMethod();	}}運(yùn)行結(jié)果如下:
外部類中的x = 101內(nèi)部類中 String = Hello!外部類中的x = 101內(nèi)部類調(diào)用外部類方法執(zhí)行x++后,x = 102內(nèi)部類中 String = Hello!外部類中的x = 102內(nèi)部類調(diào)用外部類方法執(zhí)行x++后,x = 103上面代碼中,如果將public MyInner makeInner()方法聲明改為public static MyInner makeInner(),編譯器將提示錯(cuò)誤:“沒有任何類型OuterNestedClass的外層實(shí)例可訪問。必須用類型OuterNestedClass的外層實(shí)例(例如,x.new A(),其中x是OuterNestedClass的實(shí)例)來限定分配。”這表明非靜態(tài)成員類的每個(gè)實(shí)例都隱含著與外圍類的一個(gè)外圍實(shí)例相關(guān)聯(lián),在沒有外圍實(shí)例的情況下,要想創(chuàng)建非靜態(tài)成員內(nèi)部類的實(shí)例是不可能的。

靜態(tài)成員內(nèi)部類

靜態(tài)成員內(nèi)部類,就是修飾為static的內(nèi)部成員類。聲明為static的內(nèi)部類,不需要內(nèi)部類對象和外部類對象之間的聯(lián)系,就是說我們可以直接引用outer.inner,即不需要?jiǎng)?chuàng)建外部類實(shí)例,也不需要?jiǎng)?chuàng)建內(nèi)部類。靜態(tài)內(nèi)部類與靜態(tài)內(nèi)部方法相似,只能訪問外圍類的static成員不能直接訪問外部類的實(shí)例變量與實(shí)例方法,只有通過對象引用才能訪問。由于static內(nèi)部類不具有任何對外部類實(shí)例的引用,因此static內(nèi)部類中不能使用this關(guān)鍵字來訪問外部類中的實(shí)例成員,但是可以訪問外部類中的static成員,這與一般類的static方法相通。靜態(tài)成員內(nèi)部類和普通的內(nèi)部類還有一個(gè)區(qū)別:普通內(nèi)部類不能有static數(shù)據(jù)和static屬性,也不能再包含靜態(tài)成員內(nèi)部類,但靜態(tài)成員內(nèi)部類可以,而靜態(tài)成員內(nèi)部類不能聲明為private,一般聲明為public,方便調(diào)用。測試代碼如下:

public class Outer {	private static int x = 100;		//外圍類靜態(tài)數(shù)據(jù)成員	 //創(chuàng)建靜態(tài)內(nèi)部類	public static class MyInner {		private String y = "Hello!";		public void innerMethod() 		{			System.out.println("內(nèi)部類中String = " + y);			System.out.println("外部類中的staic變量x = " + x);  		 }	}		public static MyInner makeInner() {		return new MyInner();	//在外部類方法中創(chuàng)建內(nèi)部類實(shí)例	}	 	public void outerMethod() {		 x++;	}		public int getX(){		return x;	}		public static void main(String[] args) {		Outer outer = new Outer();		//與普通類的實(shí)例通過類名創(chuàng)建相似		Outer.MyInner si = new Outer.MyInner();//靜態(tài)內(nèi)部類不通過外部實(shí)例就可以創(chuàng)建對象		outer.outerMethod();		System.out.println("外部類中的static變量x = " + outer.getX());		si.innerMethod();		outer.outerMethod();		Outer.MyInner si2 = Outer.makeInner();	//通過外圍類靜態(tài)方法創(chuàng)建內(nèi)部類實(shí)例		si2.innerMethod();	}}運(yùn)行結(jié)果如下:

外部類中的static變量x = 101內(nèi)部類中 String = Hello!外部類中的staic變量x = 101內(nèi)部類中 String = Hello!外部類中的staic變量x = 102

局部內(nèi)部類

定義在代碼塊、方法體內(nèi)、作用域(使用花括號“{}”括起來的一段代碼)內(nèi)的類叫局部內(nèi)部類。局部內(nèi)部類只能在代碼代碼塊、方法體內(nèi)和作用域中使用(創(chuàng)建對象和使用類對象)。局部內(nèi)部類也像別的類一樣進(jìn)行編譯,但只是作用域不同而已,只在該方法或條件的作用域內(nèi)才能使用,退出這些作用域后無法引用的。局部內(nèi)部類訪問外部類的屬性和方法使用“外部類名.this.屬性名”和“外部類名.this.方法名(參數(shù))”的形式。局部內(nèi)部類就像是方法里面的一個(gè)局部變量一樣,是不能有public、protected、private以及static修飾符的,最多只能有final修飾。局部內(nèi)部類的定義方式如下:

public class Test {    {        class AA{}				//塊內(nèi)局部類    }    public Test(){        class AA{}				//構(gòu)造器內(nèi)局部類    }    public static void main(String[] args){    }    public void test(){        class AA{}				//方法內(nèi)局部類    }}

注意到了吧,局部內(nèi)部類可以同名,編譯后形成諸如:外部類名稱+$+同名順序+局部類名稱:Test$1AA.class/Test$2AA.class/Test$3AA.class。以下是將局部內(nèi)部類定義在代碼塊內(nèi)的示例代碼:

public class LocalNestedClass2 {     private String internalTracking(boolean b)     {         if (b)         {             final class TrackingSlip             {                 private String id;                 TrackingSlip(String s) {                     id = s;                 }                 String getSlip() {                     return id;                 }             }             TrackingSlip ts = new TrackingSlip("slip");             String s = ts.getSlip();             return s.toUpperCase();        }         else        	return "";    }      public String track() {         return internalTracking(true);     }     public static void main(String[] args)     {     	 LocalNestedClass2 p = new LocalNestedClass2();         System.out.println(p.track());     } } 

匿名內(nèi)部類

匿名類,就是沒有名稱的類,其名稱由Java編譯器給出,一般是形如:外部類名稱+$+匿名類順序,沒有名稱也就意味著在其他地方就不能引用,不能實(shí)例化,只用一次,當(dāng)然也就不能有構(gòu)造器。匿名類根據(jù)位于地方不同分為:成員匿名類和局部匿名類。匿名類不能使用任何關(guān)鍵字和訪問控制符,匿名類和局部類訪問規(guī)則一樣,只不過內(nèi)部類顯式的定義了一個(gè)類,然后通過new的方式創(chuàng)建這個(gè)局部類實(shí)例,而匿名類直接new一個(gè)類實(shí)例,沒有定義這個(gè)類。匿名類最常見的方式就是回調(diào)模式的使用,通過默認(rèn)實(shí)現(xiàn)一個(gè)接口創(chuàng)建一個(gè)匿名類然后,然后new這個(gè)匿名類的實(shí)例。匿名內(nèi)部類定義和實(shí)例化形式如下:

new父類構(gòu)造方法(參數(shù)){	修飾符 返回參數(shù)類型 方法名(參數(shù)列表)//該方法名須在父類中存在	{	}}

匿名內(nèi)部類只能和new連用,用于創(chuàng)建一個(gè)實(shí)例。匿名內(nèi)部類只能使用一次,創(chuàng)建實(shí)例之后,類定義會(huì)立即消失(想要多次使用就要用到反射的知識了)。匿名內(nèi)部類必須繼承一個(gè)類(抽象的、非抽象的都可以)或者實(shí)現(xiàn)一個(gè)接口。如果父類(或者父接口)是抽象類,則匿名內(nèi)部類必須實(shí)現(xiàn)其所有抽象方法。匿名內(nèi)部類不能是抽象類,因?yàn)槟涿麅?nèi)部類在定義之后,會(huì)立即創(chuàng)建一個(gè)實(shí)例。匿名內(nèi)部類不能定義構(gòu)造方法,匿名內(nèi)部類沒有類名,無法定義構(gòu)造方法,但是,匿名內(nèi)部類擁有與父類相同的所有構(gòu)造方法。匿名內(nèi)部類中可以定義代碼塊,用于實(shí)例的初始化,但是不能定義靜態(tài)代碼塊。以下是匿名內(nèi)部類的測試代碼:

abstract class Test{      public abstract void print();  }interface Inner {     String getName(); }public class AnonymousNestedClass {     public static void main(String[] args) {     	AnonymousNestedClass  outer = new AnonymousNestedClass ();        Inner inner = outer.getInner("Inner", "gz");        System.out.println(inner.getName());        //定義一個(gè)匿名內(nèi)部類,并實(shí)例化對象         Test test = new Test()        {              @Override              public void print() {                 System.out.println("匿名內(nèi)部類實(shí)現(xiàn)父類所有的抽象方法");              }          };          test.print();          System.out.println("匿名內(nèi)部類的類名:test.getClass().getName() == " + test.getClass().getName());          System.out.println("父類的類名:Test.class.getName() == " + Test.class.getName());          System.out.println("test.getClass().equals(Test.class) == " + test.getClass().equals(Test.class));          System.out.println("test.getClass().getSuperclass().equals(Test.class) == " + test.getClass().getSuperclass().equals(Test.class));     }      public Inner getInner(final String name, String city) {         return new Inner()         {             private String nameStr = name;             public String getName() {                 return nameStr + ", " + city;             }         };     }     }  運(yùn)行結(jié)果:

Inner, gz匿名內(nèi)部類實(shí)現(xiàn)父類所有的抽象方法!匿名內(nèi)部類的類名:test.getClass().getName() ==  nestedClass.AnonymousNestedClass$1父類的類名:Test.class.getName() == nestedClass.Testtest.getClass().equals(Test.class) == falsetest.getClass().getSuperclass().equals(Test.class) == true


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
在线91av| 国产女主播在线| av免费在线观看网站| 超碰在线97国产| 国产理论片免费观看| 五月天婷婷基地| 69久久久久| 天天草天天爽| 日韩在线天堂| 国自产拍在线网站网址视频| 开心婷婷激情| 国产女主播在线观看| 国产盗摄一区二区| 日本卡一卡2卡3卡4精品卡网站| 四虎久久影院| 国产激情视频一区二区三区| 亚洲网站视频在线观看| 久久精品视频免费看| 男人操女人免费网站| 国产精品蜜臀| 国产在线高清| 欧美精品一区二区三区免费| 91桃色在线| 1区2区3区在线| 免费高清视频日韩| 国产福利资源| 国产婷婷视频在线| 九色成人在线| 免费精品国产自产拍观看| 国产精品9区| xxxx视频在线| 尤物在线网址| 欧美色欧美亚洲另类二区精品| 九九热在线免费视频| 2018中文字幕在线| 国产精品一区在线看| 超碰免费在线观看| www在线视频观看| 亚洲欧美日韩成人网| 国产青青草在线| 国产香蕉视频在线观看| 国产资源在线看| 噜噜噜噜噜在线视频| а√资源新版在线天堂| 亚洲精品成人a| 日本aⅴ写真网站免费| 天天噜天天色| 久久久久久77777| 樱花草在线观看www| 国产变态拳头交视频一区二区| 国产一级二级三级在线观看| 国产小视频免费在线观看| 国产网友自拍电影在线| 国产精品白浆流出视频| 136福利第一导航国产在线| 精品麻豆一区二区三区| h视频在线网站| 国产福利微拍精品一区二区| 国产成人无吗| 国产小视频在线播放| 五月婷婷丁香激情| 国产乱xxⅹxx国语对白| 国产小黄视频| 国产理论电影在线| 丁香综合在线| 国产成人福利| 色综合久久五月天| 国产女呦网站| 亚洲精品天堂在线观看| 四虎免费播放| 毛片在线视频| 国产精品久久久久白浆| 欧美日韩在线中文字幕| 欧美韩日国产| 国产www在线观看| 亚洲精品自拍区在线观看| www.91在线播放| 五月亚洲综合| 亚洲欧美精品中文第三| jizz亚洲| 国产精品久久久久久精| 亚洲激情丁香| 国产福利在线视频| 国产在线看片| 国产黄色网页| 国产裸舞福利在线视频合集 | 97一区二区三区| 狠狠干天天干| 丝袜理论片在线观看| 国产经典三级在线| 黄色电影网站在线观看| gogo在线高清视频| 91精品专区| 国产xxxx做受性欧美88| 天堂中文字幕在线| 国产男女无套在线播放| gogogogo高清视频在线| 精品偷拍激情视频在线观看| 中文字幕不卡免费视频| 国产在线高清| 国内外激情在线| 青草在线视频在线观看| 日韩亚洲一区中文字幕| 九九99九九精彩| 九九久久久2| 欧美午夜电影一区二区三区| 亚洲人av在线| 青青草原av在线| 免费视频二区| 丁香婷婷激情| 国产精品入口麻豆免费看| 久久综合第一页| 开心婷婷激情| 浪潮av一区| 天天av天天爽| 国产网站免费观看| 国产区在线视频| 91中文字幕| eeuss影院在线观看| 青青草免费在线观看| 福利视频在线导航| 国产精品777一区二区| 精品国产免费观看一区| h网址在线观看| 国产在线传媒| 国产色视频网站| 精品卡一卡卡2卡3网站| 在线视频三区| 国产资源在线看| 国产黄色大片在线观看| 天天噜天天色| 国产成人精品综合网站| 本道综合精品| 国产成人精品久久一区二区小说 | 国产特黄在线| 在线免费观看黄色av| 亚洲第一区视频| 九七电影韩国女主播在线观看| 国产精品一区二区资源| 精品国产福利一区二区在线| 黄网址在线播放免费| 中文字幕2020第一页| 超碰在线97国产| 在线āv视频| 国产精品视频一区麻豆| jlzzjlzz欧美大全| 国产精品yjizz视频网一二区| 欧美性猛交xxxx免费看久久| 精品国产一区二区三区不卡在线 | 黄色网址在线免费播放| 精品日韩av| 国产黄色片在线观看| 天天操天天是| 激情综合丁香| www.91av| 午夜在线不卡| www.麻豆av.com| gogo在线高清视频| 亚洲成人av高清| 精品av中文字幕在线毛片| 国产中文在线| 国产免费人人看| 国产免费黄网站| 五月亚洲综合| 国产美女性感在线观看懂色av| 国产一区二区三区四区尤物| 日本免费视频www| 亚洲激情丁香| 亚洲人成影院在线| 亚洲精品久久久成人| 亚洲国产成人综合| 香蕉视频网站在线观看| 日本调教视频在线观看| 日本韩国精品一区二区| 精品国产一区二区三区不卡在线| 国产一二区视频| 精品一区二区三区在线观看l| 国产成人亚洲欧美电影| ·天天天天操| 在线观看午夜av| 麻豆精品永久免费视频| 国产精品㊣新片速递bt| 国产黄色在线看| 夜夜爽夜夜操| 丁香花在线电影小说观看| 国产视频中文字幕| 一本久久精品| 日韩av成人| 香蕉视频网站在线观看| 国产中文字幕网| 国产成+人+亚洲+欧美+综合| 羞羞视频在线免费看| 国产精品一品| 国产免费福利网站| 国产九色在线| 在线天堂av| 国产精品自产拍在线观看2019 | 国产精品美女一区二区视频| 在线亚洲不卡| 天堂中文字幕在线|