总结:内部类

内部类包含:实例内部类(成员内部类)、静态内部类、本地内部类、匿名内部类 阅读详情
内部类可以为四种
⒈ 静态内部类
⒉ 成员内部类
⒊ 局部内部类
⒋ 匿名内部类
几种内部类的共性:
A、内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。
B、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。

2、成员内部类:形式如下
class Outer {
class Inner{}
}
编译上述代码会产生两个文件:Outer.class和Outer$Inner.class。
成员内部类内不允许有任何静态声明!下面代码不能通过编译。
class Inner{
static int a = 10;
}
能够访问成员内部类的唯一途径就是通过外部类的对象!

A、从外部类的非静态方法中实例化内部类对象。

class Outer {
private int i = 10;
public void makeInner(){
Inner in = new Inner();
in.seeOuter();
}
class Inner{
public void seeOuter(){
System.out.print(i);
}
}
}

表面上,我们并没有创建外部类的对象就实例化了内部类对象,和上面的话矛盾。事实上,如果不创建外部类对象也就不可能调用makeInner()方法,所以到头来还是要创建外部类对象的。
你可能试图把makeInner()方法修饰为静态方法,即static public void makeInner()。这样不创建外部类就可以实例化外部类了!但是在一个静态方法里能访问非静态成员和方法吗?显然不能。它没有this引用。没能跳出那条规则!但是如果在这个静态方法中实例化一个外部类对象,再用这个对象实例化外部类呢?完全可以!也就是下一条的内容。

B、从外部类的静态方法中实例化内部类对象。
class Outer {
private int i = 10;
class Inner{
public void seeOuter(){
System.out.print(i);
}
}
public static void main(String[] args) {
Outer out = new Outer();
Outer.Inner in = out.new Inner();
//Outer.Inner in = new Outer().new Inner();
in.seeOuter();
}
}

被注释掉的那行是它上面两行的合并形式,一条简洁的语句。
对比一下:在外部类的非静态方法中实例化内部类对象是普通的new方式:Inner in = new Inner();
在外部类的静态方法中实例化内部类对象,必须先创建外部类对象:Outer.Inner in = new Outer().new Inner();

C、内部类的this引用。
普通的类可以用this引用当前的对象,内部类也是如此。但是假若内部类想引用外部类当前的对象呢?用“外部类名”.this;的形式,如下例的Outer.this。
class Outer {
class Inner{
public void seeOuter(){
System.out.println(this);
System.out.println(Outer.this);
}
}
}

D、成员内部类的修饰符。
对于普通的类,可用的修饰符有final、abstract、strictfp、public和默认的包访问。
但是成员内部类更像一个成员变量和方法。
可用的修饰符有:final、abstract、public、private、protected、strictfp和static。
一旦用static修饰内部类,它就变成静态内部类了。

3、方法内部类。
顾名思义,把类放在方法内。
class Outer {
public void doSomething(){
class Inner{
public void seeOuter(){
}
}
}
}
A、方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。

B、方法内部类对象不能使用该内部类所在方法的非final局部变量。
因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。
下面是完整的例子:
class Outer {
public void doSomething(){
final int a =10;
class Inner{
public void seeOuter(){
System.out.println(a);
}
}
Inner in = new Inner();
in.seeOuter();
}
public static void main(String[] args) {
Outer out = new Outer();
out.doSomething();
}
}

C、方法内部类的修饰符。
与成员内部类不同,方法内部类更像一个局部变量。
可以用于修饰方法内部类的只有final和abstract。

D、静态方法内的方法内部类。
静态方法是没有this引用的,因此在静态方法内的内部类遭受同样的待遇,即:只能访问外部类的静态成员。

4、匿名内部类。
顾名思义,没有名字的内部类。表面上看起来它们似乎有名字,实际那不是它们的名字。

A、继承式的匿名内部类。
class Car {
public void drive(){
System.out.println("Driving a car!");
}
}

class Test{
public static void main(String[] args) {
Car car = new Car(){
public void drive(){
System.out.println("Driving another car!");
}
};
car.drive();
}
}
结果输出了:Driving another car! Car引用变量不是引用Car对象,而是Car匿名子类的对象。
建立匿名内部类的关键点是重写父类的一个或多个方法。再强调一下,是重写父类的方法,而不是创建新的方法。因为用父类的引用不可能调用父类本身没有的方法!创建新的方法是多余的。简言之,参考多态。

B、接口式的匿名内部类。
interface Vehicle {
public void drive();
}

class Test{
public static void main(String[] args) {
Vehicle v = new Vehicle(){
public void drive(){
System.out.println("Driving a car!");
}
};
v.drive();
}
}
上面的代码很怪,好像是在实例化一个接口。事实并非如此,接口式的匿名内部类是实现了一个接口的匿名类。而且只能实现一个接口。

C、参数式的匿名内部类。
class Bar{
void doStuff(Foo f){}
}

interface Foo{
void foo();
}

class Test{
static void go(){
Bar b = new Bar();
b.doStuff(new Foo(){
public void foo(){
System.out.println("foofy");
}
});
}
}

5、静态嵌套类。
从技术上讲,静态嵌套类不属于内部类。因为内部类与外部类共享一种特殊关系,更确切地说是对实例的共享关系。而静态嵌套类则没有上述关系。它只是位置在另一个类的内部,因此也被称为顶级嵌套类。
静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它。静态嵌套类不能访问外部类的成员和方法。
class Outer{
static class Inner{}
}
class Test {
public static void main(String[] args){
Outer.Inner n = new Outer.Inner();
}
}
面向对象之10: 静态内部类、实例内部类、局部内部类 、匿名内部类 的总结 目录 静态内部类的特点 (重点! 使用较多!): 静态内部类中可以有的成分及访问外部类的格式: 实例内部类的特点 (重点,使用较多): 实例内部类可以有的成分 及 访问外部类的格式: 局部内部类的特点 ( 重点,使用较少。 ): 局部内部类可以有的成分 及 访问外部类的格式 及 局部内部类在类中可以出现的位置: 匿名内部类的特点总结(重点 !使用最多!): 接口的匿名内部类 及 访问父接口、外部类的格式(重点,使用最多!)。 接口的匿名内部类 编译器编译机制 解读理解: Outer. 阅读详情

相关推荐

【GPIO模拟串口通信协议】

由于这段时间搞了个安卓相关的项目,需要和安卓进行Uart通信。但是选用的芯片并没有自带uart功能,所以在充分评估项目后,考虑波特率不高的情况下,决定使用GPIO去模拟串口通信协议了。

学海无涯苦作舟 2638

Java内部类详解(含:成员内部类、局部内部类、匿名内部类、静态内部类)

Java内部类详解(含:成员内部类、局部内部类、匿名内部类、静态内部类)

leaf__yang的博客 2万+

晶圆表面缺陷检测现状概述

凹坑,凸起,尖角,沟槽),使用光束对晶圆进行照射,收集反射光和散射光信息进行缺陷判断,进一步可分为无图案晶圆表面检测和宏观缺陷检测设备。KLA使用SR-DUV光,检测精度在10nm以下。扫描电子显微(电子束和晶圆表面产生二次电子,X射线等)获取高分辨率的图像,然后用图像处理表面缺陷(凹坑,凸起,尖角,沟槽等)表面容貌和材料信息,分辨率可达5-10nm。晶圆表面缺陷检测设备主要检测晶圆外观呈现出来的缺陷,损伤、毛刺等缺陷,主要设备供应商KLA,AMAT,日立等,其中KLA在晶圆表面检测设备占有市场52%左右。

qq_36786800的博客 1万+

Java-内部类:成员内部类、局部内部类、匿名内部类、静态内部类

本文介绍了Java中内部类:成员内部类、局部内部类、匿名内部类、静态内部类,从5W2H以及它们的区别进行了描述

向诸位大佬虚心学习 1766

LTC3783 LED驱动控制器设计与效率优化详解

开关电源控制器是现代LED照明的核心器件,通过电流模式控制实现高效能量转换。其核心原理是通过采样电阻检测负载电流,配合误差放大器形成闭环调节,在汽车电子、显示背光等场景中确保±3%的电流精度。LTC3783作为典型代表,集成升压/降压-升压多拓扑支持,配合PWM调光技术可实现3000:1的无色偏调光范围。在工程实践中,需重点考量功率电感选型、MOSFET开关损耗与热管理设计,例如在38W功率方案中采用10μH/5A电感和4.5mΩ MOSFET可达成95%效率。该方案特别适用于需要应对9-36V宽输入电压波

weixin_36231030的博客 397

【Mac+CLion+STM32+JLink】从零到一:在macOS上构建高效STM32开发与调试工作流

本文详细介绍了在macOS上使用CLion、STM32CubeMX和JLink搭建高效STM32开发与调试工作流的完整指南。从环境准备、CLion深度配置到STM32CubeMX工程实战,再到JLink烧录避坑和串口调试技巧,帮助开发者快速掌握Mac平台下的嵌入式开发全流程。

weixin_28278377的博客 254

Java中的内部类:成员内部类、局部内部类、匿名内部类、静态内部类

参考:https://www.cnblogs.com/dolphin0520/p/3811445.html 1.成员内部类 创建 创建成员内部类对象的一般形式为: 外部类类名.内部类类名 xxx = 外部类对象名.new 内部类类名() 位置 成员内部类是最普通的内部类,它定义在一个类的内部 结构 可以定义非静态属性和方法。 不可以定义static修饰的属性和方法。 但可以定义static final修饰的编译期变量。 首先要先知道sttaic final修饰的变量叫做常量,常量分为编译期常量和非编译期

乾坤未定,你我皆是黑马 260

Jenkins+docker 微服务实现自动化部署安装和部署过程

本文详细介绍了如何使用Docker部署Jenkins自动化服务器。主要内容包括:1)拉取Jenkins官方或BlueOcean镜像;2)创建容器并配置端口映射、数据卷挂载;3)设置防火墙规则;4)配置清华大学镜像加速;5)安装必要插件;6)SSH密钥配置;7)构建触发器设置;8)编写自动化构建脚本。通过Docker部署Jenkins可以简化安装流程,确保环境一致性,并利用容器特性实现快速启动和管理。文章提供了完整的配置步骤和注意事项,帮助用户快速搭建CI/CD环境。

qq_33665793的博客 1687

【内部类:成员内部类,静态内部类,局部内部类详解】

成员内部类是定义在另一个类(称为外部类)内部的类,属于外部类的成员(类似成员变量或成员方法),可以访问外部类的所有成员(包括私有成员),但自身需要依赖外部类对象才能创建实例。若内部类与外部类有同名成员(属性或方法),内部类中默认访问自身成员,如需访问外部类成员,需用 外部类名.this.成员 表示。局部内部类是定义在方法内部(或代码块中)的类,作用范围仅限于当前方法,是 “局部” 的类。成员内部类依赖外部类对象存在,必须先创建外部类实例,再通过外部类实例创建内部类实例。成员内部类的基本定义。

本人大一,励志后端开发,为了更好的加深记忆并且日后复习方便,此博客是我学习成长记录,与大家分享所学,感谢大佬批评指正 894

先进封装基础知识

想象一下,芯片就像是电脑或手机的大脑,但它非常脆弱,需要被保护起来。芯片封装就是给芯片穿上一件“保护衣”,这件“保护衣”不仅可以保护芯片,还能帮助芯片与外部世界进行沟通。

阿拉伯梳子的专栏 1142

深度学习-176-知识图谱技术之langchain与neo4j的嵌入向量Neo4jVector

使用Neo4jVector将输入的文档向量化,并创建向量索引,然后进行语义检索。

qq_20466211的博客 440

【Java】(十五)Java四种内部类:成员内部类、静态内部类、局部内部类、匿名内部类

四种内部类中,不同种类属性的使用方法。

一亿少女的梦 519

10年上位机开发踩过的20个坑:C#通信/线程/UI适配避坑指南

通信层:所有通信操作异步化、异常全覆盖,加断线重连+心跳检测,多设备隔离资源;线程层:UI更新必做跨线程判断,共享数据加锁,线程池限流,异常不静默;UI层:适配高分屏/DPI,用布局容器替代固定坐标,多屏场景绑定主屏幕。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 903

【java】内部类:成员内部类,局部内部类,静态内部类,匿名内部类

【内部类】: 内部类就是在其他类内部定义的子类 内部类有4种形式: 1、成员内部类 2、局部内部类 3、静态内部类 4、匿名内部类 【成员内部类】: 成员内部类和成员变量一样,属于类的全局成员。 一般格式: public class Sample{ public int id; //成员变量 class Inner{ ...

Wweakness的博客 326

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

内部类的介绍:成员内部类、静态内部类

什么是内部类?? 概念:在一个类的内部再定义一个完整的类 提问:为什么要把一个类定义在一个类的内部呢? 比如一个类是Body类,一个类是head类,name我们把head类定义在Body类里面,就是一个包含的关系,是没有问题的。 另外一个类 就会生成一个class文件,那么内部类会不会生成呢 比如一个demo1类是这么写的 查看bin文件:内部类也会生成了class文件的 内部类的特点: 1、编译之后可生成独立的字节码文件 2、内部类可直接访问外部类的私...

awodwde的博客 324

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java内部类总结 问题:内部类、静态内部类区别、使用场景?

问题:内部类、静态内部类区别、使用场景? 1.静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。 2.静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员(方法,属性)。 3.实例化方式不同: (1)实例化成员内部类“” 通过外部类对象创建 OutClassTest oc1 = new OutClassTest(); OutClassT...

BIGBAI的博客 1764

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java013:内部类

一,内部类: 内部类就是一个类中又出现了一个类。 学习内部类,主要是学习它如何实例化,如何访问他外部类的属性和方法 class Person{ class Teacher{ //这就是个内部类 } } 1,内部类: 每一个内部类都有一个指向它外部对象的引用 javap是反编译,这代表反编译一个内部类 2,如何在外部类之外实例化内部类? ...

weixin_44699728的博客 2003

Java中的内部类:实例内部类,静态内部类,局部内部类,匿名内部类(四类详细讲解版)

Java内部类是定义在另一个类或方法内部的类,分为四种类型:静态内部类、实例内部类、局部内部类和匿名内部类。 静态内部类:使用static修饰,无需外部类实例即可创建对象,但只能访问外部类的静态成员。 实例内部类:未使用static修饰,必须先创建外部类对象才能实例化,能访问外部类的所有成员(包括私有)。 局部内部类:定义在方法或代码块内,仅能在定义位置使用,作用范围有限。 匿名内部类:无类名,直接实例化并重写方法,适用于一次性使用场景。 内部类编译后生成独立字节码文件,增强了代码封装性,但需注意访问权限和

2301_77311065的博客 613

Java内部类:你真得了解方法内部类吗?

文章目录Java内部类:你真得了解方法内部类吗?普通内部类方法内部类匿名内部类静态内部类参考Thinking in Java Java内部类:你真得了解方法内部类吗? java内部类,相信很多人都使用过内部类,新建线程使用的匿名内部类,但是有很多人对内部类的一些概念处于模糊阶段,比如为什么方法内部类引用方法参数,方法参数必须设置为final,所以本文系统得整理了一下内部类知识,如果有用得话,记得...

zycxnanwang的博客 1494

【java内部类】Java:内部类介绍

相比于普通类,其中我们在S类的内部加上了一个Z类,Z类就是一个成员内部类。通过以上运行结果,可以总结出以下特点:成员内部类,可访问外部静态或非静态的属性,其次外部方法访问成员内部类,须通过实例化对象才能够访问,还有内部类实例化对象需要听过外部类的对象。可以看到我们运行的结果,可以知道内部类的方法成功的访问了外部类的属性,并且外部类静态的和非静态的都输出了出来,同时外部类的方法也成功通过对象访问了内部的数据属性。成员内部类,顾名思义在类的成员位置上,我们创建了一个Java类,这个类在已有类的内部。

2201_75994883的博客 169

Java内部类全解析:成员内部类、静态内部类、局部内部类和匿名内部类

本文详细解析Java四种内部类:成员、静态、局部与匿名内部类,阐明其语法特点、访问权限与核心用途。通过代码示例,深入探讨为何及如何在开发中利用内部类实现逻辑分组、增强封装和简化设计。

qq_17862337的博客 591

嵌套类(内部类):静态内部类、非静态内部类、匿名内部类、局部内部类

 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。 1.成员内部类   成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式: classCircle { doubleradius =0; publicCircle(doubleradius) { this.r...

向高手学习 353

内部类:成员内部类,局部内部类,匿名内部类,静态内部类 。包

权限修饰符: Protected 修饰的 在不同包下的无关类 不能访问 在不同包下的子类中可以访问 成员内部类: Class test_InnerClass { Public static void main(String[ ] args) { Outer.Inner o...

weixin_30338497的博客 126

Java:四大内部类详解及总结

文章目录声明成员内部类局部内部类匿名内部类静态内部类内部类总结普通内部类局部内部类匿名内部类静态嵌套类 声明 1)该文章部分内容整理自网上的资料,如不小心侵犯了大家的权益,还望海涵,并联系博主删除。 2)博主是萌新上路,文中如有不当之处,请各位大佬指出,共同进步,谢谢。 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。 成员内部类 成员内部类是最普通

sid10t. 2万+

语法糖:内部类

内部类 最后一个语法糖,讲讲内部类,内部类指的就是在一个类的内部再定义一个类。 内部类之所以也是语法糖,是因为它仅仅是一个编译时的概念,outer.java里面定义了一个内部类inner,一旦编译成功,就会生成两个完全不同的.class文件了,分别是outer.class和outer$inner.class。所以内部类的名字完全可以和它的外部类名字相同。 内部类分为四种:成员内部类、局部内部类、匿名内部类、静态内部类。先逐一了解下,再看下使用内部类有什么好处。 成员内部类 成员内部类是最常见的

qinshuluye2013的专栏 318
上一篇: 总结:Java转换流
下一篇: 测试题
wangpanbaoding
博客等级 码龄18年 42粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值