Java语言程序设计——篇九(1)

在这里插入图片描述

     🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

内部类

  • 概述
    • 内部类—内部类的分类
      • 成员内部类
        • 实战演练
      • 局部内部类
        • 实战演练
      • 匿名内部类
        • 实战演练
      • 静态内部类
        • 实战演练

概述

内部类或嵌套类:在一个类的内部定义另一类(接口、枚举或注解)
格式:

public class OuterClass {//成员变量和方法class InnerClass{//一个内部类的定义//成员变量和方法}}

优点:对只在一处使用的类进行分组;提高封装性;增强代码的可读性

内部类—内部类的分类

在这里插入图片描述
按内部类是否被static修饰,分为静态的和非静态的

成员内部类

  • 是定义在外层类的类体中且没有用static修饰。
  • 说明:
    1)在成员内部类中可以定义自己的成员变量和方法,也可以定义自己的构造方法。
    2)访问修饰符可是private、public、protected或缺省。
    3)成员内部类中不能定义static变量和static方法。
实战演练
public class OuterClass {	private int x = 200;class InnerClass{int y = 300;public int calculate(){return x + y;}}public void makeInner(){InnerClass ic = new InnerClass();System.out.println(ic.calculate());}public static void main(String[] args){OuterClass outer = new OuterClass();
OuterClass.InnerClass inner=outer.new InnerClass();
//OuterClass.InnerClass inner = new OuterClass.new InnerClass(); System.out.println(inner.calculate());//500}
}

生成两个文件:OuterClass.class、OuterClass$InnerClass.clss

注意:
在这里插入图片描述

局部内部类

  • 局部内部类是在方法体或语句块内定义类。
  • 在方法体或语句块 (包括方法、构造方法、局部块、初始化块或静态初始化块) 内部定义的类称为局部内部类(local inner class)。
  • 只在定义它的块内有效,同局部变量一样,在定义它的块之外不能访问,因此也不能有任何访问修饰符。
实战演练
public class OuterClass2 {public String x = "hello";public void makeInner(int param){final String y = "local variable";class InnerClass{public void seeOuter(){System.out.println("x = " + x);System.out.println("y = " + y);System.out.println("param = " + param);}}new InnerClass().seeOuter();}public static void main(String[] args){OuterClass2 oc = new OuterClass2();oc.makeInner(47);}
}

在这里插入图片描述

注意:
在这里插入图片描述

匿名内部类

  • 将类的定义和实例的创建在一起完成,或者说在定义类的同时就创建一个实例。以这种方式定义的没有名字的类称为匿名内部类(anonymous inner class)。
  • 一般格式如下:
  new TypeName(){继承的类名或实现接口名/* 此处为类体 */可覆盖超类或实现接口的方法}

注:匿名内部类继承类或实现接口,不需要使用extends或implement关键字。不能同时实现继承类和实现接口。内部类体中,不能定义构造方法。
赋给引用变量:

 TypeName  obj = new TypeName(){定义类的同时用new关键字创建类的实例;即定义和创建对象在同一个位置/* 此处为类体 */};

直接传递给方法:

 someMethod(new TypeName() {构建对象作为方法调用的参数/* 此处为类体 */});
实战演练

【例】匿名内部类继承Animal类,覆盖eat()方法,同时创建匿名类的实例,并用dog指向它

class Animal{public void eat(){System.out.println("I like eat anything.");}
}
public class AnimalTest {public static void main(String[] args){Animal dog = new Animal(){@Overridepublic void eat(){System.out.println("I like eat bones.");}};dog.eat();}	
}

【例】接口Printable声明print抽象方法,在主函数中声明一个接口变量,并创建实现接口的对象

interface Printable{public abstract void print(String message);
}
public class PrintableTest {public static void main(String[] args){Printable printer = new Printable(){@Overridepublic void print(String message){System.out.println(message);}};printer.print("这是惠普打印机");}
}
  • 匿名内部类一个重要的应用是编写JavaFX图形界面的事件处理程序
例:为button注册事件处理器button.setOnAction(new EventHandler<ActionEvent>(){@Overridepublic void handle(ActionEvent event){label.setText("你点击了确定按钮");}
});

静态内部类

静态内部类定义在外层类中,使用static修饰,静态内部类也称嵌套类(nested class)。
一般格式如下:

public class OuterClass {//成员变量和方法static class InnerClass{//成员变量和方法}}
  • 静态内部类中可以定义静态成员;
  • 静态内部类只能访问外层类的静态成员;(不具备外层类实例的应用,静态内部类方法不能使用this关键字访问外层类实例成员;但可以访问外层类的static成员)
  • 创建静态内部类的实例不需要先创建一个外层类的实例。
实战演练

【例】静态内部类实际是一种外部类

public class MyOuter {private static int x = 100;public static class MyInner{private String y = "hello";public void innerMethod(){System.out.println("x = " + x);System.out.println("y = " + y);}}public static void main(String[] args){MyOuter.MyInner snc = new MyOuter.MyInner();snc.innerMethod();}
}
public class MyOuter2 {String s1 = "Hello";static String s2 = "World";interface MyInterface{void show();}static class MyInner2 implements MyInterface{@Overridepublic void show() {
System.out.println("s1 = " + new MyOuter2().s1);System.out.println("s1 = " + s2);}		}public static void main(String[] args){
MyOuter2.MyInner2 inner2 = new MyOuter2.MyInner2();inner2.show();}
}

博主用心写,读者点关注,互动传真情,知识不迷路

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络】RIP路由协议实验

一&#xff1a;实验目的 1&#xff1a;掌握在路由器上配置RIPv2。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS交换机、网线、内网网卡接口、Windows 2019操作系统的计算机等。具体为&#xff1a;三层交换机1台、路由器2台。 软件&#xff1a;wireshark软件、记…

virtualbox ubuntu扩充磁盘大小

首先在虚拟存储管理里面修改磁盘大小 然后安装gparted sudo gparted 打开管理工具 选中要调整的区域右键选择调整区域大小 拖动上述位置就可以实现扩容。完成后点击应用 然后重启虚拟机即可。

WSL快速入门

1. WSL介绍 WSL文档地址&#xff1a;https://learn.microsoft.com/zh-cn/windows/wsl WSL&#xff1a;全称 Windows Subsystem for Linux&#xff0c;即windows上的Linux子系统&#xff08;虚拟机工具&#xff09;。是Win10推出的全新特性&#xff0c;可以更轻量地在Windows系统…

vue3中element tabs标签页 tab-click事件无法拿到最新值

element tabs标签页有2个常用的事件方法&#xff0c;tab-click 和 tab-change tab-click事件 tab-click事件&#xff1a;当用户点击Tab标签时触发&#xff0c;有2个返回参数&#xff0c; (pane: TabsPaneContext, ev: Event) pane.props.name 中可以获取到最新的tab页签绑定值 …

定时器+外部中断实现NEC红外线协议解码

一、前言 1.1 功能介绍 随着科技的进步和人们生活水平的提高&#xff0c;红外遥控器已经成为了日常生活中不可或缺的电子设备之一&#xff0c;广泛应用于电视、空调、音响等多种家电产品中。 传统的红外遥控器通常只能实现预设的有限功能&#xff0c;无法满足用户对设备更加智…

WHAT - 屏幕 dpr 设备像素比率

目录 一、设备像素比率 (DPR)二、DPR 与每英寸点数 (DPI)三、dpr2 和 dpr1 有什么区别设备像素比率为 1 (DPR 1)设备像素比率为 2 (DPR 2)实际区别示例代码例子 一、设备像素比率 (DPR) DPR&#xff08;设备像素比率&#xff09;常常在讨论屏幕分辨率和显示质量时使用。 设…

RockyLinux 9 PXE Server bios+uefi 自动化部署 RockLinux 8 9

pxe server 前言 PXE&#xff08;Preboot eXecution Environment&#xff0c;预启动执行环境&#xff09;是一种网络启动协议&#xff0c;允许计算机通过网络启动而不是使用本地硬盘。PXE服务器是实现这一功能的服务器&#xff0c;它提供了启动镜像和引导加载程序&#xff0c;…

1.2 单链表定义及操作实现(链式结构)

1.单链表定义 链式存储&#xff1a;用一组任意的存储单元存储线性表中的数据元素。用这种方法存储的线性 表简称线性链表。 为了正确表示结点间的逻辑关系&#xff0c;在存储每个结点值的同时&#xff0c;还必须存储指示其直接 后继结点的地址&#xff08;或位置&#xff09;…

故障诊断 | 基于Transformer故障诊断分类预测(Matlab)

文章目录 预测效果文章概述程序设计参考资料预测效果 文章概述 Transformer故障诊断/分类预测 | 基于Transformer故障诊断分类预测(Matlab) Transformer 模型本质上都是预训练语言模型,大都采用自监督学习 (Self-supervised learning) 的方式在大量生语料上进行训练,也就是…

Java解析epub电子书文件实战demo

如何使用 Java、Spring Boot 和 Epublib 库解析存储在阿里云对象存储服务&#xff08;OSS&#xff09;上的 EPUB 文件。这里将指导您完成设置必要依赖项、配置 OSS 客户端以及编写服务以读取和提取 EPUB 文件章节的全过程。 步骤1&#xff1a;添加依赖项 首先&#xff0c;将 E…

微信小程序消息订阅处理实践

微信小程序提供订阅消息功能&#xff0c;分为一次性订阅消息、长期订阅消息。长期订阅消息目前只针对民生、金融、教育等有线下服务场景的类目开放。这些只是大类&#xff0c;并不表示所包含的所有二级类目都能申请长期订阅消息&#xff0c;具体看官方文档。 另一个长期订阅消…

RNN(一)——循环神经网络的实现

文章目录 一、循环神经网络RNN1.RNN是什么2.RNN的语言模型3.RNN的结构形式 二、完整代码三、代码解读1.参数return_sequences2.调参过程 一、循环神经网络RNN 1.RNN是什么 循环神经网络RNN主要体现在上下文对理解的重要性&#xff0c;他比传统的神经网络&#xff08;传统的神…

04 卷积神经网络

目录 1. 基本概念 1.1 卷积神经网络 1.2 卷积 1.3 汇聚&#xff08;池化&#xff09; 2. CNN网络架构及参数学习 2.1 网络架构 2.2 参数学习 3. 典型的卷积神经网络 3.1 LeNet-5 3.2 AlexNet 3.3 Inception网络 3.4 残差网络 4. 其他卷积方式 1. 基本概念 1.1 …

ReentrantReadWriteLock详解

目录 ReentrantReadWriteLock详解1、ReentrantReadWriteLock简介2、ReentrantReadWriteLock类继承结构和类属性3、ReentrantReadWriteLock的读写锁原理分析4、ReentrantReadWriteLock.WriteLock类的核心方法详解非公平写锁的获取非公平写锁的释放公平写锁的获取公平写锁的释放 …

全网最最实用--模型高效推理:量化基础

文章目录 一、量化基础--计算机中数的表示1. 原码&#xff08;Sign-Magnitude&#xff09;2. 反码&#xff08;Ones Complement&#xff09;3. 补码&#xff08;Twos Complement&#xff09;4. 浮点数&#xff08;Floating Point&#xff09;a.常用的浮点数标准--IEEE 754(FP32…

ElasticSearch核心之DSL查询语句实战

什么是DSL&#xff1f; Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。 DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。目前常用的框架查询方法什么的底层都是构建DSL语句实现的&#xff0c;所以你必…

跨境电商独立站:Shopify/Wordpress/店匠选哪个?

在面对不断增加的平台运营压力时&#xff0c;不少跨境电商的商家逐渐将注意力转向建立自己的独立站。据《中国跨境出口电商发展报告&#xff08;2022&#xff09;》所示&#xff0c;中国拥有的独立站数量在2022年已接近20万个&#xff0c;这表明独立站已成为卖家拓展海外市场的…

IndentationError:unindent does not match any outer indentation level

IndentationError:unindent does not match any outer indentation level 目录 IndentationError:unindent does not match any outer indentation level 【常见模块错误】 【解决方案】 原因分析&#xff1a; 解决方法&#xff1a; 示例&#xff1a; 欢迎来到我的主页&am…

正则采集器——前端搭建

前端使用有名的饿了么管理后台&#xff0c;vue3版本vue3-element-admin&#xff0c;首先从gitee中克隆一个vue3-element-admin模板代码vue3-element-admin: Vue3 Element Admin开箱即用的中后台管理系统前端解决方案&#xff0c;然后在此基础上进行开发。 1、修改vite.config.…

matlab仿真 数字信号载波传输(下)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第七 章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; clear all M8; msg[1 4 3 0 7 5 2 6]; ts0.01; T1; %t0:ts:T; t0:ts:T-ts; %x0:ts:length(msg); x0:ts:length(msg)-ts; f…