Java 中的内部类的定义

目录

一、成员内部类

二、静态内部类

三、局部内部类

四、匿名内部类


一、成员内部类

public class InnerClass {
    String name;
    private Integer age;
    static String hobby;

    /**
     * 成员内部类
     * 1、成员内部类中只能定义非静态属性和方法
     * 2、成员内部类中可以访问外部类的成员,私有的可以,静态的也可以
     */
    public class MemberInnerClass {
        //static int num;  报错
        int age = 20;
        public void test() {
            //当本类中没有该属性,则会去外部类中寻找该属性,访问外部类属性
            System.out.println("访问外部类的成员变量:" + name); // => null
            //当本类中有该属性,此时访问的是内部类的 age,this代表的是 MemberInnerClass
            System.out.println("访问内部类的成员变量:" + age); // => 20
            System.out.println("访问外部类的私有成员变量:" + InnerClass.this.age);// =>null
            System.out.println("访问外部类的静态成员变量:" + hobby); // => null
        }
    }
}

成员内部类的创建方式

二、静态内部类

静态内部类的创建方式

三、局部内部类

/**
     * 局部内部类:定义在外部类方法中
     * 1、局部内部类中只能定义非静态属性和方法
     * 2、局部内部类中可以访问外部类的成员,私有的可以,静态的也可以
     * 3、局部内部类只能在方法内创建对象
     * 4、局部内部类只能访问 局部常量
     * 在jdk1.7版本中,如果局部变量在局部内部类中使用必须要显式的加上final
     * 在jdk1.8版本中,final是默认加上的
     * 因为局部变量在方法结束后,就会被销毁,而局部内部类的对象却要等到内存回收机制进行
     * 销毁所以如果是常量的话,那么常量就会被存放在常量池中,
     */
    public void method() {
        int n = 10;
        int m = 10;
        m=20;
        final int[] nums = {1};
        final InnerClass innerClass = new InnerClass();
        class LocalInnerClass {
            public void test() {

                //局部变量被访问时默认添加了 final 关键字
                System.out.println("访问外部类的方法的局部变量:" + n);

                /* Variable 'n' is accessed from within inner class,
                needs to be final or effectively final
                报错,n 可以被内部类访问,需要是常量值或有效的常量值
                因为 m 在外部已经被修改了,它不再是有效的常量值 */
                System.out.println("访问外部类的方法的局部变量:" + m);

                // n=20;  常量不能被修改

                /*不报错,因为 final 修饰的基本数据类型的数值不能被改变,
                但是被 final 修饰的引用变量它的引用对象不能改变,
                但是其中的属性可以改变*/
                nums[0] = 20;
                innerClass.name = "张三";

                //nums=new int[10]; 报错 常量值不能更改
                //innerClass=new InnerClass();  报错

                System.out.println("访问外部类的成员变量:" + name);
                System.out.println("访问外部类的私有成员变量:" + age);
                System.out.println("访问外部类的静态成员变量:" + hobby);
            }
        }
        //只能在被创建的方法中创建该类
        LocalInnerClass localInnerClass = new LocalInnerClass();
        localInnerClass.test();
    }

四、匿名内部类

/**
     * 匿名内部类:本身就是一个对象
     * 1、匿名内部类本身就是一个对象
     * 2、一般在匿名内部类中不会定义属性和方法,因为没有意义
     * 3、匿名内部类的父类一般都是抽象类或者是接口
     * 4、访问变量机制和局部内部类一致
     * 匿名内部类的应用场景
     * 如果一个方法的参数是接口,且这个接口只需要实现一次,那么就可以使用匿名内部类
     * 这个接口的实现每一次都不相同,就可以使用匿名内部类
     */
    public void test() {
        int n = 10; // 默认添加了 final
        //例如创建一个线程
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                // n=20;  报错
                System.out.println("访问外部类的成员变量:" + name);
                System.out.println("访问外部类的私有成员变量:" + age);
                System.out.println("访问外部类的静态成员变量:" + hobby);
            }
        });
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/260867.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

14.中位数贪心

中位数贪心 定理:将数组 a 中的所有元素变为 a 的中位数是最优的。 如何理解? 假定所有的 nums[i] 均位于数轴上的 nums 的位置,要求我们在数轴上找出一个点 t,使得所有 nums[i] 到 t 的距离之和最小。 容易证明 t 不可能位于…

【昆明*线上同步】最新ChatGPT/GPT4科研实践应用与AI绘图技术及论文高效写作

详情点击查看福利:【昆明*线上同步】最新ChatGPT/GPT4科研实践应用与AI绘图技术及论文高效写作 目标: 1、熟练掌握ChatGPT提示词技巧及各种应用方法,并成为工作中的助手。 2、通过案例掌握ChatGPT撰写、修改论文及工作报告,提供…

Actuator内存泄露及利用Swagger未授权自动化测试实现

目录 0x00 前言 0x01 Actuator 泄露及利用 1、Actuator heapdump 内存泄露 2、知道泄露后如何进一步利用 3、如何发现 Actuator 泄露(白盒/黑盒) 0x02 Swagger自动化测试 1、什么是Swagger? 2、PostmanBurpSuiteXray 联动 3、思考 0x…

XC8284B 高效率12MHz,34V升压LED驱动器 LED背光驱动、闪光灯

XC8284B是一个升压转换器驱动多达9个系列白色LED的单节离子电池设计的。其300mV反馈电压降低功率损耗,提高效率。优化后的工作频率可以满足LC滤波器小值和低工作电流的要求,具有较高的效率。内置软启动功能,可减少浪涌电流。微型封装类型为节…

TensorRT 简单介绍

一、TensorRT 对于算法工程师来说,相信大家已经对TensorRT耳熟能详了,那么这个TensorRT是什么呢? 其实,TensorRT是一个可以在NVIDIA各种GPU硬件平台下运行的推理引擎,同时也是一个高性能的深度学习推理优化器&#x…

在ClickHouse数据库中启用预测功能

在这篇博文中,我们将介绍如何将机器学习支持的预测功能与 ClickHouse 数据库集成。ClickHouse 是一个快速、开源、面向列的 SQL 数据库,对于数据分析和实时分析非常有用。该项目由 ClickHouse, Inc. 维护和支持。我们将探索它在需要数据准备以…

SDK和API的区别

简单一句话:api就是一个函数接口,函数内容的功能无法独立运行,只有连接到服务器才可以发挥作用。 sdk是开发工具包,含有功能和函数接口,可以独立运行。 废话篇: 内容不同:SDK为API 提供能量源。…

【扩散模型】8、DALL-E2 | 借助 CLIP 的图文对齐能力来实现文本到图像的生成

文章目录 一、背景二、方法2.1 Decoder2.2 Prior 三、图像控制3.1 Variations3.2 Interpolations3.3 Text Diffs 四、探索 CLIP 的潜在空间五、文本到图像的生成5.1 先验的重要性5.2 人类评价5.3 多样性和保真性的平衡5.3 在 COCO 上对比 论文:DALLE.2 代码&#x…

Redis 中的 RDB 和 AOF 持久化机制

一、Redis 持久化简介 Redis 的持久化功能是区别于 Memcached 显著特性,数据持久化可以保证系统在发生宕机和重启后数据不会丢失,对于 redis 这种存储在内存中的数据库显得尤为重要。 在 Redis 4.0 以前数据持久化的方式主要有两种 RDB(Redi…

初学gitrepo的种种

经过各种折腾之后,发现git其实还是很简单的; 首先你需要两台机器,一台作为服务器,一台作为开发机器,开发机器从服务器上拉取代码。 目 目录 git建仓 开发机器拉取代码 初始化仓代码 repo管理 repo工具的下载 …

Ansible的脚本---Playbook剧本编写

playbook的组成部分 1、 tasks:任务 在目标主机上需要执行的操作。使用模块定义这些操作。每个任务都是一个模块的调用。 2、 variables:变量 用于存储和传递数据。类似于shell脚本中的变量。变量可以自定义。可以在playbook当中定义为全局变量&…

Go 语言实战:掌握正则表达式的应用与技巧

Go 语言实战:掌握正则表达式的应用与技巧 1. 引言2. 正则表达式基础2.1 基本概念2.2 常见元素2.3 基本示例 3. Go语言中的正则表达式库3.1 引入regexp包3.2 编译正则表达式3.3 使用正则表达式3.4 示例代码 4. 常用正则表达式函数及使用示例4.1 MatchString4.2 FindS…

配置自定义RedisTemplate 解决redis序列化java8 LocalDateTime

目录 配置自定义RedisTemplate 引入依赖 配置连接redis 编写测试类 出现问题 配置序列化 解决redis序列化java8 LocalDateTime 问题背景 问题描述 问题分析 解决方案一(全局) 解决方案二(单个字段) 配置自定义RedisTe…

在GitHub找开源项目

在 GitHub 的搜索框里: 使用搜索关键词可以在 GitHub 上快速的找你需要的开源项目: 限制搜索范围 通过 in 关键词 (大小写不敏感) 限制搜索范围: 公式搜索范围in:name xxx项目名包含xxxin:description xxx项目描述包含xxxin:readme xxx项目…

thymeleaf的个人总结

thymeleaf的java代码的用法 <!-- 静态页面模版引擎的依赖 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 我们在这里要配置一个具体的模版…

CVE-2023-37582 Apache RocketMQ NameServer远程代码执行漏洞

上集回顾 CVE-2023-33246 RocketMQ RCE漏洞 影响版本 Apache RocketMQ NameServer 5.0.0 &#xff5e; 5.1.1 Apache RocketMQ NameServer 4.0.0 &#xff5e; 4.9.6 参考 https://xz.aliyun.com/t/12691 环境搭建 拉取镜像 docker pull apache/rocketmq:4.9.6 docker …

Bugku- misc-插画-WP

下载得到一个zip&#xff0c;用WinRAR打开时发现有注释 注释&#xff1a; RnJlZV9GaWxlX0NhbW91ZmxhZ2UsIOmimOebruWlveWDjaYraMuumHjeimgeeahOagtWtkC4u 明显是base64&#xff0c;解码得到&#xff1a;Free_File_Camouflage, 题目好像是挺重要的样子… 百度发现这是一款隐写…

微电网优化(Matlab复现)— 微电网两阶段鲁棒优化经济调度方法_刘一欣

论文链接&#xff1a;微电网两阶段鲁棒优化经济调度方法 - 中国知网 代码链接&#xff1a;https://m.tb.cn/h.5Mg7fCo?tkhnpmWgZiv2R 复现效果&#xff1a; 运行环境&#xff1a;Matlab 2020bCplexyalmip 1 微电网结构 图 1 所示为典型的微电网结构&#xff0c;由可控分布式…

uniapp实现豆瓣电影微信小程序(附源码)

演示 运行 基于本地代理1 npm run dev:proxy1基于本地代理2 npm run dev:proxy2基于nginx 代理 npm run dev:nginx目录结构 |__ douban # 本地代理|__ app.js # 方式 1|__ proxy.js …

基于vue-cli快速发布vue npm 包

一、编写组件 1. 初始化项目并运行 vue create vue-digital-countnpm run serve2. 组件封装 新建package文件夹 ​ 因为我们可能会封装多个组件&#xff0c;所以在src下面新建一个package文件夹用来存放所有需要上传的组件。 ​ 当然&#xff0c;如果只有一个组件&#xff…