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.mzph.cn/news/876372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java pdf转base64图片工具类

java pdf转base64图片工具类 依赖工具类 依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.13</version></dependency>工具类 import org.apache.pdfbox.pdmodel.PDDocume…

组串式逆变器发展趋势

组串式逆变器单机功率不断增加 组串式逆变器的单体容量一般在100KW以下&#xff0c;在行业发展初期&#xff0c;一般以较小功率的组串式逆变器为主&#xff0c;随着功率模块等技术的不断发展&#xff0c;市场领先企业不断研发和推出单机功率较大的组串式逆变器。 随着单机功率的…

【攻防演练】【含poc和修复建议】海康威视综合安防管理平台 远程命令执行漏洞

使用防护类设备进行防护&#xff0c;限制访问/center/api/installation/detection 路径&#xff0c;拦截请求中出现的恶意命令注入 POST /center/api/installation/detection HTTP/1.1 Host: User-Agent: Mozilla/5.0 (Macintosh; Intel Mac Os X 10 12_6) AppleWebKit/537.36…

sheng的学习笔记-AI-公式-指数加权移动平均(EWMA)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 基础知识 指数加权移动平均&#xff08;Exponential Weighted Moving Average&#xff09;&#xff0c;是一种常用的序列处理方式 看例子&#xff0c;首先这是一年365天的温度散点图&#xff0c;以天数为横坐标&#xff0…

牛客AB5 | 点击消除

描述 牛牛拿到了一个字符串。 他每次“点击”&#xff0c;可以把字符串中相邻两个相同字母消除&#xff0c;例如&#xff0c;字符串"abbc"点击后可以生成"ac"。 但相同而不相邻、不相同的相邻字母都是不可以被消除的。 牛牛想把字符串变得尽可能短。他想知…

操作系统概念(黑皮书)阅读笔记

操作系统概念&#xff08;黑皮书&#xff09;阅读笔记 进程和内存管理部分章节 导论&#xff1a; 操作系统类似于政府&#xff0c;其本身不能实现任何有用功能&#xff0c;而是提供一个方便其他程序执行有用工作的环境 ​ 个人理解&#xff1a;os是government的作用&#xff0…

【学一点儿前端】本地或jenkins打包报错:getaddrinfo ENOTFOUND registry.nlark.com.

问题 今天jenkins打包一个项目&#xff0c;发现报错了 error An unexpected error occurred: "https://registry.nlark.com/xxxxxxxxxx.tgz: getaddrinfo ENOTFOUND registry.nlark.com". 先写解决方案 把yarn.lock文件里面的registry.nlark.com替换为registry.npmmi…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十八章 中断下文之tasklet

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

全球性“微软蓝屏”事件及其对网络安全和系统稳定性的深远影响

近日&#xff0c;一次由微软视窗系统软件更新引发的全球性“微软蓝屏”事件&#xff0c;不仅成为科技领域的热点新闻&#xff0c;更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件源于美国电脑安全技术公司“众击”提供的一个带有“缺陷”的软件更新&#xff0c;它如…

女人内裤怎么洗才是最干净?内衣裤洗衣机怎么样?哪个牌子更好?

最近刚好用到一款比较好用的洗内衣裤洗衣机&#xff01;如果你也和我一样有洗内衣裤烦恼的&#xff0c;或者可以看看&#xff01; 内衣裤作为贴身穿的衣服&#xff0c;我是不会把它和外衣一起清洗的&#xff0c;而家里面的大洗衣机已经担起了清洗外衣的工作&#xff01; 朋友们…

.NetCore定时刷新第三方Token

在.NET Core中实现定时刷新第三方Token的功能&#xff0c;你可以使用多种方法&#xff0c;包括使用System.Threading.Timer、IHostedService&#xff08;特别是用于ASP.NET Core应用&#xff09;&#xff0c;或者结合Quartz.NET等定时任务框架。以下我将介绍如何使用IHostedSer…

发票识别接口图片调用格式与python集成方式

企业员工在工作的过程中会接触到很多的发票&#xff0c;在报销前&#xff0c;需要将发票上的如发票代码、号码、日期、金额、校验码等全票面信息录入到报账系统中&#xff0c;如果一张一张手动去复制粘贴&#xff0c;将会耗费大量的人力、无力、时间成本&#xff0c;且人工手动…

JVM 内存分析工具 Memory Analyzer Tool(MAT)入门(一)

一、打开 jvisualvm &#xff08;VisualVM 是一款集成了 JDK 命令行工具和轻量级剖析功能的可视化工具。 设计用于开发和生产。&#xff09; 打开 jvisualvm.exe 工具会出现如下一些监控指标 二、VisualVM可以根据需要安装不同的插件&#xff0c;每个插件的关注点都不同&#x…

uniapp vue3 使用画布分享或者收藏功能

使用HBuilder X 开发小程序&#xff0c;大多数的画布插件很多都是vue2的写法&#xff0c;vue3的很少 我自己也试了很多个插件&#xff0c;但是有一些还是有问题&#xff0c;不好用 海报画板 - DCloud 插件市场 先将插件导入项目中 自己项目亲自用过&#xff0c;功能基本是完善…

谷粒商城-性能压测

1.压力测试 在项目上线前对其进行压力测试(以每个微服务为单元) 目的:找到系统能承载的最大负荷,找到其他测试方法更难发现的错误(两种类型:内存泄漏,并发与同步). 1.性能指标 响应时间(Response Time (RT)): 响应时间 指用户从客户端发起一个请求开始,到客户端接收到从服务…

python实现和mysql一起实现数据库的增删改查

要在 Python 中使用 MySQL 数据库进行增删改查&#xff08;CRUD&#xff09;操作&#xff0c;你可以使用 pymysql 库。以下是一些示例代码&#xff0c;展示如何实现这些操作。 首先&#xff0c;确保你已经安装了 pymysql。如果没有安装&#xff0c;可以通过以下命令安装&#…

543.二叉树的直径

给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 class Solution{// 全局变量int ans 0;public int diameterOf…

【第五天】HTTPS和HTTP有哪些区别,HTTPS的工作原理

HTTPS和HTTP的区别&#xff1a; 1.安全性&#xff1a; HTTP是明文传输协议&#xff0c;数据在传输的过程中不加密&#xff0c;容易被窃听和篡改。HTTPS通过使用SSL或TLS协议对数据进行加密&#xff0c;确保传输的数据在网络上是安全的&#xff0c;不容易被窃取和篡改。 2.加…

leetcode-104. 二叉树的最大深度

题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,n…

PyQt5之PyQt5 vs PySide6: 选择Python GUI框架的对比分析

PyQt5 vs PySide6: 选择Python GUI框架的对比分析 在Python世界中,当谈到创建图形用户界面(GUI)应用程序时,PyQt5和PySide6经常被提及。这两个框架都是基于强大的Qt库的Python绑定,但它们有着微妙的差异。本文将深入比较这两个框架,帮助您做出明智的选择。 背景简介 PyQt5: …