JAVA_SE基础——51.内部类

Java内部类详解
本文详细介绍了Java中的内部类概念,包括成员内部类、静态内部类和方法内部类的定义及使用方式。通过具体示例展示了如何创建和访问这些内部类,并解释了它们的优势。

在Java中,允许在一个类的内部定义类,这样的类称作内部类,这个内部类所在的类称作外部类。根据内部类的位置、修饰符和定义的方式可分为成员内部类、静态内部类、方法(局部内部类)内部类。


内部类:一个类定义在另外一个类的内部,那么该类就称作为内部类。

内部类的class文件名: 外部类$内部类.  好处:便于区分该class文件是属于哪个外部类的。




成员内部类


在类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。

成员内部类的访问方式:

方式一:在外部类提供一个方法创建内部类的对象进行访问。code1使用此方式

方式二:在其他类直接创建内部类的对象。code2使用此方式

格式:外部类.内部类  变量名 = new 外部类().new 内部类();


code1

class A{
	int num = 10 ;
	//下面的代码定义了一个成员方法,方法中访问内部类
	public void test(){
		B a = new B() ;
		a.show() ;
	}
	//下面的代码定义了一个成员内部类
	class B{
		public void show(){
			System.out.println("num = "+num) ;
		}
	}
}
class Demo1{

	public static void main(String[] args) {
		A a = new A() ;
		a.test() ;
	}
}
运行结果:

num = 10


code2

class A{
	int num = 10 ;
	
	//下面的代码定义了一个成员内部类
	class B{
		public void show(){
			System.out.println("num = "+num) ;
		}
	}
}
class Demo2{

	public static void main(String[] args) {
		A.B a = new A().new B() ;
		a.show() ;
	}
}
运行结果:

num = 10



内部类的好处:内部类可以直接访问外部类的所有成员。





静态内部类

可以使用static关键字来修饰一个成员内部类,该内部类被称作静态内部类,它可以在不创建外部类对象的情况下被实例化(因为静态内部类随着外部类的加载而加载)。


静态内部类,在其他类创建 的格式:

外部类.内部类  变量名 = new 外部类.内部类();  code3使用此方式

code3

class A{
	//定义静态成员变量
	static int num = 10 ;
	
	//下面的代码定义了一个静态内部类
	static class B{	
		public void show(){
			System.out.println("num = "+num) ;
		}
	}
}
class Demo3{

	public static void main(String[] args) {
		A.B a = new A.B() ;
		a.show() ;
	}
}

运行结果:

num = 10


P.S.

在静态内部类中只能访问外部类的静态方法,如果将外部类的静态成员num的static关键字去掉,将会报错

在静态内部类中可以定义静态的成员,而在非静态的内部类中不允许定义静态的成员。(因为内部类中的静态成员随着内部类的加载而加载,但是这样违背了当初sun公司定义的:静态的成员数据是不需要对象存在才能访问。





方法内部类(局部内部类)

方法内部类是指在成员方法中定义的类,它只能在当前方法中被使用。

局部内部类: 在一个类 的方法内部定义另外一个类,那么另外一个类就称作为局部内部类。
局部内部类要注意的细节:

局部内部类可以访问外部类的成员变量、code4实现了此句话


如果局部 内部类访问了一个局部变量,那么该局部变量必须使用final修饰(java1.8以下 局部变量没有用final修饰会报错)、  (我的java1.8  试验过了,没有final也不会报错,估计优化了吧。。微笑



code4

class A{
	int num = 10 ;
	
	//下面的代码定义了一个成员内部类
	public void test(){
		
		class B{
			public void show(){
				System.out.println("num = "+num) ;
			}
		}
	//由于B类是方法内部类,因此只能在方法中创建该类的实例对象并调用show()方法、
		B b = new B() ;
		b.show() ; 
	}

}
class Demo4{

	public static void main(String[] args) {
		A a = new A() ;
		a.test() ;
	}
}
运行结果:

num = 10


在A类的test()方法中定义了一个内部类B ,由于B类是方法的内部类,因此程序只能在方法中创建该类的实例对象并调用show()方法。 从结果上看,方法内部类可以访问外部类的成员变量。

看完本章节觉得对自己都帮助的,写个评论顶顶大笑

[root@yfw ~]# cd /opt/openfire/enterprise/spark [root@yfw spark]# ls -l /opt/openfire/enterprise/spark/Spark/ 总用量 68 drwxr-xr-x 2 root root 4096 4月 1 2023 bin drwxr-xr-x 4 root root 4096 4月 1 2023 documentation drwxr-xr-x 4 root root 4096 4月 1 2023 lib drwxr-xr-x 2 root root 4096 10月 30 14:07 logs drwxr-xr-x 2 root root 4096 4月 1 2023 plugins drwxr-xr-x 3 root root 4096 4月 1 2023 resources drwxr-xr-x 2 root root 4096 10月 30 14:04 security -rwxr-xr-x 1 root root 15294 4月 1 2023 Spark -rw-r--r-- 1 root root 20 10月 30 14:04 spark.log -rwxr-xr-x 1 root root 14336 4月 1 2023 starter drwxr-xr-x 3 root root 4096 4月 1 2023 xtra [root@yfw spark]# find /opt/openfire/enterprise/spark -name "*.tar.gz" -o -name "*.zip" /opt/openfire/enterprise/spark/Spark/xtra/emoticons/sparkEmoticonSet.zip /opt/openfire/enterprise/spark/Spark/xtra/emoticons/GTalk.AdiumEmoticonset.zip /opt/openfire/enterprise/spark/Spark/xtra/emoticons/Default.adiumemoticonset.zip /opt/openfire/enterprise/spark/Spark/xtra/emoticons/POPO.adiumemoticonset.zip /opt/openfire/enterprise/spark/spark_3_0_2.tar.gz [root@yfw spark]# cd /opt/openfire/enterprise/spark [root@yfw spark]# mv Spark Spark.bak [root@yfw spark]# mkdir Spark [root@yfw spark]# tar -tzf spark_3_0_2.tar.gz | head -10 Spark/ Spark/.install4j/ Spark/.install4j/MessagesDefault Spark/.install4j/build.uuid Spark/.install4j/i4j_extf_0_3wlfya.utf8 Spark/.install4j/i4j_extf_10_3wlfya.utf8 Spark/.install4j/i4j_extf_11_3wlfya.utf8 Spark/.install4j/i4j_extf_12_3wlfya.utf8 Spark/.install4j/i4j_extf_13_3wlfya.utf8 Spark/.install4j/i4j_extf_14_3wlfya.utf8 [root@yfw spark]# tar -xzf spark_3_0_2.tar.gz -C Spark --strip-components=1 [root@yfw spark]# ls -l /opt/openfire/enterprise/spark/Spark/ 总用量 56 drwxr-xr-x 2 root root 4096 4月 1 2023 bin drwxr-xr-x 4 root root 4096 4月 1 2023 documentation drwxr-xr-x 4 root root 4096 4月 1 2023 lib drwxr-xr-x 2 root root 4096 4月 1 2023 plugins drwxr-xr-x 3 root root 4096 4月 1 2023 resources -rwxr-xr-x 1 root root 15294 4月 1 2023 Spark -rwxr-xr-x 1 root root 14336 4月 1 2023 starter drwxr-xr-x 3 root root 4096 4月 1 2023 xtra 损坏或格式不兼容" tar -tzf spark_3_0_2.tar.gz > /dev/null && echo "✅ 压缩包可正常读取" || echo "❌ 压缩包损 ✅ 压缩包可正常读取 [root@yfw spark]# ls -lh /opt/openfire/enterprise/spark/spark_3_0_2.tar.gz -rw-r--r-- 1 openfire openfire 59M 10月 28 15:11 /opt/openfire/enterprise/spark/spark_3_0_2.tar.gz [root@yfw spark]# tar -tzf spark_3_0_2.tar.gz | grep -E '/(\.install4j|Spark\.jar)' Spark/.install4j/ Spark/.install4j/MessagesDefault Spark/.install4j/build.uuid Spark/.install4j/i4j_extf_0_3wlfya.utf8 Spark/.install4j/i4j_extf_10_3wlfya.utf8 Spark/.install4j/i4j_extf_11_3wlfya.utf8 Spark/.install4j/i4j_extf_12_3wlfya.utf8 Spark/.install4j/i4j_extf_13_3wlfya.utf8 Spark/.install4j/i4j_extf_14_3wlfya.utf8 Spark/.install4j/i4j_extf_15_3wlfya.utf8 Spark/.install4j/i4j_extf_16_3wlfya.utf8 Spark/.install4j/i4j_extf_17_3wlfya.utf8 Spark/.install4j/i4j_extf_18_3wlfya_bndrky.png Spark/.install4j/i4j_extf_19_3wlfya_y3ga2s.png Spark/.install4j/i4j_extf_1_3wlfya.utf8 Spark/.install4j/i4j_extf_20_3wlfya_18gg8kx.png Spark/.install4j/i4j_extf_20_3wlfya_18gg8kx@2x.png Spark/.install4j/i4j_extf_20_3wlfya_18gg8kx@2x_dark.png Spark/.install4j/i4j_extf_20_3wlfya_18gg8kx_dark.png Spark/.install4j/i4j_extf_21_3wlfya_1mofcyi.png Spark/.install4j/i4j_extf_2_3wlfya.utf8 Spark/.install4j/i4j_extf_3_3wlfya.utf8 Spark/.install4j/i4j_extf_4_3wlfya.utf8 Spark/.install4j/i4j_extf_5_3wlfya.utf8 Spark/.install4j/i4j_extf_6_3wlfya.utf8 Spark/.install4j/i4j_extf_7_3wlfya.utf8 Spark/.install4j/i4j_extf_8_3wlfya.utf8 Spark/.install4j/i4j_extf_9_3wlfya.utf8 Spark/.install4j/i4jempty.ttf Spark/.install4j/i4jparams.conf Spark/.install4j/i4jruntime.jar Spark/.install4j/launcher4042238b.jar Spark/.install4j/launcher5cd2e029.jar Spark/.install4j/libi4jinst.dylib Spark/.install4j/libi4jinst2.dylib [root@yfw spark]# cd /opt/openfire/enterprise/spark [root@yfw spark]# [root@yfw spark]# # 备份可疑包 [root@yfw spark]# mv spark_3_0_2.tar.gz spark_3_0_2.tar.gz.bad.bak [root@yfw spark]# [root@yfw spark]# # 下载真实官方构建包(来自 Ignite Realtime GitHub 发布页) [root@yfw spark]# wget https://github.com/igniterealtime/Spark/releases/download/v3.0.2/spark_3_0_2.tar.gz --2025-10-30 14:28:50-- https://github.com/igniterealtime/Spark/releases/download/v3.0.2/spark_3_0_2.tar.gz 正在解析主机 github.com (github.com)... 20.205.243.166 正在连接 github.com (github.com)|20.205.243.166|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 302 Found 位置:https://release-assets.githubusercontent.com/github-production-release-asset/14648981/c8497e28-ebd4-4c21-8f1f-3a4ceee88ba5?sp=r&sv=2018-11-09&sr=b&spr=https&se=2025-10-30T07%3A15%3A44Z&rscd=attachment%3B+filename%3Dspark_3_0_2.tar.gz&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2025-10-30T06%3A15%3A34Z&ske=2025-10-30T07%3A15%3A44Z&sks=b&skv=2018-11-09&sig=F8MgFLG072dmmMIHGlJV6JjEuG%2FYadEJA1XXmbBVrCc%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc2MTgwNzUzMSwibmJmIjoxNzYxODA1NzMxLCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.1co59rcGqrSLoX7vveJUOl2Mon4DllIOm3Ef-xUaU7s&response-content-disposition=attachment%3B%20filename%3Dspark_3_0_2.tar.gz&response-content-type=application%2Foctet-stream [跟随至新的 URL] --2025-10-30 14:28:51-- https://release-assets.githubusercontent.com/github-production-release-asset/14648981/c8497e28-ebd4-4c21-8f1f-3a4ceee88ba5?sp=r&sv=2018-11-09&sr=b&spr=https&se=2025-10-30T07%3A15%3A44Z&rscd=attachment%3B+filename%3Dspark_3_0_2.tar.gz&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2025-10-30T06%3A15%3A34Z&ske=2025-10-30T07%3A15%3A44Z&sks=b&skv=2018-11-09&sig=F8MgFLG072dmmMIHGlJV6JjEuG%2FYadEJA1XXmbBVrCc%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc2MTgwNzUzMSwibmJmIjoxNzYxODA1NzMxLCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.1co59rcGqrSLoX7vveJUOl2Mon4DllIOm3Ef-xUaU7s&response-content-disposition=attachment%3B%20filename%3Dspark_3_0_2.tar.gz&response-content-type=application%2Foctet-stream 正在解析主机 release-assets.githubusercontent.com (release-assets.githubusercontent.com)... 185.199.109.133, 185.199.111.133, 185.199.108.133, ... 正在连接 release-assets.githubusercontent.com (release-assets.githubusercontent.com)|185.199.109.133|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:61236078 (58M) [application/octet-stream] 正在保存至: “spark_3_0_2.tar.gz” spark_3_0_2.tar.gz 100%[======================================>] 58.40M 544KB/s 用时 58s 2025-10-30 14:29:49 (1.01 MB/s) - 已保存 “spark_3_0_2.tar.gz” [61236078/61236078]) [root@yfw spark]# ls -lh spark_3_0_2.tar.gz -rw-r--r-- 1 root root 59M 4月 1 2023 spark_3_0_2.tar.gz [root@yfw spark]#
最新发布
10-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值