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内部类是定义在另一个类内部的类,可以访问外部类的成员变量和方法。内部类可以分为成员内部类、局部内部类、匿名内部类和静态内部类四种类型。其中,成员内部类和局部内部类必须依托于外部类的实例存在,而静态内部类则可以独立存在。匿名内部类是一种没有名字的内部类,通常用于创建实现某个接口或继承某个类的对象。 阅读详情

相关推荐

手把手教你用RSoft BPM仿真一个1x2光分束器:从参数设置到结果分析全记录

本文详细介绍了使用RSoft BPM模块设计和仿真1×2光分束器的完整流程,包括参数设置、结构建模、仿真配置和结果分析。通过实战指南,帮助读者掌握光波导器件的仿真技术,实现50:50功率分配的设计目标,适用于光通信和集成光学领域的研究与应用。

weixin_30545945的博客 544

Java内部类详解

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

weixin_30578677的博客 3791

HWSD全球土壤数据下载、处理与提取完整指南

全球尺度的科学研究与工程项目中,土壤数据是必不可少的基础底图,而HWSD(和谐世界土壤数据库)凭借其统一的分辨率与属性标准,成为农业区划、生态模型、土地利用变化和水资源评估等领域的通用数据源。深入理解其“栅格存编号、数据库存属性”的核心原理,是高效使用这套数据的关键。通过掌握MDB数据库结构、属性字段含义以及栅格与属性表的关联方法,研究者可以将原始数据转化为可用的研究底图。无论你是需要提取特定区域的土壤属性,还是进行面积统计与点位采样,合理的处理流程都能显著提升工作效率。本文从下载注册开始,一步步梳理数据清

weixin_29056781的博客 313

Java内部类

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

骑个小蜗牛的博客 9306

RV1126开发板性能实测:网络、温度与功耗全解析

本文对RV1126开发板进行了全面的性能实测,重点分析了网络性能、温度表现与功耗特性。测试发现UDP带宽可达500Mbps,但TCP性能受限于协议栈;散热设计对持续性能至关重要,大板子在AI推理和视频推流中表现更稳定。为嵌入式开发者提供了真实的选型参考和优化建议。

d3e4f的博客 262

工业级向量检索核心技术:IVF-PQ原理与全流程解析

在大规模高维向量检索场景中,IVF-PQ(倒排索引结合乘积量化)凭借“粗筛范围+细算距离”的双重加速策略,成为核心解决方案。本文将深入解析其原理与全流程,助力开发者掌握这一关键技术。

进一步有进一步的欢喜~ 1197

全面掌握 Java 内部类

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

yhao的博客 3634

24. SAP 标准产品里使用 OData 服务的一些细节分享

笔者在编写使用事物码 SEGW 开发 SAP OData 服务的系列步骤时,但凡遇到技术上一些疑难问题,喜欢去参照 SAP 标准产品里是如何使用 OData 服务的,不少问题都可以去参考 SAP 标准产品的 OData 服务实现细节来解决。 因此本文记录笔者在编写本教程的过程中,曾经研究过的 SAP OData 服务实现的一些细节,把这些细节分享给大家,希望能起到参考作用。 同时,教程也不断收到一些朋友在评论区留言,对于不少留言的回复,我也是拿 SAP 标准 OData 服务的实现作为论据来回复的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2027

Java基础知识·内部类

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

YJJYXM的博客 225

Mac 下 OpenClaw 安装全记录:从零到一的保姆级图文教程

本文主要介绍了Mac 下 OpenClaw 安装全记录:从零到一的保姆级图文教程,希望能对学习使用OpenClaw 的同学们有所帮助。 文章目录 1. 背景 2. 安装教程 2.1 安装OpenClaw 2.2 配置模型 2.3 对话 3. 后续使用步骤 4. 关闭程序

weixin_43178406的博客 11万+

【23】OpenCV C++实战篇——张正友相机标定【相机标定原理、相机标定流程、标定结果评价、图像畸变矫正】

R是3×3的正交单位矩阵(即旋转矩阵),t为平移向量,R、t与摄像机无关,所以称这两个参数为摄像机的外参数(extrinsicparameter),可以理解为两个坐标原点之间的距离,因其受x,y,z三个方向上的分量共同控制,所以其具有三个自由度。R是3×3的正交单位矩阵(即旋转矩阵),t为平移向量,R、t与摄像机无关,所以称这两个参数为摄像机的外参数(extrinsicparameter),可以理解为两个坐标原点之间的距离,因其受x,y,z三个方向上的分量共同控制,所以其具有三个自由度。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 4479

Java 内部类详解

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

流华追梦的专栏 1314

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

weixin_74013772的博客 254

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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

m0_52096593的博客 633

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

weixin_52192654的博客 409

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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、付费专栏及课程。

余额充值