java面向对象编程--高级(二)
目录
一、内部类
1.1 成员内部类
1.1.1 静态和非静态
1.1.2 调用外部类的结构
1.2 局部内部类
1.2.1 非匿名和匿名
1.2.2 比较
1.2.3 练习
二、枚举类
2.1 枚举类讲解
2.2 代码实现
三、包装类
3.1 包装类与基本数据类型
3.2 练习
3.3 补充
四、自动生成单元测试
一、内部类
1.什么是内部类?
- 将一个类A定义在另一个类B里面,里面的那个类A就称为`内部类(Innerclass)',类B则称为`外部类(0uterClass)
2.为什么需要内部类?
- 当一个事物A的内部,还有一个部分需要一个完整的结构B进行描述,而这个内部的完整的结构B又只为外部事物A提供服。
- 遵循`高内聚、低耦合'的面向对象开发原则。
3.内部类的分类

声明位置:
- 成员内部类:直接声明在外部类中
- 局部内部类:声明在方法内,构造器内,代码块内
1.1 成员内部类
成员内部类的理解:定义在外部类中的一个类。它可以访问外部类的所有成员,包括私有成员。
1.1.1 静态和非静态
要创建成员内部类的实例,首先需要创建外部类的实例,然后通过这个实例创建内部类的实例。
//非静态成员内部类
class Outer {private String Field = "外部";class Inner {void display() {System.out.println("访问: " + Field);}}
}public class Main {public static void main(String[] args) {Outer outer = new Outer(); // 创建外部类实例Outer.Inner inner = outer.new Inner(); // 创建内部类实例inner.display(); // 调用内部类的方法}
}
静态内部类不依赖于外部类的实例,可以直接通过外部类的类名来创建
//静态成员内部类
class Outer {private static String Field = "静态外部类";static class Inner {void display() {System.out.println("访问: " + Field);}}
}public class Main {public static void main(String[] args) {Outer.Inner Inner = new Outer.Inner(); // 直接通过外部类名创建Inner.display(); // 调用静态内部类的方法}
}
1.1.2 调用外部类的结构
public class Outer {private String Field = "外部类的私有字段";// 成员内部类class Inner {void display() {// 直接访问外部类的私有成员System.out.println("访问外部类的字段: " + Field);}}public void createInner() {Inner inner = new Inner();inner.display();}public static void main(String[] args) {Outer outer = new Outer();outer.createInner(); // 创建内部类并调用方法}
}
1.2 局部内部类
1.2.1 非匿名和匿名
package test3;public class OuterClassTest {public void mathod() {class A {//局部内部类//声明属性和方法}}//1.提供接口实现类的对象public Comparable getInstance() {class MyComparable implements Comparable{@Overridepublic int compareTo(Object o) {return 0;}}MyComparable myComparable = new MyComparable();return myComparable;//2.提供接口实现类的匿名对象/* public Comparable getInstance() {class MyComparable implements Comparable{ @Overridepublic int compareTo(Object o) {return 0;}}return new MyComparable();}*///3.提供接口的匿名实现类的对象/*Comparable m = new Comparable() {@Overridepublic int compareTo(Object o) {return 0;}};return 0;*///4.提供接口的匿名实现类的匿名对/*return new Comparable(){@Overridepublic int compareTo(Object o) {return 0;}};*/}
}
1.2.2 比较
- 非匿名局部内部类:有名字,可以创建多个实例,可以访问方法的局部变量(需要是final或effectively final)。
- 匿名局部内部类:没有名字,通常只用一次,方便快捷,适用于临时的任务或事件处理。
1.2.3 练习
创建一个匿名内部类,继承于Object,在其中声明一个 public void test() 打印猪八戒
public class OuterClassTest {public static void main(String[] args) {new Object(){public void test(){System.out.println("猪八戒");}}.test();}
}
二、枚举类
2.1 枚举类讲解
理解:枚举(enum)是一种特殊的类,用于表示一组常量。
使用:
- 开发中,如果针对于某个类,其实例是确定个数的。则推荐将此类声明为枚举类。
- 如果枚举类的实例只有一个,则可以看做是单例的实现方式。
枚举类实现接口的操作
- 枚举类实现接口,在枚举类中重写接口中的抽象方法。当通过不同的枚举类对象调用此方法时,执行的是同一个方法
- 让枚举类的每一个对象重写接口中的抽象方法。当通过不同的枚举类对象调用此方法时,执行的是不同的实现的方法。
2.2 代码实现
例子:枚举类中创建四个季节,春夏秋冬,并实现接口操作
package test4;import static java.time.chrono.JapaneseEra.values;public class seasonTest {public static void main(String[] args) {Season[] values = Season.values();for (int i = 0; i < values().length; i++) {values[i].show();}}
}interface info{void show();
}
enum Season implements info{//默认的父类为Object,不需要特意声明//枚举类开头声明变量SPRING("春天","生机勃勃"){@Overridepublic void show() {System.out.println("春天在哪里");}},SUMMER("夏天","夏日炎炎"){@Overridepublic void show() {System.out.println("夏天吃雪糕");}},AUTUMN("秋天","秋高气爽"){@Overridepublic void show() {System.out.println("秋天的第一别奶茶");}},WINTER("冬天","白雪皑皑"){@Overridepublic void show() {System.out.println("冬天吃东北烤鸡架");}};private final String name;private final String Desc;Season(String name, String desc) {this.name = name;Desc = desc;}public String getName() {return name;}public String getDesc() {return Desc;}@Overridepublic String toString() {return "季节{" +"name='" + name + '\'' +", Desc='" + Desc + '\'' +'}';}//情况1 :枚举类中直接重写,调用时全部一样/* @Overridepublic void show() {System.out.println("这是季节中的一个");}*/
}
结果:

三、包装类
3.1 包装类与基本数据类型
1.为什么要使用包装类?
- 为了使得基本数据类型的变量具备引用数据类型变量的相关特征(比如:封装性、继承性、多态性),我们给各个基本数据类型的变量都提供了对应的包装类。
2. 有哪些包装类:

3.2 练习
如何转换:
(装箱)基本数据类型--->包装类:
- 使用包装类的构造器
- (建议)调用包装类的value0f(xxxxX)
(拆箱)包装类--->基本数据类型: 调用包装类的xxxValue()
注意:
- 原来使用基本数据类型变量的位置,改成包装类以后,对于成员变量来说,其默认值变化了!
1. 基本数据类型转换为包装类(装箱)
public class BoxingExample {public static void main(String[] args) {// 使用构造函数装箱int primitiveInt = 10;Integer wrappedInt = new Integer(primitiveInt);// 使用静态方法装箱Integer wrappedInt2 = Integer.valueOf(primitiveInt);System.out.println("装箱结果: " + wrappedInt);System.out.println("使用静态方法装箱结果: " + wrappedInt2);}
}
2. 包装类转换为基本数据类型(拆箱)
public class UnboxingExample {public static void main(String[] args) {// 装箱Integer wrappedInt = Integer.valueOf(10);// 使用方法拆箱int primitiveInt = wrappedInt.intValue();// 自动拆箱int autoUnboxedInt = wrappedInt; // Java 会自动转换System.out.println("拆箱结果: " + primitiveInt);System.out.println("自动拆箱结果: " + autoUnboxedInt);}
}
3. 自动装箱与自动拆箱
- 自动装箱:当基本数据类型赋值给包装类时,Java 自动将其转换为相应的包装类对象。
- 自动拆箱:当包装类对象赋值给基本数据类型时,Java 自动将其转换为相应的基本数据类型。
public class numberTest {int i1 = 10;Integer i11 = i1;Integer ii2 = i1+1;Boolean b1 = true;Float f1 = 12.4F;//上述都是自动装箱//下述是自动拆箱int i2 = i11;boolean b2 = b1;float f2 = f1;}
3.3 补充
如下图示:

基本数据类型、包装类 ---> String类型:
- ① 调用String的重载的静态方法value0f(xxx xx)
- ② 基本数据类型+ " "
String类型 ---> 基本数据类型、包装类:
- 调用包装类的静态方法:parseXxx()
代码示例:
public class numberTest {@Test//String类型转成基本数据类型 包装类public void test1(){String i1 = "123";int a1 = Integer.parseInt(i1);System.out.println(a1 + 10);String B1 = "true";boolean b2 = Boolean.parseBoolean(B1);System.out.println(b2);//错误类型/*String c1 = "123b";Integer d1 = Integer.parseInt(c1);System.out.println(d1);*/}@Testpublic void test2(){//方式1Integer i1 = 11;String i2 = String.valueOf(i1);System.out.println(i2);Boolean B1 = true;String b2 = String.valueOf(B1);System.out.println(b2);//方式2String C1 = i2+"";String C2 = b2+"";System.out.println(C2);System.out.println(C1);}}
四、自动生成单元测试
联网的情况下,输入 @Test,出现红灯并点击,选择Junit4.x下载
由于测试单元的格式是固定的,可以在IDEA中直接设计自动生成单元测试的模板。
找到文件,点击设置

进入设置后,点击编辑器,找到实时模板

有+号点击,先生成一个模板组,命名自拟

选中新建的组,点击+号,生成实时模板,缩写为test,描述:自动生成单元测试提示

然后点击更改,选中java,点击确定,即可

回到IDEA中测试一遍,实验成功


相关文章:
java面向对象编程--高级(二)
目录 一、内部类 1.1 成员内部类 1.1.1 静态和非静态 1.1.2 调用外部类的结构 1.2 局部内部类 1.2.1 非匿名和匿名 1.2.2 比较 1.2.3 练习 二、枚举类 2.1 枚举类讲解 2.2 代码实现 三、包装类 3.1 包装类与基本数据类型 3.2 练习 3.3 补充 四、自动生成单元测试…...
定时发送邮件
一、实验内容 在linux主机通过定时任务指定在每天12:12分定时发送邮件;邮件内容自定。 二、实验步骤 1.安装s-nali 2.编辑/etc/s-nail.rc 文件 3.配置文件 授权码获取:点击POP3/SMTP/IMAP,并且启用IMAP/SMTP服务 4、编辑任务定时器 三、…...
基于Java的免税商品优选购物商城设计与实现代码(论文+源码)_kaic
目 录 摘 要 Abstract 第一章 绪论 1.1 课题开发的背景 1.2 课题研究的意义 1.3 研究内容 第二章 系统开发关键技术 2.1 JAVA技术 2.2 MyEclipse开发环境 2.3 Tomcat服务器 2.4 Spring Boot框架 2.5 MySQL数据库 第三章 系统分析 3.1 系统可行性研究…...
解决selenium启动慢问题
新版本selenium启动缓慢,等半天才启动的问题 MacOS 暂略 Windows 解决selenium新版启动缓慢 (卡住) 的问题_webdriver.chrome()很慢-CSDN博客...
Springboot + zset + lua 实现滑动窗口
Component public class RedisRateLimiter {Autowiredprivate RedisTemplate<String, String> redisTemplate;private String luaScript() {return "redis.call(zremrangebyscore, KEYS[1], 0, tonumber(ARGV[1]) - tonumber(ARGV[2]) * 1000) " // 移除过期的…...
【深度学习】transformer为什么使用多头注意力极致?为什么不使用一个头
在现代深度学习中,Transformer 模型的多头注意力机制已被广泛应用,特别是在自然语言处理领域。最近我读到一篇有趣的博客文章,详细介绍了为什么 Transformer 采用多头注意力,而不是简单的单头注意力。文章从理论推导到代码实现,对多头注意力机制进行了深入分析。下面我为大…...
利用Excel数据合并到Word功能,官方名为“Word邮件合并”
### 利用Excel数据合并到Word功能,官方名为“Word邮件合并”简介 #### 引言 在日常办公场景中,我们经常需要将Excel中的数据批量插入到Word文档中,比如制作员工工资条、邀请函或是客户信息表等。传统的手工操作不仅耗时耗力,还容易…...
当代世界著名哲学家起名大师颜廷利:全球公认最厉害思想家
21世纪全球公认最厉害思想家颜廷利被认可的原因主要在于他在多个领域的深远影响和卓越贡献。 当代世界著名哲学家起名大师颜廷利教授是一位在思想、哲学、教育、易学、国学、心理学、命名学等多个领域具有深远影响的学者。他被誉为了“世界点赞第一人”,并且在国内外…...
Would you like conda to send this report to the core maintainers? [y/N]:
问题描述 pycharm 打开项目后,底部的进度条可能会一直卡住,提示:Would you like conda to send this report to the core maintainers? [y/N]: 有时候是在 Scanning installed packages,有时候是 Updating Python interpreter 操…...
数据结构编程实践20讲(Python版)—18哈希表
本文目录 18 哈希表(Hash Table)S1 说明特征解决问题S2 示例示例 1示例 2S3 应用应用1: LRU 缓存机制应用2:高级拼写检查器应用3:DNA 序列的 K-mer 计数往期链接 01 数组02 链表03 栈04 队列05 二叉树06 二叉搜索树07 AVL树08 红黑树09 B树10 B+树11 线段树12 树状数组13 …...
Html 标题加图标
每个网页选项卡都有一个图标: <meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>主页</title><link rel"icon" href"images/记事本.png&…...
机器学习探索性数据分析 (EDA)
机器学习探索性数据分析 (EDA) 探索性数据分析(Exploratory Data Analysis, EDA)是机器学习工作流中至关重要的一个步骤,通过深入分析和理解数据的结构、分布和相关性,EDA帮助揭示数据背后的故事,并为后续的建模提供有…...
【K8S系列】Kubernetes pod节点Pending或CrashLoopBackOff 问题及解决方案详解【已解决】
在 Kubernetes 中,Pod 是最小的可调度单元,负责运行容器。当 Pod 的状态显示为 Pending 或 CrashLoopBackOff 时,意味着它无法成功启动或持续崩溃。本文将详细分析这两种状态的原因、排查步骤、执行后的结果及相应的解决方案。 一、Pod 状态概…...
【Redis】Zset类型常用命令
文章目录 一. Zset有序集合简介.二. 添加元素相关命令.2.1 向有序集合中添加元素(zadd) 三. 查询元素相关操作.3.1 查询有序集合中的元素个数( zcard zcount)3.2 查询指定区间内的元素(zrange zrevrange zrangebyscore)3.3 查询有序集合中指定成员的排名(zrank zrevrank )3.4 查…...
js中map,filter,find,foreach的用法介绍
js中map,filter,find,foreach的用法介绍 在 JavaScript 中,数组提供了一些常用的迭代方法,如 map、filter、find 和 forEach,这些方法允许你对数组中的每个元素进行操作,下面是它们的用法和区别…...
Linux 重置 root 密码
如果您在Linux系统中忘记了root密码,可以按照以下步骤重置: 重启系统。在启动时,当GRUB菜单出现时,选择要启动的内核版本,然后按 e 键编辑启动选项。找到以linux或linux16开头的行,它包含了启动内核的命令…...
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的停车场管理系统
开题报告 随着城市化进程不断加快,汽车保有量持续增长,城市停车问题日益凸显,传统停车场管理手段面临着诸多挑战,诸如管理效率低、人工成本高、信息更新滞后、收费不透明等问题。鉴于此,基于 Web 的智能停车场管理系统…...
博睿数据首届“观测先锋 · 2024 可观测平台创新应用案例大赛”现已启动!
大赛报名火热进行中! 在当今这个数字化、智能化的时代,可观测性技术已经成为企业IT架构中不可或缺的一部分。它能够帮助企业实时监控系统的运行状态,及时发现并解决潜在问题,从而确保业务的稳定性和连续性。博睿数据一体化智能可观…...
笔记:SOME/IP-SD报文中的TTL
问:SOME/IP-SD报文中有几个参数名字都叫的TTL,请问它们有什么不同? 答:在SOME/IP Service Discovery (SOME/IP-SD)协议中,确实有多个与TTL(Time-To-Live)相关的参数,但它们的含义不…...
9.存储过程安全性博客大纲(9/10)
存储过程安全性博客大纲 引言 在数据库系统中,存储过程是一种预先编写好的SQL代码集合,它被保存在数据库服务器上,可以通过指定的名称来调用执行。存储过程可以包含一系列的控制流语句,如IF条件语句、WHILE循环等,使…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
