Java基础知识(六)--内部类

【Java基础知识 16】java内部类使用场景 Java基础教程系列,打造精品专栏。 阅读详情

微信公众号:Java患者
专注Java领域技术分享

内部类

概述

  • 在类的内部又定义了一个新的类

内部类访问特点

  • 内部类可以直接访问外部类的成员,包括私有.

  • 外部类要访问内部类的成员,必须创建对象

  • 外部类名.内部类名 对象名 = 外部类对象.内部类对象

class Demo1_InnerClass {
 public static void main(String[] args) {
        
  //外部类名.内部类名 = 外部类对象.内部类对象
  Outer.Inner oi = new Outer().new Inner();   //创建内部类对象
  oi.method();

 }
}


class Outer {
 private int num = 10;
 class Inner {
  public void method() {
   System.out.println(num);
  }
 }
}
  • 面试题

  • 要求:使用已知的变量,在控制台输出30,20,10。

    class Test1_InnerClass {
     public static void main(String[] args) {
      Outer.Inner oi = new Outer().new Inner();
      oi.show();
     }
    }
    //要求:使用已知的变量,在控制台输出30,20,10。
    //内部类之所以能获取到外部类的成员,是因为他能获取到外部类的引用外部类名.this
    class Outer {
     public int num = 10;
     class Inner {
      public int num = 20;
      public void show() {
       int num = 30;
       System.out.println(num);
       System.out.println(this.num);
       System.out.println(Outer.this.num);
      }
     }
    }

    局部内部类访问局部变量的问题

    • 局部内部类访问局部变量必须用final修饰

    • 局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么

      因为当调用这个方法时,局部变量如果没有用final修饰,他的声明周期和方法的声明周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了.如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用.

public class Test{ 
 public void play() {
  int x=4;
  class InTest{
   public void f() {
    System.out.println(x);
   }
  }
  new InTest().f();
 }
 public static void main(String[] args) {
  Test t=new Test();
  t.play();
  
 }
}

当t.play()方法出栈后,play中的局部变量就会随之销毁,但是我的内部类对象可能仍然存在的(当不再被使用才会被垃圾回收器回收)这时在内部类中访问了局部变量x,但此时的x已经被销毁,形成矛盾.

根本原因 : 内部类的生命周期比局部变量的长

资料 · 福利

回复 【Java】即可获取最新零基础Java视频资料

回复 【激活】即可获取IDEA、datagrip等系统激活方式

回复 【面试题】即可获取Java技术相关面试题

往期 · 精彩

专注分享Java技术,跟我一起学习吧

长按识别二维码关注

2a2bca33fc468bdf9ccbac5701aa38dc.png

4d321b1d98608741ab117ad9383d5107.jpeg

【Java基础知识 37】Java内部类、java内部类的作用 Java内部类是定义在另一个类内部的类,可以访问外部类的成员变量和方法。内部类可以分为成员内部类、局部内部类、匿名内部类和静态内部类四种类型。其中,成员内部类和局部内部类必须依托于外部类的实例存在,而静态内部类则可以独立存在。匿名内部类是一种没有名字的内部类,通常用于创建实现某个接口或继承某个类的对象。 阅读详情

相关推荐

ansys workbench 静力结构分析 高阶教程

ansys workbench 静力结构分析 高阶教程 目录ansys workbench 静力结构分析 高阶教程新建工程模型导入设置材料模型简化: 主要内容: 材料设置、模型简化、网格细化、约束分析、接触设置、求解设置、报错处理、结果分析 基础教程: ansys workbench 静力结构分析 基础操作流程(入门) ansys版本: 19.0(16.0及以上均可) 参考资料: 推荐教学视频《有限元分析 张晔》(超详细 ???? )、ansys workbench 超级学习手册(查阅用) 说明:一些基

weixin_43434624的博客 5万+

Java内部类详解

Java内部类详解   说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟。下面是本文的目录大纲:   一.内部类基础   二.深入理解内部类   三.内部类的使用场景和好处   四.常见的与内部类相关的笔试面试题   若有不正之处,请...

weixin_30578677的博客 3791

卡方检验的隐藏逻辑:为什么正态分布的平方和如此重要?

本文深入探讨了卡方检验的核心逻辑,揭示了正态分布平方和在统计检验中的重要性。通过分析卡方分布与伽马分布的关系,以及实际应用案例,帮助读者理解卡方检验的原理、局限及高级应用场景,为数据分析提供有力工具。

3a9bq4r8t2y的博客 206

Java内部类

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

骑个小蜗牛的博客 9306

企业网络架构设计:从内网到外网的无缝通信方案

本文详细解析了企业网络架构设计中的关键技术与实践方案,重点介绍了VLAN划分、OSPF路由优化、安全策略及无线网络集成等核心内容。通过OSPF多区域部署和链路聚合技术,实现内网到外网的无缝通信,提升企业网络性能与安全性。文章还提供了具体的配置示例和最佳实践,助力企业构建高效可靠的网络架构。

weixin_28331555的博客 623

告别第三方工具!用Windows自带蓝牙玩转BLE设备调试(保姆级图文教程)

本文详细介绍了如何利用Windows自带的蓝牙功能进行BLE设备调试,无需第三方工具。从硬件准备、系统配置到实战操作,提供保姆级图文教程,帮助开发者高效完成设备发现、数据交互等全流程调试工作。特别适合物联网开发者和智能硬件爱好者。

o5p6q的博客 725

全面掌握 Java 内部类

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

yhao的博客 3634

图像质量评估(5) -- 畸变(Distortion)

当图像中原本应该是直线的地方看起来发生了不自然的变形或扭曲时,我们称为图像畸变。有三种类型的镜头畸变:桶形畸变(后文使用英文barrel),枕形畸变(后文使用pincushion)和胡子畸变(后文使用英文wavef或mustache,这种畸变里包含了桶形畸变和枕形畸变)。有一个重要的点需要注意,根据透镜的类型以及透镜是否能够从相机中移除等条件不同,畸变会有不同的表现。 总的来说,旋转对称光学系统功能上会产生和物体几何相似的图形。但也有少数特殊的系统是例外,例如鱼眼镜头,这种镜头几何是故意设计为

vivo01的专栏 2万+

Java基础知识·内部类

上一篇:Java基础·抽象类和对象 安卓逆向学习:3526762131 微信yijin1108an Java基础·多态 11 内部类介绍 1.概念: 内部类(Inner Class),是指将一个类定义在另一个类的内部,内部的类称之为内部类。 2.内部类的四个主要特点: (1)内部类可以很好实现隐藏,可以使用protected、private修饰符。 (2)内部类可以直接访问外部类的所有成员,包括私有的成员。 (3)外部类不能直接访问内部类的成员,必须首先要建立内部类的对象才可访问。 (4)内部类可以解决一些

YJJYXM的博客 225

深入掌握英飞凌TriCore中断向量表

摘要:本文探讨了英飞凌Tc277芯片中断机制的原理与实现,重点解析了中断向量表基地址的链接文件定义方式、BIV寄存器的初始化过程以及每个中断条目的32字节空间分配规则。通过分析中断向量号(1-255)的计算方法,阐明了中断条目跳转地址(如STM0中断向量号37对应0x800F04A0)的生成逻辑。文章还揭示了.map文件中14字节跳转指令的组成原理,以及最终通过a14寄存器跳转到实际中断函数(如stm0Sr0ISR)的执行流程,为嵌入式开发人员理解中断处理机制提供了清晰的技术路径。

IT技术猿猴的博客 1710

【WRF工具】WRF 模型输出可视化工具 plotfmt

【WRF工具】WRF 模型输出可视化工具 plotfmt

WW、forever的博客 1289

Java 内部类详解

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

流华追梦的专栏 1314

ARFoundation系列讲解 - 手部跟踪编程

通过使用ARFoundation的手部跟踪子系统,我们可以轻松地在AR应用程序中实现与用户手部的交互。通过设置AR环境、创建场景和相机、添加手部跟踪功能以及编写相应的脚本,我们可以开始在AR场景中跟踪和操作用户的手部。在Unity中创建一个新场景,并将AR Session组件添加到场景中的一个空对象上。手部跟踪的具体实现可能因AR设备和平台的不同而有所差异,你可能需要根据你的使用情况进行一些适配和调整。当你将手部放入AR场景中时,手部跟踪系统将触发相应的事件,并调用脚本中的回调函数。

2301_79325339的博客 355

Java基础知识学习:内部类

目录,更新ing,学习Java的点滴记录 Stage1  Chapter1:Java入门和背景知识  Chapter2:JDK下载安装与第一个Java程序  Chapter3:进制|注释|标识符  Chapter4:变量  Chapter5:基本数据类型  Chapter6:操作符(运算符)  Chapter7:类型转换与键盘输入  Chapter8:IDEA的使用和第一个Java项目  Chapter9:三种控制语句(顺序,选择,循环)  Chapter10:break|continue|return关

qq_41649001的博客 635

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

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

温度PID控制PLC程序

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

java基础知识——21.内部类

首先,我们来介绍一下,什么是内部类。属性,方法,构造方法,代码块,内部类就是在一个类的里面再定义一个其他的类,这个再定义的其他类,我们就称为内部类。代码演示如下图:我们有一个类Outer,然后在Outer内部有一个类Inner,那么这个Inner类就是一个内部类。成员内部类静态内部类局部内部类匿名内部类这篇文章主要讲了一下各种内部的使用情况。说白了,还是要有封装思想,当内部类出现在不同位置时,不要把它当做类,就把它当做与它同级的一个事务来看,这样就简单很多了。

m0_52096593的博客 633

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java基础知识、十二(内部类)

Java中的内部类 一、什么是内部类? 将一个java类定义到另一个java类中的java类就是内部类。 外部类---包含内部类的类。 内部类---外部类中的类。 内部类编译后会形成一个新的字节码文件【外部类类名$内部类类型.class】 二、内部类有几种表现形式分别都是如何编写的?每一种内部类各自都有哪些特征? 1、成员内部类--类中方法外【成员变量】 pubic class H...

weixin_52192654的博客 409

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

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

weixin_30247915的博客 2376

Java内部类(成员内部类、静态嵌套类、方法内部类、匿名内部类)

Java 类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类就被称为内部类。根据定义的方式不同,Java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类四种。

一个喜欢诗和远方的程序媛 1338

【Java内部类详解】

随着Java在企业开发中的广泛应用,内部类作为Java语言的一大特色,不仅能使代码更加清晰、结构更加合理,还能在一定程度上提升封装性。封装性增强:内部类可以直接访问外围类的成员,甚至是私有成员。逻辑分组:当一个类仅在另一个类中使用时,使用内部类可以更好地组织代码,体现两者之间的紧密关系。多种类型:Java中内部类分为成员内部类、局部内部类、匿名内部类和静态内部类,不同类型适用于不同场景。

武帝为此的博客 926

重拾Java基础知识:内部类操作

内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可见性。然而必须要了解,内部类与组合是完全不同的概念,这一点很重要。在最初,内部类看起来就像是一种代码隐藏机制:将类置于其他类的内部。但是,你将会了解到,内部类远不止如此,它了解外部类,并能与之通信,而且你用内部类写出的代码更加优雅而清晰,尽管并不总是这样(而且 Java 8 的 Lambda 表达式和方法引用减少了编写内部类的需求)。

码农的艺术 626

Java 内部类

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

我的博客 1640

java基础知识-内部类

特性成员内部类局部内部类匿名内部类静态内部类位置类成员,与方法平级方法或代码块内部方法内,通常是new语句类成员,用static修饰类名有明确类名有明确类名无类名有明确类名访问修饰符可以使用不能使用不能使用可以使用持有外部类引用是 (Outer.this)是是是访问外部类成员可访问所有可访问所有可访问所有只能访问静态成员。

hxltech的专栏 311

内部类的基础知识

内部类的基础知识 1.定义:在一个类中进行其他类结构的嵌套 class Outer{ private String msg = "Hello World" ; // ******************************** class Inner{ //定义一个内部类 public ...

weixin_43896653的博客 189

java入门(六)_内部类

在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。 目录 一、成员内部类 二、局部内部类 三、静态内部类 四、匿名内部类 一、成员内部类 成员内部类是最普通的内部类,它的定义为位于另一个类的内部,如下实例所示:Inner被称为成员内部类。成员内部类可以无条件访问外...

gaoquan.wu 287
上一篇: Java基础知识(五)--抽象类&接口
下一篇: Java基础知识(七)--集合
新时代Java农民工
博客等级 码龄7年 16粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值