Java(46):九个demo彻底让你明白内部类的语法使用!!

从零实现AR室内导航Demo:基于ARCore与视觉SLAM的完整链路 在商场、地下停车场等GPS失效的室内环境中,传统地图往往无法提供精准的导航指引。增强现实(AR)技术通过摄像头实时叠加虚拟指引,成为解决室内导航难题的重要方向。其核心依赖于视觉SLAM(同步定位与地图构建)技术,利用特征点与惯性数据实时估算设备六自由度位姿,并结合二维码标记进行绝对坐标修正,从而解决定位漂移问题。通过Unity与ARCore构建可交互的AR导航原型,将路径规划、地面锚点渲染与用户位置追踪串成完整链路,可快速验证技术可行性,并为产品级落地提供参考。此类AR导航方案在智慧商场、机场、医院等场景具 阅读详情

2019年5月3日

目录

引入

demo1:普通内部类

demo2:直接创建普通内部类

demo3:静态内部类

demo4:内部类与内部类成员

demo5:内部类与外部类成员调用关系

demo6:内部类访问外部类成员

demo7:匿名内部类是抽象类

demo8:匿名内部类是接口

demo9:内部类作函数实参


引入

一般项目编程中,很少业务代码会使用到内部类,但是我经常看到源码对它应用很多,正巧最近项目也开发一个功能,有用到它的地方,所以在这里做个总结。

demo1:普通内部类

  • 内部类的设计:分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容,这时候就定义内部类;
  •  
  • 下面是初始化Outer,然后调用方法时,去创建一个Inner内部类;

public class InnerClassDemo1 {

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

}

class Outer{
    private int num = 3;

    //内部类
    class Inner{
        //方法
        void show(){
            System.out.println("show [demo-1]	run..."	+	num);
        }
    }

    public void show (){
        //创建内部类
        Inner inner = new Inner();
        inner.show();
    }
}

show [demo-1]    run...3

 

demo2:直接创建普通内部类

  • 直接访问外部类中的内部类中的成员
//直接访问外部类中的内部类中的成员
public class InnerClassDemo2 {
    public static void main(String[] args){
        Outer.Inner inner = new Outer().new Inner();
        inner.show();
    }

}

class Outer{
    private int num = 4;

    class Inner{
        void show(){
            System.out.println("show [demo-2]	run..."	+	num);
        }
    }
}

show [demo-2]    run...4

 

demo3:静态内部类

  • 内部类定义在成员位置上,可以被private、static成员修饰符修饰。被static修饰的内部类只能访问外部类中的静态成员。
public class InnerClassDemo3 {
    public static void main(String[] args){
        Outer.Inner inner = new Outer.Inner();
        inner.show();
    }

}

class Outer{
    private static int num = 6;
    //如果内部类是静态的,相当于一个外部类
    static class Inner {
        void show(){
            System.out.println("show [demo -3] run..."	+	num);
        }
    }
}

 

demo4:内部类与内部类成员

  • 如果内部类是静态的,内部类成员也是静态的,可以不用创建内部类对象,直接调用(内部类方法或者内部类属性)。
  • PS:如果内部类中定义了静态成员,该内部类也必须是静态的!
public class InnerClassDemo4 {
    public static void main(String[] args){
        Outer.Inner.show();
    }
}

class Outer{
    private static int num = 8;
    static class Inner{
        int a = 100;
        static void show(){
            System.out.println("show [8234897]	run..."	+	num);
        }
    }
}

class Outer2{
    private static int num2 = 99;
    static class Inner{
        static int a = 110;
        static void show(){

        }
    }
}

 

demo5:内部类与外部类成员调用关系

  • 为什么内部类能直接访问外部类中的成员呢?    
    那是因为内部类持有了外部类的引用,外部类名.this。
public class InnerClassDemo5 {
    public static void main(String[] args){
        new Outer().method();
    }
}

class Outer{
    int num = 109;

    class Inner{
        int num = 44;
        void show(){
            int num = 5;
            System.out.println("内部类方法的局部变量:"+num);
            System.out.println("內部类成员变量:"+this.num);
            System.out.println("外部类成员变量:"+Outer.this.num);
        }
    }

    void method(){
        new Inner().show();
    }

}

内部类方法的局部变量:5
內部类成员变量:44
外部类成员变量:109

 

demo6:内部类访问外部类成员

  • 内部类定义在局部位置上,也可以直接访问外部类中的成员; 同时可以访问所在局部方法中的局部变量,但必须是被final修饰的。
public class InnerClassDemo6 {
    public static void main(String args []){
        new Outer().method(55);
    }
}

class Outer{
    int num = 3;
    void method(int y){
        //局部方法的变量要是final修饰的,这样内部类才能使用(否则要建立一个拷贝)
        final int finalX = 9;
        class Inner {
            void show(){
                System.out.println("show..."	+ finalX +	","	+	y);
            }
        }
        Inner in = new Inner();
        in.show();
    }

}

 

demo7:匿名内部类是抽象类

/**
 * 匿名内部类
 * 定义:就是内部类的简化写法。
 * 前提:内部类可以继承或实现一个外部类或者接口。
 * 前提:内部类可以继承或实现一个外部类或者接口。
 * 前提:内部类可以继承或实现一个外部类或者接口。(说三遍!!)
 * 格式:new  外部类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)}
 *      简单理解:就是建立一个带内容的外部类或者接口的子类匿名对象。
 * 什么时候使用匿名内部类呢?
 *      通常使用方法是接口类型参数,并且该接口中的方法不超过三个,可以将匿名内部类作为参数传递。
 * 好处:增强阅读性。
 * */
public class InnerClassDemo7 {
    public static void main(String [] args){
        new	Outer().method();
    }

}

//抽象类
abstract class Demo{
    abstract void show();
}


class Outer{
    int num = 4;

    void method(){

        new	Demo(){ //匿名内部类
            void show(){
                System.out.println("show......"	+	num);
            }
        }.show();
    }
}


 

demo8:匿名内部类是接口

public class InnerClassDemo8 {
    public static void main(String[] args){
        new	Outer().method();
    }
}

//接口定义
interface	Inter{
    void	show1();
    void	show2();
}

class Outer{
    public void method(){
        Inter inner2 = new Inter() {
            public void show1() {
                System.out.println("...show1....");
            }

            public void show2() {
                System.out.println("...show2....");
            }
        };
        inner2.show1();
        inner2.show2();
    }
}

demo9:内部类作函数实参

  • 当函数参数是接口类型时,而且接口中的方法不超过三个。可以用匿名内部类作为实际参数进行传递。

public class InnerClassDemo9 {
    public static void main(String[] args){
        show(new Inter() {
            @Override
            public void show1() {
                System.out.println("...show1..."	);
            }

            @Override
            public void show2() {
                System.out.println("...show2..."	);
            }
        });
    }

    public static void show(Inter inter) {
        inter.show1();
        inter.show2();
    }
}

//接口定义
interface	Inter{
    void	show1();
    void	show2();
}

 

4个java经典demo 4个java经典demo,初学java的人入门可以看看, 比较基础,主要对java的语法进行讲解 立即下载

相关推荐

Java 匿名内部类

Java 匿名内部类的学习demo

Java之内部类

类的五大成员:属性,方法,构造器,代码块和内部类内部类字如其名就是在类的内部定义一个类这个类就叫做内部类内部类最大的特点是可以直接访问私有属性,并可以体现类与类之间的包含关系。从种类上说,内部类可以分为四类:首先是定义在外部类的成员位置上的普通内部类(没用static修饰)和静态内部类(使用static修饰)然后是定义在外部类的局部位置上(比如说方法体内)的匿名内部类(无类名)、局部内部类(有类名)我们来一个个看: 在这种定义方式下,成员内部类对象依赖外部类对象而存在,即在创建一个普通内部类对象时首先需

y_k_j_c的博客 1184

【Claude Code】Claude Code 使用指南

本文介绍了AI编码助手Claude的基础和进阶操作指南。基础部分涵盖启动命令、模式切换(自动编辑/Plan/Yolo模式)、资源监控等核心功能,重点讲解了斜杠命令的使用方法。进阶操作详细说明了CLAUDE.md文件的创建与管理,包括项目规范、代码风格等内容的配置,以及如何通过该文件建立持久上下文。同时提醒了使用过程中的安全风险,建议通过配置文件限制AI对关键代码的访问权限。全文提供了完整的操作指引和安全建议,帮助开发者高效安全地使用Claude进行编码辅助。

大家好,我是敖云岚,一个沉迷代码的 “技术玩家”。擅长 Java、C++ 开发,对 MySQL、Redis、RabbitMQ 等技术也颇有研究。博客里既有硬核技术干货,也有诙谐幽默的编程日常分享。愿和你一起,笑着学技术,快乐敲代码! 1万+

Java复习之内部类

这篇博客主要是总结一下内部类的相关使用。

耀相惜 486

FlinkCDC数据同步Bug——同步性能由于写入并行度限制无法提升问题的解决

使用FlinkCDC进行数据同步时,出现增量阶段写入并行度强制为1导致整体同步性能无法提升问题的解决方案

csdn_lan的博客 2078

实验吧 损坏的U盘镜像

        从网站上可以下载一个CTF.hdd的文件,使用winHex打开,可以知道这是一个exFAT格式的文件。        用binwalk检查一下,发现文件中包含两个zip文件,使用foremost进行提取。一个压缩包需要密码解压缩,另一个解压后发现Password.txt文件。说明另一个压缩包的密码与checksum有关。        通过查看exFAT文件系统格式可以得知如何计算...

xingyyn78的博客 3512

Java学习笔记——内部类(成员类,局部类,匿名类)(1)

在这里Outer是外部类,Inner是内部类,可以看出来Inner类在Outer类的里面内部类可以分为四种:成员内部类、局部内部类、匿名内部类、静态内部类按照内部类在类中定义的位置不同,可以分为如下两种格式:成员位置(成员内部类)局部位置(局部内部类)//定义在成员位置,叫做成员内部类//这是成员内部类//定义在局部位置,叫做局部内部类//这是局部内部类。

2401_84009993的博客 1187

Rockchip平台之RK3566/3568 OS02N10

文章摘要 本文主要介绍了200W摄像头传感器OS02N10在RK3566平台上的兼容与适配过程。作者基于之前的400W摄像头兼容经验,针对200W摄像头进行了类似的适配工作。文章详细阐述了RK3566芯片的特性和OS02N10传感器的技术参数,包括分辨率、接口和功耗等。适配过程分为三个关键部分:DTS设备树文件配置(定义I2C地址、电源域和GPIO控制等)、驱动文件开发(寄存器初始化和操作)以及XML和JSON配置文件调整(图像参数设置)。作者特别强调了初始化数组中空寄存器终止条件的重要性,并分享了兼容过程

different_xzh的博客 2412

Java——18个Demo带你玩转Java中的I/O流

Java——18个Demo带你玩转Java中的I/O流

贝尔摩德苦艾酒 8656

OceanBase全局索引深度解析:分布式环境下的高效索引设计与实战优化指南

全局索引(Global Index)是OceanBase数据库在分布式环境中提供的一种跨分区、跨服务器的索引结构,它允许用户创建跨越多个分区的索引,为分布式查询提供高效的数据访问路径。与局部索引(Local Index)不同,全局索引不是与表分区一一对应的,而是作为一个独立的逻辑结构存在。 在分布式数据库系统中,全局索引解决了以下几个关键问题: 跨分区查询性能:当查询条件不包含分区键时,全局索引可以避免全表扫描 唯一性约束维护:全局索引能够保证索引键在全局范围内的唯一性 分布式事务支持:全局索引与主表数

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 717

作为一名爬虫人如何实现千万级数据爬取?

爬虫门槛不高,高就高在往后余生的每一次实操都随时会让你崩溃!Bro

吴秋霖的博客 1万+

迅速彻底明白android 生命周期

首先看一下Android api中所提供的Activity生命周期图(不明白的,可以看完整篇文章,在回头看一下这个图,你会明白的): Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码: ? 1 2 3 4 5 6 7 8 9 pu

tanlongzhiwen1的专栏 417

YOLOv5入门实践(1)——手把手带你环境配置搭建

YOLOv5入门实践第一步,手把手带你配置环境

路人贾的博客 2万+

我想不明白的问题

1 package com.response; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics; 6 import java.awt.Graphics2D; 7 import java.awt.image.BufferedImage; 8 imp...

ZJJJ5201314的博客 217

芒果YOLOv8改进165:损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5% | 旋转检测

YOLOv8改进:旋转检测Loss损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5%

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1150

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

两分钟彻底让你明白Android Activity生命周期(图文)[转]

作者:魏祝林 http://blog.youkuaiyun.com/Android_Tutor/archive/2010/07/28/5772285.aspx 大家好,今天给大家详解一下Android中Activity的生命周期,我在前面也曾经讲过这方面的内容,但是像网上大多数文章一样,基本都是翻译Android API,过于笼统,相信大家看了,会有一点点的帮助 ,但是还不能完全吃透,所以我今天特意...

weixin_30258901的博客 66

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

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

两分钟彻底让你明白Android Activity生命周期(图文)!

两分钟彻底让你明白Android Activity生命周期(图文)! Git@OSC 安卓客户端 1.0 Beta 发布 首先看一下Android api中所提供的Activity生命周期图(不明白的,可以看完整篇文章,在回头看一下这个图,你会明白的): Activity其实是继承了ApplicationContext这个类,我们可以重

codepython的专栏 504

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java中枚举类型Enum的一种使用方式

Java中枚举类型Enum的一种使用方式

weixin_37799575的博客 182

Java中包装类型的大小比较

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34071713的博客 3318

报Java培训班出来真的好就业吗?

肯定是要比自学好就业的,可以看看我们最新的武汉校区Java154班的就业情况,闭眼入39个工作日就业率90.27%,平均薪资9372元,班级拿到过万offer的同学占比41%。还可以看我们学员的offer:不仅黑马武汉校区,程度校区也是频频传出喜报,不难看出目前除了一线城市需要大量Java开发人才之外,新一线、各省会城市,甚至是三、四线城市,对Java开发人才的需求也在增长。数据也来源职友集,侵删。

黑马程序员官方博客 806

使用三种不同循环结构对100以内偶数求和

☞分析思路 在循环里面增加约束,使累加1变成累加2 1 package com.循环; 2 3 /** 4 * 功能描述: 5 * Java使用三种不同循环结构对100以内偶数求和 6 * 7 * @Author: apple. 8 * @Date: 2019/8/14 3:36 PM 9 */ 10 public clas...

diecao9186的博客 1912

Java版阿里云通信短信发送API接口实例(新)

阿里云通信(原名阿里大于)的短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力,支持快速发送短信验证码、短信通知等。

沉默王二 3万+

Java中Math的常用方法

1.Math.round():根据“round”的字面意思“附近、周围”,可以猜测该函数是求一个附近的整数,看下面几个例子就明白。 小数点后第一位<5 正数:Math.round(11.46)=11 负数:Math.round(-11.46)=-11 小数点后第一位>5 正数:Math.round(11.68)=12 负数:Math.round(-11.68)=-12...

Janson_Lin 1224
上一篇: Mysql:连接本地数据库报错:Access denied for user 'root'@'×××××' (using password: YES)
下一篇: LeetCode刷题之旅(简单-12):报数
后台技术汇
博客等级 码龄11年 670粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值