JAVA 内部类

医学影像分割入门:为什么U-Net至今仍是肝脏CT肿瘤分割的‘首选’? 本文探讨了U-Net在肝脏CT肿瘤分割中的持久优势,分析了其轻量化设计、对称架构和跳跃连接如何完美适配医学影像的小样本、高精度需求。通过对比实验和实战建议,揭示了U-Net在肝脏肿瘤分割任务中超越新模型的根本原因,并提供了PyTorch实现和部署技巧。 阅读详情

部分内容参考Core Java

为什么要使用内部类:

1、内部类方法可以访问外围类作用域中的数据,包括private类型数据。

2、内部类可以对同一个包中的其他类隐藏起来。

3、当想要定义一一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷(Java8以后可以使用lamba表达式)

一、成员内部类

    //OuterClass
    public class TalkingClock {
        private int interval
        private boolean beep;

        public TalkingClock(int interval, boolean beep) { //code... }
        public void start() { 
            ActionListener listener = new TimePrinter();
            Timer t = new Timer(interval, listener);
            t.start();
        }
        //InnerClass
        public class TimePrinter implements ActionListener {   
            System.out.println("haha");
            if(beep)
                System.out.println("beep");
            }


    }

当一个类A定义在一个类B里面,则A称为B的成员内部类。类A隐式持有一个指向类B的this指针,用来访问外围类的成员变量。

在创建TimerPrinter对象时编译器会将this隐式引用传递给其构造器:

 ActionListener listener = new TimePrinter(this);

如果对TimePrinter进行反射,会得到下列代码:

class TalkingClock$TimePrinter {

    public TalkngClock$TimePrinter(TalkingClcok);
    public void actionPerformed(java.awt.event.ActionEvent);
    final TalkingClock this$0;

}

注意构造函数列表和this$0。这将使内部类持有外部类引用。

但是beep是私有的,这说明内部类有一种特有的方式使得其可以访问外部类的私有成员变量。那么是如何访问的呢?再对外部类进行反射,可得到下列代码:

class TalkingClock {
    private int interval;
    private boolean beep;
    
    public TalkingClock(int, boolean);

    static boolean access$0(talkingClcok);
    private void start();
}

可以看到,反射后的外围类多了一个access$0方法。也就是说,在访问私有变量beep时,也就是调用这个方法来返回beep的值:

if(TalkingClock.access$0(outer))

语法规则:

1、OuterClass.this    比如上述代码中的if(beep)还可以i这样写:

if(TalkingClock.this.beep)    
    System.out.println("beep");

2、OuterObject.new InnerClass(construction paraments)

    ActionListener listener = this.new TimePrinter();
    //若TimePrinter为一个公有内部类
    TalkingClock c1 = new TalkingClock(1000, true);
    TalkingClock.TimePrinter listener = c1.new TimePrinter();

3、OuterClass.InnerClass

为什么成员内部类中声明的所有静态域都必须是final?

1、没个外部对象都有自己单独的内部类对象。

2、这些对象无法统一,但是static要求唯一 。因此加入final防止出现不唯一的问题。

此外,内部类的静态方法只能访问外围类的静态域和静态方法。

 

二、局部内部类

如果某个类的对象只在某个方法中使用了一次,那么可以把这个类直接定义在该方法中。定义在方法体中的类称之为局部内部类。

public void Outermethod(){
    class void InnerClass{    //局部内部类
        public void innerMethod(){
            // TODO
        }
    }
    //...
}
 

若局部内部类使用了方法中的局部变量,则在其方法中会维护一份方法中局部变量的拷贝。应当使用final修饰局部变量,使得内外的值一致:

public class Test {

	public void outmethod() {		
		
		int num = 10;
		
		class Inner {
			public void show() {
				//在Java8中如果内部类不修改内部类外变量可以不加final,如果修改则报错。
				//num = num+1;  报错
				System.out.println(num);
			}
		}
		new Inner().show();
	}
	

	public static void main(String[] args) {
		new CopyTest().outmethod();
	}
}

三、静态内部类

如果有时只是想把一个类隐藏在另一个类的内部,则内部类不需要引用只想外部类。这是后就可以使用静态内部类。静态内部类除了没有对外部类的引用特权以外,其他与成员内部类一致。注意当外部类加载时静态内部类并不会立即被加载,只有当使用静态内部类时才会加载,且静态内部类的加载是线程安全的。

学Simulink——基于直流电机的建模与控制场景实例:他励直流电机的起动与制动过程仿真 直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。 阅读详情

相关推荐

同花顺CM函数深度解析:如何精准设置历史换手衰减系数以优化筹码峰

本文深度解析同花顺CM函数中的历史换手衰减系数,揭示其如何影响筹码峰准确性。通过拆解CM函数参数,并提供基于前十大流通股东锁定比例的计算公式,指导用户精准设置该系数,从而优化筹码峰模型,使其更真实反映个股持仓成本分布,提升技术分析的有效性。

mango的博客 1780

内部类

一、概念 1.内部类可以实现闭包:内部类可以访问外围类的数据域。 2.内部类声明的所有静态域都必须是final: 3.内部类不能有static方法,因为内部类的爸爸-外围类要先创建? 二、四种内部类 1.成员内部类:定义在类中的内部类 2.局部内部类:定义在方法中的内部类,注意,局部类就像是方法的参数一样不能有修饰符。 3.匿名内部类:省去了类名,没有构造器,用于实现接口回调---类

Jimmy_Wangzx的博客 348

erdas监督分类(二)

去云 用一张没有云的影像替代有云影像 构建aoi图层 将云和云影编码合并 重编码工作 在监督分类做的差不多以后(纠正无误,无明显错误),就要对监督分类图像进行重编码和颜色调整。 在中选中Recode,对原来分类的地物类别进行重编码,(为彻底修改,记得备份)选中一列,在New Value输入新的编码,依次编码后点击应用apply,即可实现。 这时的图像如果是全黑的或者只有一两类的颜色也没有关系,新的编码覆盖掉了原来的编码,但是颜色并没有改变才会这样。可以点击图像,右击...

weixin_58968530的博客 958

内部类总结一

-:内部类可以对同一个包中的其他类隐藏 -:内部类方法可以访问定义这个类的作用域中的数据,包括原本私有数据 -:内部类中声明的所有静态字段都必须是final,并初始化为一个编译时常量 -:内部类不能有static方法,(也可以有,但是只能访问外围类的静态字段和方法) -:局部内部类:在一个方法中局部地定义一个类 声明局部类不能有访问说明符,局部类的作用域被限定在声明这个局部类的块中。 优势:对外部世界完全隐藏,除所在的方法外,没有其他知道它的存在 不仅能访问外部类的字段,还可以访问局部变量,但是局部变量必须

qq_38752619的博客 181

对单周期 RISC-V 处理器进行扩展

对单周期 RISC-V 处理器进行扩展

xiaoxian666的博客 1482

Crossbar RRAM技术解析:从1TnR架构到存储革命

非易失性存储器(NVM)是数据存储的核心技术,其原理基于物理状态的稳定改变以实现数据持久化。阻变存储器(RRAM)作为一种新兴NVM,利用导电细丝在介质层中的形成与断裂实现数据存储,具有高速、低功耗和结构简单的优势。在工程实践中,RRAM面临潜行路径电流等挑战,而Crossbar提出的1TnR架构通过引入共享晶体管有效解决了这一问题,在保证性能的同时提升了集成密度。该技术与CMOS工艺兼容,支持后端集成与多层堆叠,为高密度存储和嵌入式应用提供了新的解决方案。结合当前行业对高能效、高密度存储的需求,RRAM在

weixin_42523104的博客 321

为什么java内部类访问局部变量必须声明为final?

先抛出让我疑惑了很久的一个问题 编程时,在线程中使用局部变量时候经常编译器会提示:局部变量必须声明为final package test; public class ThreadTest { public void function(String a) { new Thread(){ @Override public void run() { Syst

大树的学习之路 1万+

ros1 Noetic下运行cartographer算法进行2d建图

最近的工作重点放在机器狗的二次开发上,项目的需求是要升级机器狗的slam算法和导航避障算法,slam拟采用激光与视觉融合算法,激光slam就使用最为流行和实用的cartoghper算法。在这过程中遇到好多坑,希望看到这篇博客的人能少走弯路吧。我用的仿真机器人是wpr_simiulation。首先复制一份demo_revo_lds.launch文件和revo_lds.lua文件,修改成下面的样子。my_test.lua文件,base_link就是机器人的坐标系。下载与安装的博客有很多,我推荐。

sun5739的博客 1547

内部类实现机制

package timer; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; import javax.swing.JOptionPane; import javax.swing.Timer;

tdy002的专栏 961

YOLO26改进 - SPPF模块 | 发论文神器!LSKA注意力改进SPPF,增强多尺度特征提取能力,高效涨点!!!

本文介绍了Large Separable Kernel Attention (LSKA)模块及其在YOLO26中的结合应用。LSKA旨在解决Visual Attention Networks (VAN)使用大内核卷积时的计算效率问题,通过将2D深度卷积层的卷积核分解为级联的水平和垂直1-D卷积核,降低了计算复杂度和内存占用,且使VAN更关注物体形状。我们将集成LSKA的SPPF_LSKA模块引入YOLO26,大量实验表明,改进后的模型在对象识别、检测、分割和稳健性测试上表现出色。

魔改工程师的博客 252

【嘉立创EDA】PCB 多层板如何交换内层,4层板交换板层

本文使用嘉立创EDA,描述如何在PCB设计时,如何交换各个板层,特别是4层板需要交换内层时,应该如何操作,以供有需要的读者参考。

l64481000的博客 2015

Java内部类---巩固强化

1.内部类的功能 内部类是定义在另一个类中的类。为什么需要使用内部类呢?主要有两个原因: 内部类可以对同一个包中的其他类隐藏。 内部类方法可以访问定义这个类的作用域中的数据,包括原本私有的数据。 2.使用内部类访问对象状态 我们将重构TimerTest示例,抽象出一个TalkingClock类。构造一个语音时钟时需要提供两个参数:发出通知的间隔和开关铃声的标志。 public class Ta...

松落 799

Python爬虫教程:抓取社交媒体内容(以Facebook和Instagram为例)

为什么抓取社交媒体内容?品牌分析与监测:通过抓取品牌、产品或服务相关的社交媒体数据,可以获得公众对其的评价,识别市场趋势,制定营销策略。情感分析:分析用户在社交平台上的情感倾向,如对某事件、产品、服务的正面或负面情绪。舆情监控:通过抓取大量社交媒体内容,监测公众对热点事件的反应,发现潜在的社会问题。用户行为分析社交媒体的数据类型:帖子和内容:包括用户发布的文本、图片、视频等。用户互动用户信息:包括用户名、粉丝数、关注数等社交信息。社交媒体的反爬虫机制:API限制。

2201_76125261的博客 1338

java内部类

1、局部内部类就是定义在外部类的局部位置上,比如方法内,并且有类名。class Outer {//外部类public void show() {//方法class Inter {//局部内部类} } }2、局部内部类可以访问外部类的所有成员,包括私有成员。class Outer {//外部类//私有变量private void method1() {}//私有方法public void show() {//方法class Inter {//局部内部类//调用外部类私有变量。

qq_65501197的博客 1430

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java内部类

一、内部类的概念 二、内部类的分析 三、内部类的分类 1. 成员内部类 2. 静态内部类 3. 局部内部类 4. 匿名内部类 匿名内部类与Lambda表达式

骑个小蜗牛的博客 9306

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

全面掌握 Java 内部类

一直以来以为自己对 java 基础甚是清楚,然而面试时却连内部类和静态内部类的区别都无法回答圆满,so~重新学习一遍,彻底掌握内部类。内部类是一种非常有用的特性,它可以把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性,下文中内部类均指非静态内部类。内部类的学习分为以下10个知识点: 1.创建内部类与连接外部类 2.内部类与向上转型 3.局部内部类 4.匿名内部类

yhao的博客 3634

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java 内部类详解

在 Java 中,我们通常是把不同的类创建在不同的包里面,对于同一个包里的类来说,它们都是同一层次的。但其实还有另一种情况,有些类可以被定义在另一个类的内部,我们把在一个类里面定义的类称为内部类(InnerClass)或嵌套类,把外面定义的类称为外部类(OutClass)或宿主类。也就是说,在类的内部既可以定义成员变量和方法,也可以定义其他的类。public class Outer { // 外部类class Inner { // 内部类// 方法和属性。

流华追梦的专栏 1315

java new 一个内部类_java内部类

java内部类的几种类型:成员内部类,静态内部类,方法内部类,匿名内部类。成员内部类:成员内部类是类内部的非静态类。成员内部类不能定义静态方法和变量(final修饰的除外)。这是因为成员内部类是非静态的,类初始化的时候先初始化静态成员,如果允许成员内部类定义静态变量,那么成员内部类的静态变量初始化顺序是有歧义的。例子如下:运行结果为:访问外部类中的a:99,访问内部类中的b:2成员内部类的使用方法...

weixin_29798379的博客 5241

Java内部类是什么?Java实例内部类、Java静态内部类、Java局部内部类详解

在类内部可定义成员变量和方法,且在类内部也可以定义另一个类。如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。内部类可以很好地实现隐藏,一般的非内部类是不允许有 private 与 protected 权限的,但内部类可以。内部类拥有外部类的所有元素的访问权限。内部类可以分为:实例内部类、静态内部类和成员内部类,每种内部类都有它特定的一些特点。

Itmastergo的博客 233

Java内部类可以public吗,Java 内部类

Java 内部类什么是内部类?在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。主要用以下几种成员内部类局部内部类匿名内部类静态内部类Java 成员内部类示例访问权限private 访问权限protected 访问权限public 访问权限package 访问权限public class TestClass {public void a(){LogHelper....

weixin_30247915的博客 2379

Java 内部类

当静态内部类对象存在时,并不存在一个被它寄生的外部类对象,静态内部类对象只持有外部类的类引用,没有持有外部类对象的引用。在非静态内部类里可以直接访问外部类的私有成员,是因为在非静态内部类的对象里保存了一个它所寄生外部类对象的引用。当调用非静态内部类的实例方法时,必须有一个非静态内部类的实例,非静态内部类实例必须寄生在外部类实例里。如果把一个内部类放在方法里定义,那这个内部类就是一个局部内部类,局部内部类仅在方法里有效。把 A 类定义在 B 类的内部,A——内部类(嵌套类),B——外部类(宿主类)。

我的博客 1640

Java的内部类

Java的内部类

weixin_52385232的博客 702

java 内部类list_java详解内部类

可以将一个类的定义放在另一个类的定义内部,这就是内部类。内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二)。第一次见面内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类。public class OuterClass {private String name ;private int age;public String...

weixin_39714835的博客 903

java内部类 子类_Java 内部类

public class TestInnerClass {public static int field = 1;protected int field1 = 2;int field2 = 3;private int field3 = 4;//静态代码块/*static {System.out.println(field);}*/public TestInnerClass(){NorInner n...

weixin_29139581的博客 347

java四种内部类

java四种内部类 成员内部类 静态内部类 局部内部类、 匿名内部类。 1.成员内部类 定义在一个类(外部类)的内部,而且与成员方法、属性平级的类叫成员内部类,…相当于外部类的非静态方法,如果被static修饰,就变成静态内部类了。 public class Person { private int age; private String name; public void run() { System.out.println("run......."); } class User{

罗罗的1024 868
上一篇: JAVA IO(2)BufferedReader与BufferedWriter与装饰者设计模式
下一篇: JAVA IO(3)流转换
donCoder
博客等级 码龄9年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值