最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

新手初學(xué)Java的內(nèi)部類

 更新時間:2021年07月07日 16:25:26   作者:貪玩的阿柒  
這篇文章主要介紹了java內(nèi)部類原理與用法,結(jié)合實例形式分析了Java內(nèi)部類的概念、原理、分類及相關(guān)使用技巧,需要的朋友可以參考下,希望能給你帶來幫助

Java的內(nèi)部類

概念:

  • 內(nèi)部類就是在一個類的內(nèi)部定義一個類,比如,A類中定義一個B類,那么B類相對于A類來說就是稱為內(nèi)部類,而A類相對于B類來說就是外部類。
  • 成員內(nèi)部類
  • 靜態(tài)內(nèi)部類
  • 局部內(nèi)部類
  • 匿名內(nèi)部類

特點(diǎn):

  • 內(nèi)部類編譯之后可以生成獨(dú)立的字節(jié)碼文件。
  • 內(nèi)部類可以直接訪問外部類的私有成員,而不破壞封裝。
  • 內(nèi)部類可為外部類提供必要的內(nèi)部功能組件。
  • 外部類要訪問內(nèi)部類的成員,必須要建立內(nèi)部類的對象

成員內(nèi)部類

在內(nèi)的內(nèi)部定義,與實例變量、實例方法同級別的類。

成員內(nèi)部類中不能包含靜態(tài)成員,但可以包含靜態(tài)常量。

package com.cnblogs;
//這個類用于實現(xiàn)
public class Application {
	public static void main(String[] args) {
		Outer outer = new Outer();//實例化  外部類
		Outer.Inner inner = outer.new Inner();//實例化  內(nèi)部類
        //一步到位實例化內(nèi)部類
        //Inner inner = new Outer().new Inner();
		//外部類的屬性
		System.out.println(outer.age);//21
		//外部類方法
		outer.out1();//這是外部類的方法
		//內(nèi)部類屬性
		System.out.println(inner.in);//內(nèi)部類屬性
		//內(nèi)部類方法
		inner.inner();//這是內(nèi)部類方法
		//內(nèi)部類獲取外部類的私有屬性
		inner.getName();//獲取到了外部類的私有屬性:柒
		//內(nèi)部類獲取外部類的私有方法
		inner.getMethod();//這是外部類的私有方法
	}
}
package com.cnblogs;
/*
 * 本類用于測試內(nèi)部類可以直接訪問外部類的私有成員
 */
public class Outer {
	//外部類的私有屬性
	private String name = "柒";
	//外部類的屬性
	public int age = 21;
	//外部類的私有方法
	private void out() {
		System.out.println("這是外部類的私有方法");
	}
	//外部類的方法
	public void out1() {
		System.out.println("這是外部類的方法");
	}
	 class Inner{
		//內(nèi)部類屬性
		public String in = "內(nèi)部類屬性";
		//內(nèi)部類方法
		public void inner() {
			System.out.println("這是內(nèi)部類方法");
		} 
		//獲取外部類的私有屬性
		public void getName() {
			System.out.println("獲取到了外部類的私有屬性:" + name);
		}
		//獲取外部類的私有方法
		public void getMethod() {
			out();
		}
	}
}

注意:當(dāng)外部類、內(nèi)部類存在重名屬性時,會優(yōu)先訪問內(nèi)部類屬性

package com.cnblogs;
import com.cnblogs.Outer.Inner;
/*
 * 本類用于實現(xiàn)
 */
public class Application {
	public static void main(String[] args) {
		Inner inner = new Outer().new Inner();
		inner.show();
	}
}
package com.cnblogs;
/*
 * 本類用于測試內(nèi)部類和外部類的同名屬性
 */
public class Outer {
	//外部類屬性
	private String name = "張三";
	class Inner{
		//內(nèi)部類屬性 
		private  String name = "柒";
		//內(nèi)部類方法,用于打印
		public void show() {
			//這里打印出的是內(nèi)部類的屬性:柒
			System.out.println(name);
			//這是打印外部類的屬性:張三
			System.out.println(Outer.this.name);
		}
	}
}

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

不依賴外部類對象,可直接創(chuàng)建或通過類名訪問,可聲明靜態(tài)成員

package com.cnblogs;
import com.cnblogs.Outer2.Inner;
/*
 * 本類用于實現(xiàn)
 */
public class Application {
	public static void main(String[] args) {
		//直接創(chuàng)建內(nèi)部類對象
		Inner inner = new Outer2.Inner();
		//調(diào)用方法
		inner.show();
	}
}
package com.cnblogs;
/*
 * 本類用于測速靜態(tài)內(nèi)部類
 */
//外部類
public class Outer2 {
	private String name = "柒";
	private int age = 21;
	//靜態(tài)內(nèi)部類 用法和外部類一樣
	static class Inner{
		private String in = "靜態(tài)內(nèi)部類屬性";
		private int inner = 99;
		//靜態(tài)成員
		private static int inners = 999;
		//調(diào)用方法
		public void show() {
			//調(diào)用外部類屬性,先創(chuàng)建外部類對象
			Outer2 outer = new Outer2();
			//再調(diào)用外部類屬性
			System.out.println(outer.name);//柒
			System.out.println(outer.age);//21
			//調(diào)用靜態(tài)內(nèi)部類屬性
			System.out.println(in);//靜態(tài)內(nèi)部類屬性
			System.out.println(inner);//99
			//調(diào)用靜態(tài)內(nèi)部類的靜態(tài)成員
			System.out.println(inners);//999
			System.out.println(Inner.inners);//999
		}
	}
}

局部內(nèi)部類

定義在外部類方法中,作用范圍和創(chuàng)建對象范圍僅限于當(dāng)前方法。

局部內(nèi)部類訪問外部類當(dāng)前方法中的局部變量時,因無法保障變量的生命周期與自身相同,變量必須修飾為final。

限制類的使用范圍。

package com.cnblogs;
//這個類用于實現(xiàn)
public class Application {
	public static void main(String[] args) {
		Outer3 outer = new Outer3();
		outer.show();
	}
}
package com.cnblogs;
/*
 * 本類用于測試局部內(nèi)部類
 */
//外部類
public class Outer3 {
	private String name = "柒";
	private int age = 21;
	public void show() {
		//定義局部變量
		String in = "蘇州";
		//局部內(nèi)部類:不能加任何訪問修飾符
		class Inner{
			//局部內(nèi)部類的屬性
			private String phone = "10086";
			//局部內(nèi)部類方法
			public void show2() {
				//訪問外部類屬性
				System.out.println(name);//Outer3.this.name
				System.out.println(age);
				//訪問內(nèi)部類屬性
				System.out.println(phone);//this.phone
				//訪問局部變量:jdk1.7要求 變量必須是常量final,jdk1.8自動添加final
				System.out.println(in);
			}
		}
		//創(chuàng)建內(nèi)部類對象
		Inner inner = new Inner();
		inner.show2();
	}
}

匿名內(nèi)部類

沒有類名的局部內(nèi)部類(一切特征都與內(nèi)部類相同)。

必須繼承一個父類或者實現(xiàn)一個接口。

定義類、實現(xiàn)類、創(chuàng)建對象的語法合并,只能創(chuàng)建一個該類的對象。

  • 優(yōu)點(diǎn):減少代碼量
  • 缺點(diǎn):可讀性較差
package com.cnblogs;
/*
 * 本類用于實現(xiàn)局部內(nèi)部類
 */
public class TestUsb {
	public static void main(String[] args) {
		//創(chuàng)建接口類型的變量
//		Usb usb = new Mouse();
//		usb.service();
		//局部內(nèi)部類
//		class Fan implements Usb{
//
//			@Override
//			public void service() {
//				System.out.println("鏈接成功,可以使用?。。。?);
//				
//			}
//			
//		}
		//使用局部內(nèi)部類創(chuàng)建對象
//		Usb usb = new Fan();
//		usb.service();
		//使用匿名內(nèi)部類優(yōu)化(相當(dāng)于創(chuàng)建了一個局部內(nèi)部類)
		Usb usb = new Usb() {
			@Override
			public void service() {
				System.out.println("鏈接成功,可以使用!?。?!");
			}
		};
		usb.service();
	}
}
package com.cnblogs;
//接口
public interface Usb {
	//服務(wù)
	void service();
}
package com.cnblogs;
//實現(xiàn)接口
public class Mouse implements Usb{
	@Override
	public void service() {
		System.out.println("鏈接成功,可以使用?。。。?!");
	}
}

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望你能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • SpringBoot實現(xiàn)人臉識別等多種登錄方式

    SpringBoot實現(xiàn)人臉識別等多種登錄方式

    本文主要介紹了SpringBoot實現(xiàn)人臉識別等多種登錄方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Java日期時間使用方法匯總

    Java日期時間使用方法匯總

    這篇文章主要針對Java日期時間使用方法進(jìn)行匯總,感興趣的朋友可以參考一下
    2016-03-03
  • log4j2動態(tài)修改日志級別及拓展性使用詳解

    log4j2動態(tài)修改日志級別及拓展性使用詳解

    這篇文章主要介紹了log4j2動態(tài)修改日志級別及拓展性使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • SpringBoot結(jié)合JSR303對前端數(shù)據(jù)進(jìn)行校驗的示例代碼

    SpringBoot結(jié)合JSR303對前端數(shù)據(jù)進(jìn)行校驗的示例代碼

    這篇文章主要介紹了SpringBoot結(jié)合JSR303對前端數(shù)據(jù)進(jìn)行校驗的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java中Scanner的常用方法總結(jié)(一次學(xué)懂)

    Java中Scanner的常用方法總結(jié)(一次學(xué)懂)

    這篇文章主要給大家介紹了關(guān)于Java中Scanner常用方法的相關(guān)資料,Java中的Scanner是一個用于讀取用戶輸入的類,它可以讀取各種類型的數(shù)據(jù),包括整數(shù)、浮點(diǎn)數(shù)、字符串等等,需要的朋友可以參考下
    2023-11-11
  • Mybatis-plus設(shè)置某個字段值為null的方法總結(jié)

    Mybatis-plus設(shè)置某個字段值為null的方法總結(jié)

    mybatis-plus以下簡稱mp,目前應(yīng)該也算是主流的一款數(shù)據(jù)訪問層應(yīng)用框架,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus設(shè)置某個字段值為null的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • java獲取linux服務(wù)器上的IP操作

    java獲取linux服務(wù)器上的IP操作

    這篇文章主要介紹了java獲取linux服務(wù)器上的IP操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • SpringBoot沒有讀取到application.yml問題及解決

    SpringBoot沒有讀取到application.yml問題及解決

    這篇文章主要介紹了SpringBoot沒有讀取到application.yml問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot Mybatis動態(tài)數(shù)據(jù)源切換方案實現(xiàn)過程

    SpringBoot Mybatis動態(tài)數(shù)據(jù)源切換方案實現(xiàn)過程

    這篇文章主要介紹了SpringBoot+Mybatis實現(xiàn)動態(tài)數(shù)據(jù)源切換方案過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • java協(xié)程框架quasar和kotlin中的協(xié)程對比分析

    java協(xié)程框架quasar和kotlin中的協(xié)程對比分析

    這篇文章主要為大家介紹了java協(xié)程框架quasar和kotlin兩個協(xié)程對比分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多基本
    2022-02-02

最新評論

册亨县| 泸定县| 喀什市| 定陶县| 延寿县| 松潘县| 永登县| 兴化市| 尼勒克县| 咸宁市| 五大连池市| 林西县| 建湖县| 郸城县| 淄博市| 绥芬河市| 井陉县| 日土县| 县级市| 五原县| 紫金县| 福贡县| 岑巩县| 勐海县| 开平市| 英吉沙县| 运城市| 宁乡县| 班玛县| 长岛县| 唐河县| 普洱| 察隅县| 桑植县| 南乐县| 安徽省| 南投市| 富民县| 武宁县| 文山县| 稷山县|