【JAVA学习】内部类

事件相机数据处理实战:从原始事件流到视觉表征的三种核心方法 本文深入探讨了事件相机数据处理的核心环节,即如何将异步、稀疏的原始事件流转换为深度学习模型可处理的视觉表征。文章重点解析了三种核心方法:逐通道累积、体素网格双线性插值和对称累积事件表示,详细阐述了其原理、代码实现、可视化效果及各自的适用场景,为事件相机在目标识别、光流估计等视觉任务中的高效应用提供了实战指南。 阅读详情

本文核心内容:

1)嵌套类可以直接访问嵌套它的类的成员,包括private成员,但是,嵌套类的成员却不能被嵌套它的类直接访问。

2)在类中直接定义的嵌套类的使用范围,仅限于这个的类的内部,也就是说,A类里定义了一个B类,那么B为A所知,却不被A的外面所知。内部类的定义和普通类的定义没什么区别,它可以直接访问和引用它的外部类的所有变量和方法,就像外部类中的其他非static成员的功能一样,和外部类不同的是,内部类可以声明为private或protected。

3)当一个类中的程序代码要用到另外一个类的实例对象,而另外一个类中的程序代码又要访问第一个类中的成员,将另外一个类做成第一个类的内部类,程序代码就要容易编写得多,这样的情况在实际应用中非常之多!

 

全文如下:

下面转自:http://www.cppblog.com/wangfeng2500/articles/123737.html

 

3.8 内部类

        在一个类内部定义类,这就是嵌套类(nested classes),也叫内部类、内置类。读者以后不要死抠这些名称术语,不同的书籍有不同的翻译风格,你只要知道怎么回事就行了。我曾经碰到一个学员为了弄清楚方法与函数的区别(因为有的书叫方法,有的书叫函数,反而把他给弄糊涂了),翻阅了大量的书籍,都没有搞清楚这两者的区别,其实是同一个事务的两种不同叫法,因为他思考方式的问题,反而在他那变得复杂了。嵌套类可以直接访问嵌套它的类的成员,包括private成员,但是,嵌套类的成员却不能被嵌套它的类直接访问。

3.8.1 类中定义的内部类

        在类中直接定义的嵌套类的使用范围,仅限于这个的类的内部,也就是说,A类里定义了一个B类,那么B为A所知,却不被A的外面所知。内部类的定义和普通类的定义没什么区别,它可以直接访问和引用它的外部类的所有变量和方法,就像外部类中的其他非static成员的功能一样,和外部类不同的是,内部类可以声明为private或protected。

下面的程序说明了如何定义和使用一个内部类。名为Outer的类定义了一个实例变量outer_i,一个test()方法,和一个名为Inner的内部类。

class  Outer
{
   
int outer_i = 100;
   
void test()
   
{
       Inner 
in = new Inner();
       
in.display();
   }

   
class Inner
   
{
      
void display()
      
{
          System.
out.println("display: outer_i 
                             = " + outer_i);
      }

   }

}

class  InnerClassDemo
{
    
public static void main(String[] args)
    
{ 
        Outer outer 
= new Outer();
        outer.test();
    }

}


打印结果如下:

display: outer_i = 100

在程序中,内部类Inner定义在Outer类的范围之内。因此,在Inner类之内的display()方法可以直接访问Outer类的变量outer_i。其实,在内部类对象保存了一个对外部类对象的引用,当内部类的成员方法中访问某一变量时,如果在该方法和内部类中都没有定义过这个变量,调用就会被传递给内部类中保存的那个外部类对象的引用,通过那个外部类对象的引用去调用这个变量,在内部类中调用外部类的方法也是一样的道理。上面的程序代码在内存中的布局,如图3.21所示:

                                                    

图3.21

F指点迷津:

内部类使得程序代码更为紧凑,程序更具模块化。建议读者先自己试试如何将上面的Inner类改写成Outer类的外部去实现,如果你试图这样做了,并感觉到有些棘手的话,你就非常容易明白作者下面的结论了:当一个类中的程序代码要用到另外一个类的实例对象,而另外一个类中的程序代码又要访问第一个类中的成员,将另外一个类做成第一个类的内部类,程序代码就要容易编写得多,这样的情况在实际应用中非常之多!

一个内部类可以访问它的外部类的成员,但是反过来就不成立了。内部类的成员只有在内部类的范围之内是可知的,并不能被外部类使用。例如:

 

 1 class  Outer
 2 {
 3   int outer_i = 100;
 4   void test()
 5   {
 6       Inner inner = new Inner();
 7       inner.display();  
 8   }

 9   class Inner
10   {
11      int y = 10;
12      void display()
13      {
14          System.out.println("display:  
15             outer_i = " + outer_i);
16      }
 
17   }

18
19   void showy()
20   {
21       System.out.println(y);
22   }

23}

24

 

编译上面的程序,会出现如下错误:

G:\outer.java:19: cannot resolve symbol

symbol : variable y 

location: class Outer

System.out.println(y);

                       ^

1 error

这里,y是作为Inner的一个实例变量来声明的,对于该类的外部它就是不可知的,因此不能被showy()使用。

如果用static修饰一个内部类,这个类就相当于是一个外部定义的类,所以static的内部类中可声明static成员,但是,非static的内部类中的成员是不能声明为static的。static的内部类不能再使用外层封装类的非static的成员变量,这个道理不难想像!所以static嵌套类很少使用。

我们把前面程序中的Inner内部类声明为static,来看看会出现什么样的错误:

class  Outer
{
    
int outer_i = 100;
    
void test()
    
{
        Inner 
in = new Inner();
        
in.display();
    }

    
static class Inner
    
{
    
void display()
    
{
        System.
out.println("display: 
                 outer_i = " + outer_i);
        }

    }

}

class  InnerClassDemo
{
    
public static void main(String[] args)
    
{ 
     Outer outer 
= new Outer();
    outer.test();
    }

}


程序运行结果:

E:\TestOuter.java:13: non-static variable outer_i cannot be referenced from a static context

         System.out.println("display: outer_i = " + outer_i);

                                                               ^

1 error

这段信息表明Outer类的非静态成员变量outer_i不能被一个静态内部类的成员调用。

如果函数的局部变量(函数的形参也是局部变量),内部类的成员变量,外部类的成员变量重名,我们应该按下面的程序代码所使用的方式来明确指定我们真正要访问的变量。

 

public   class  Outer

{
    
private int size;
    
public class Inner

    
{
        
private int size;
        
public void doStuff( int size)

        
{
           size
++; // 引用的是doStuff函数的形参

            
this.size++; //引用的是Inner类中的成员变量
            Outer.this.size++; // 引用的Outer类中的成员变量

         }


    }

}



这些同名变量在内存中的分配情况如图3.22所示:

 

图3.22

 

3.8.2 内部类如何被外部引用

内部类也可以通过创建对象从外部类之外被调用,只要将内部类声明为public即可,请看下面的程序:

 

 1 class  Outer
 2
 3 {
 4        private int size=10;
 5
 6        public class Inner
 7
 8        {
 9
10            public void doStuff()
11
12            {
13
14                System.out.println(++size);
15
16            }

17
18        }

19
20}

21
22      public   class  TestInner
23
24      {
25
26        public static void main( String[] args)
27
28        {
29
30            Outer outer = new Outer();
31
32            Outer.Inner inner = outer.new Inner();
33
34            inner.doStuff();
35
36        }

37
38    }

39

 

程序中,内部类Inner被声明为public,在外部就可以创建其外部类Outer的实例对象,再通过Outer类的实例对象创建Inner类的实例对象,我们就可以使用Inner类的实例对象来调用内部类Inner中的方法了。

 

3.8.3 方法中定义的内部类

嵌套类并非只能在类里定义,也可以在几个程序块的范围之内定义内部类。例如,在方法中,或甚至在for循环体内部,都可以定义嵌套类,如下面的程序所示:

 

 1 class  Outer
 2 {
 3    int outer_i = 100;
 4    void test()
 5    {
 6        for(int i=0; i<5; i++)
 7        {
 8            class Inner
 9            {
10                 void display()
11                 {
12                     System.out.println("display: outer_i = " + outer_i);
13                 }

14            }

15
16            Inner inner = new Inner();
17            inner.display();
18        }

19    }

20}

21
22 class  InnerClassDemo
23 {
24    public static void main(String args[])
25    {
26        Outer outer = new Outer();
27        outer.test();
28    }

29}
30

 

该程序的这个版本的输出如下所示。

display: outer_x = 100

display: outer_x = 100

display: outer_x = 100

display: outer_x = 100

display: outer_x = 100

在方法中定义的内部类只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当于是一个常量,它的生命周期超出方法运行的生命周期。如:

class  InOut
{
    String str
= new String("Between");
    
public void amethod(final int iArgs)
    
{
        
int it315;
        
class Bicycle
        
{
             
public void sayHello()
             
{
                 System.
out.println(str); 
                 System.
out.println(iArgs);

             }
//End of bicycle class
         }

     }
//End of amethod
}


在内部类中的sayHello方法中,我们可以访问变量iArgs和str,但不能访问it315。

LeetCode 热题 100 回顾 力扣最受刷题发烧友欢迎的 100 道题 LeetCode 热题 100 : 题目回顾、解题思路、复杂度分析、代码实现、验证算法 阅读详情

相关推荐

Unity3D 简单水面shader的实现

实现思路 今天来实现一个简单的水面效果。水面的话主要是以下几个效果叠加 1.水面的动态波浪效果,我们这里使用最简单的正弦波加上法线贴图来模拟。如果想要更精确的波动效果可以考虑使用Gerstner波 2.不同水深颜色不同的效果,使用该顶点深度和顶点坐标的差值来计算深度,然后映射到颜色 3.浪涌效果,还是根据顶点深度和顶点坐标的差值来计算深度,然后叠加上一层浪涌 4.折射效果,用grabpass,采样之后进行偏移,最后叠加上去。 代码实现 首先是顶点位移函数,使用正弦函数代入顶点的x坐标和z坐标来算,因为这里写

o83290102o5的博客 1万+

IDEA报错Cannot resolve symbol ‘java‘且找不到主类,但可以运行

IDEA大面积爆红,显示Cannot resolve symbol 'java'且找不到主类,但可以运行。 试过下面的方法不能解决: 1、 File-Invalidate Caches然后重启IDEA清除缓存; 2、project settings添加 sources 3、刷新maven依赖 最后发现原因是: project structure——modules——dependencies——Module SDK的JDK版本和project等地方设置的不一样。 ...

weixin_43998739的博客 8697

MATLAB仿真实战:双有源桥(DAB)变换器的扩展移相调制(EPS)全流程解析

本文提供了一份详细的MATLAB/Simulink仿真实战指南,手把手解析双有源桥(DAB)变换器在扩展移相调制(EPS)下的全流程建模。内容涵盖从核心原理、主功率电路搭建、EPS驱动信号生成,到仿真运行、波形分析及模型优化的完整步骤,旨在帮助工程师和研究者快速掌握DAB变换器的仿真与性能验证方法。

o4p5q6r7s的博客 503

println报错 cannot resolve symbol println

println报错 cannot resolve symbol println 原因:System.out.println();没有写到main方法里 错误: public class Test { public static void main(String[] args){ User user1 = new User(1850421234,“张三”,“男”,22,“软件工程1班”,new Date()); } System.out.println(user1); } 修改: public class

weixin_43989685的博客 2518

手把手教你调试RTL8201F:从芯片手册解读到LWIP驱动移植

本文详细解析了RTL8201F PHY芯片的开发流程,从寄存器配置到LWIP驱动移植,重点介绍了RMII模式下的特殊配置要点和调试技巧。通过实战案例和高级调试方法,帮助工程师解决网络性能问题,实现与FreeRTOS+LWIP协议栈的稳定集成。

ik678901234的博客 972

Keil MDK编译错误#541解决方案与ARM_Compiler包解析

在嵌入式开发中,编译器工具链的依赖管理是确保项目顺利构建的关键环节。以Keil MDK为例,其软件包依赖机制通过组件化设计实现功能解耦,其中ARM_Compiler包专门处理系统IO重定向等编译器扩展功能。这种架构既提升了模块复用性,也带来了版本兼容性挑战。当出现'Error #541: component missing'报错时,通常是由于中间件组件(如文件系统)在新版本中显式依赖了ARM_Compiler包。开发者需要通过Pack Installer安装该包,并在Run-Time Environment

weixin_32129187的博客 367

【Java文件报错】Cannot resolve symbol ‘println‘ 【及解决】

语句进行输出,编译器提示“Cannot resolve symbol ‘println’(无法解释关键字)”, println飘红。报错代码及报错截图如下所示。在Java源代码文件中,使用。

weixin_43031313的博客 2517

WiFi基本概念(六)(L-STF,L-LTF)

L-STF它由10个OFDM symbol(1,0,1,0,1,0,1,0,1,0)构成,每个symbol是0.8us,GI是0.2us,总计10us。Symbol的长度是正常长度的1/4,因此称为Short training field,主要用于快速进行信号检测,信号同步,自动增益控制,接收天线选择(Diversity Selection)。 由于symbol长度是正常的1/4,子载波的宽度是正常的4倍,能进行初略的信道估计,其使用了-24, -20, -16, -12, -8, -4, 4, 8, 1

reekyli的专栏 6863

在maven项目中解决Cannot resolve symbol ‘java‘问题

大家好,这里是X????‍????????‍????????‍????,今天带来解决Cannot resolve symbol 'java’的问题,最近修改bug真的修改太多了????‍????????‍????????‍???? 非常简单,他的意思就是无法识别、处理有关‘Java’的命令,非常有可能就是你的idea没有配置JDK???? 打开命令符,输入:java -version查看自己的jdk版本,我这里是jdk14,去官网看了一下,最新的出到了17,我这赶紧就去下载了一下,但是这里的演示还是用

Xmumu_的博客 3976

AI辅助决策支持系统架构设计避坑:5个常见技术选型误区及正确方案

AI辅助决策支持系统(AI-DSS)是指通过人工智能技术(机器学习、自然语言处理、知识图谱等)赋能传统决策支持系统,帮助决策者在复杂业务场景中(如供应链优化、风险控制、医疗诊断、金融投资等)提升决策效率和准确性的系统。与传统BI工具不同,AI-DSS不仅能"展示数据",还能基于数据生成"决策建议"甚至"自动执行决策"。技术选型是AI-DSS架构设计的核心环节,涉及数据处理引擎、模型框架、算力资源、集成接口等关键组件的选择。效果不达标:模型预测精度低、决策建议不可用;成本失控:算力资源浪费、维护成本高企。

AIGC应用创新大全的博客 1381

《Python入门到精通》函数详解

函数就是一段「封装」起来的「代码」,目的是提高代码的「模块性」和「复用性」。 2、函数的参数 2.1、变量的就近原则 2.2、传递参数 2.3、形参和实参 2.4、位置参数 2.5、缺省参数 2.6、可变类型和不可变类型 2.7、关键字参数 3、匿名函数 4、函数的返回值

wangyuxiang946的博客 1万+

Cannot resolve symbol ‘java‘ Cannot resolve symbol ‘String‘ Cannot resolve symbol ‘System‘

Cannot resolve symbol 'java' 错误通常与 JDK 配置、模块化设置或 IDE 缓存问题有关。检查 JDK 配置、项目依赖、模块化设置,并尝试清理和重建项目。

m0_73941339的博客 2366

基于LSTM算法实现交通流量预测(Pytorch版)

本研究采用PyTorch框架,设计并实现了一种基于LSTM(Long Short-Term Memory)网络的交通流量预测模型。针对时序性显著的交通流量数据,模型首先将多节点、多通道的时空信息整合为一维特征输入至多层LSTM单元,利用其捕捉长期依赖及短期波动的能力进行深度学习。全连接层随后调整时间步长以适应预测周期需求。模型结构灵活,能适应不同节点数、输入输出长度及通道配置,实现在给定历史流量数据基础上对未来交通流量的精准预测,为交通管理与规划提供数据驱动支持。

打酱油的葫芦娃 4638

Java 内部类学习笔记

内部类是Java中一个强大的特性,能够帮助开发者实现更灵活的类设计和代码组织。通过合理使用内部类,可以解决多重继承问题、提高代码的封装性和可读性。但在实际开发中,应避免滥用内部类,以免增加代码的复杂度和维护成本。

2301_78498098的博客 1507

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Java】内部类【主线学习笔记】

内部类;Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。

CBCY_csdn的博客 693

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java学习第十天内部类

内部类:匿名内部类 静态内部类 成员内部类 局部内部类

Y_Y1230704的博客 496

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

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

Java学习笔记之---内部类

Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员,如果出现重名属性,优先访问内部类中定义的 可以使用外部类.this.成员的方法,访问外部类中同名的信息 外部类访问内部类信息,需要通过内部类实例,无法直接访问 内部类编译后.clas...

weixin_30840253的博客 87

Java内部类学习笔记   

  本文主要讲述Java内部类学习笔记,更多Java技术知识,请登陆疯狂软件教育官网。加微信号疯狂软件,或者用微信搜索疯狂软件,参加2015年优惠活动,有机会获得优惠劵和代金劵。  一直以来认为内部类只是名字隐藏和组织代码的模式,今天从Java mindview中看到一些内部类的用法,当生成一个内 部类的对象时,此对象与制造它的外围对象之间有了一种联系,所以它能访问其外围对...

weixin_34413357的博客 182

java内部类学习

java内部类 一、什么是内部类? 可以将一个类的定义放在里另一个类的内部,这就是内部类。 二、内部类分类 广义上我们将内部类分为四种:成员内部类、静态内部类、局部(方法)内部类、匿名内部类。 三、内部类介绍 接下来内部类参考其他博主的文章。其他博主的文章写得很好了。参考一下。 参考文章如下:http://www.cnblogs.com/dolphin0520/p/3811445.html 博...

自学java小白的博客 191

java 内部类的学习总结

内部类 参考文档:https://www.runoob.com/w3cnote/java-inner-class-intro.html 在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。 1.成员内部类 //1.成员内部类地位和类的成员等同 //2.成员内部类可以访问外部类的任意成员方法。 //3.如果外部类需要访问内部类,则需要先创建内.

qq_40331861的博客 265

【Java 学习】:内部类详解

本文介绍了Java中的内部类概念,包括实例内部类、静态内部类、局部内部类和匿名内部类的定义、特点及使用场景。内部类是Java中实现封装的一种方式,可以访问外部类的所有成员,常用于回调函数和事件处理。实例内部类需要外部类实例化,静态内部类则可以直接通过外部类名访问,局部内部类仅在其定义的方法或代码块内有效,而匿名内部类通常用于一次性实现接口或类。

island1314的博客 3957

【Java学习】内部类

因为静态与非静态都是对于外部类管理它里面成员而言的,只是内部类成员要多上对将来使用场景负责,其实不管是被静态还是被非静态修饰,对于类本身而言没有影响的,在它们里面的非静态方法自然都有此类变量引用的隐藏形参,不是说被static修饰后的类就不能对它创似复刻变量了,一样是可以的。

Brookty的博客 1606

JAVA学习 内部类

JAVA学习 内部类

Nanashi_wumi的博客 299

Java内部类学习总结

目录目录 概述 非静态内部类 从外部类的非静态方法中实例化内部类 从外部类的静态方法中实例化内部类 内部类的this引用 静态内部类 从外部类的非静态方法中实例化静态内部类 从外部类静态方法中实例化静态内部类 匿名内部类 方法内部类概述最近学习python,发现python是支持多继承的,这让我想起Java是通过内部类实现的这套机制。这篇文章不是讲如何通过内部类实现多继承,而是总结一下内部类的类型和

小一的专栏 4727

java内部类的学习

1. 内部类的分类 内部类就是在一个类中又定义一个类。 静态内部类:static修饰的内部类。 普通内部类:不用static修饰的内部类。 局部内部类:在类中方法内定义的内部类。 2.内部类的基本语法 3.内部类的特点 内部类可以访问其所在类的属性(包括私有属性),内部类创建自身对象需要先创建其所在类的对象。 普通内部类里面不能定义static属性和方法 原因:普通内部类的存在依赖于外部类的对象,static随着类的加载而加载,产生了冲突。 静态内部类可以定义static sta

qq_40346958的博客 165

Java内部类学习

Java内部类学习

jacknoe的博客 182
上一篇: 【JAVA学习】This和super用法及区别
下一篇: 安卓程序的入口点
NewThinker_wei
博客等级 码龄14年 521粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值