当前位置: 首页 > news >正文

【java】【面对对象高级4】内部类、枚举、泛型

目录

1、内部类

1.1 成员内部类【了解】

1.1.1 定义

 1.1.2 扩展变量

1.2 静态内部类【了解】

1.2.1 定义

 1.2.2 扩展变量

1.3 局部内部类【了解】

1.4 匿名内部类【重点】

1.4.1 定义

 1.4.1.1 常规写法

1.4.1.2 匿名内部类改造

 1.4.2 匿名内部类的常见使用场景

1.4.2.1 作为一个参数传输给方法

 1.4.2.2 匿名内部类在开发中实际场景

2、枚举类

2.1 认识枚举

 2.2 枚举类特点

 2.3 抽象枚举

 2.4 枚举实现单例模式

2.5 枚举的应用场景 

 2.5.1 常规做法1:

 2.5.2 常规做法2-常量方式

 2.5.3 枚举实现

 3、泛型

3.1 认识泛型

3.2 泛型类

3.2.1 如何自己定义泛型类(一般架构师做)

 3.2.2 模仿ArrayList写一个简单的MyArrayList泛型类

 3.2.3 写一个定义2个类型的泛型类Myclass2

 3.2.4 MyClass3泛型类,使用继承

 3.2.5 主函数

3.3 泛型接口

3.3.1 如何写泛型接口

3.3.2 写一个泛型接口

 3.3.3 学生类StudentE

3.3.4 老师类TeacherE

 3.3.5 实现类TeacherData

 3.3.6 实现学生类StudentData

3.4 泛型方法、泛型通配符、上下限

 3.4.1 写一个泛型方法

 3.4.2 一个例子

3.4.2.1 Car类

 3.4.2.1 BMW类

 3.4.2.2 BENZ类

 3.4.2.3 主程序

3.5 泛型的注意事项:擦除问题、基本数据类型问题

 3.5.1 擦除问题

 3.5.2 基本数据类型问题


前言:java的内部类(静态内部类、局部内部类、匿名内部类)、枚举、泛型的语法使用

1、内部类

1.1 成员内部类【了解】

1.1.1 定义

 

 

 1.1.2 扩展变量

1.2 静态内部类【了解】

1.2.1 定义

 1.2.2 扩展变量

1.3 局部内部类【了解】

1.4 匿名内部类【重点】

1.4.1 定义

 1.4.1.1 常规写法

 

1.4.1.2 匿名内部类改造

 1.4.2 匿名内部类的常见使用场景

1.4.2.1 作为一个参数传输给方法

 简化一下:

 1.4.2.2 匿名内部类在开发中实际场景

package com.runa.staticdemo;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class TestDesk {public static void main(String[] args) {JFrame win =new JFrame("登录界面");JPanel panel = new JPanel();win.add(panel);JButton btn = new JButton("登录");panel.add(btn);// 给按钮绑定单击事件
//        btn.addActionListener(new ActionListener() {
//            @Override
//            public void actionPerformed(ActionEvent e) {
//                JOptionPane.showMessageDialog(win,"登录成功~");
//            }
//        });// 最终目的是简化代码btn.addActionListener(e -> JOptionPane.showMessageDialog(win,"登录成功~"));win.setSize(400,400);win.setLocationRelativeTo(null);win.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);win.setVisible(true);}
}

2、枚举类

2.1 认识枚举

 2.2 枚举类特点

 

 2.3 抽象枚举

 2.4 枚举实现单例模式

2.5 枚举的应用场景 

 2.5.1 常规做法1:

 2.5.2 常规做法2-常量方式

 2.5.3 枚举实现

 

 3、泛型

3.1 认识泛型

package com.runa.staticdemo;import java.util.ArrayList;public class TestE {public static void main(String[] args) {
//        ArrayList list = new ArrayList<>();
//        list.add("小马");
//        list.add("次奥");
//        list.add("小曹");
//        list.add(new Cat());
//
//        for (int i = 0; i < list.size(); i++) {
//            String e = (String) list.get(i);
//            System.out.println(e);System.out.println("-------------------------------------");ArrayList<String> list1 = new ArrayList<>();list1.add("小米");list1.add("小马");list1.add("字符串");//        list1.add(new Cat());for (int i = 0; i < list1.size(); i++) {String e = (String) list1.get(i);System.out.println(e);}System.out.println("-------------------------------------");ArrayList<Cat> list2 = new ArrayList<>();list2.add(new Cat());}
}class Cat{}

3.2 泛型类

3.2.1 如何自己定义泛型类(一般架构师做)

 3.2.2 模仿ArrayList写一个简单的MyArrayList泛型类

package com.runa.staticdemo;// 泛型类
public class MyArrayList<E> {private Object[] arr = new Object[10];private  int size;public boolean add(E e){arr[size++] = e;return true;}public E get(int index){return (E) arr[index]; //强转}
}

 3.2.3 写一个定义2个类型的泛型类Myclass2

package com.runa.staticdemo;public class Myclass2<E, T> {public void put(E e, T t){}
}

 3.2.4 MyClass3泛型类,使用继承

package com.runa.staticdemo;public class MyClass3<E extends Animal> {
}

 3.2.5 主函数

package com.runa.staticdemo;public class TestAL {public static void main(String[] args) {MyArrayList<String> list = new MyArrayList<>();list.add("java");list.add("python");String ele = list.get(1);System.out.println(ele);Myclass2<String, String> list2 = new Myclass2<>();MyClass3<Animal> a  = new MyClass3<>();MyClass3<Dog> d  = new MyClass3<>();}
}class  Animal{}
class Dog extends Animal{}
class Cat2 extends Animal{}

3.3 泛型接口

3.3.1 如何写泛型接口

3.3.2 写一个泛型接口

package com.runa.staticdemo;import java.util.ArrayList;//泛型接口
public interface DataE<T> {void add(T t);ArrayList<T> getByName(String name);
}

 3.3.3 学生类StudentE

package com.runa.staticdemo;public class StudentE {
}

3.3.4 老师类TeacherE

package com.runa.staticdemo;public class TeacherE {
}

 3.3.5 实现类TeacherData

package com.runa.staticdemo;import java.util.ArrayList;public class TeacherData  implements DataE<TeacherE>{@Overridepublic void add(TeacherE teacherE) {}@Overridepublic ArrayList<TeacherE> getByName(String name) {return null;}
}

 3.3.6 实现学生类StudentData

package com.runa.staticdemo;import java.util.ArrayList;public class StudentData implements DataE<StudentE>{@Overridepublic void add(StudentE studentE) {}@Overridepublic ArrayList<StudentE> getByName(String name) {return null;}
}

3.4 泛型方法、泛型通配符、上下限

 3.4.1 写一个泛型方法

 3.4.2 一个例子

3.4.2.1 Car类

package com.runa.staticdemo;public class Car {
}

 3.4.2.1 BMW类

package com.runa.staticdemo;public class BMW extends Car{
}

 3.4.2.2 BENZ类

package com.runa.staticdemo;public class BENZ extends Car {
}

 3.4.2.3 主程序

package com.runa.staticdemo;import java.util.ArrayList;public class TestF {public static void main(String[] args) {ArrayList<Car> cars = new ArrayList<>();cars.add(new BMW());cars.add(new BENZ());go(cars);ArrayList<BMW> bmws = new ArrayList<>();bmws.add(new BMW());bmws.add(new BMW());go(bmws);ArrayList<BENZ> benzs = new ArrayList<>();benzs.add(new BENZ());benzs.add(new BENZ());go(benzs);}// 这个没有限定 ,可能将其他对象传进来了
//    public static<T> void go(ArrayList<T> cars){
//
//    }// 这个限定只能是Car或者Car子类
//    public static<T extends Car> void go(ArrayList<T> cars){
//
//    }//    // 通配符
//    public static void go(ArrayList<?> cars){
//
//    }//    // 通配符 + extends Car上限 spuer Car是下限public static void go(ArrayList<? extends Car> cars){}}

3.5 泛型的注意事项:擦除问题、基本数据类型问题

 3.5.1 擦除问题

 查看编译源代码:

 3.5.2 基本数据类型问题

相关文章:

【java】【面对对象高级4】内部类、枚举、泛型

目录 1、内部类 1.1 成员内部类【了解】 1.1.1 定义 1.1.2 扩展变量 1.2 静态内部类【了解】 1.2.1 定义 1.2.2 扩展变量 1.3 局部内部类【了解】 1.4 匿名内部类【重点】 1.4.1 定义 1.4.1.1 常规写法 1.4.1.2 匿名内部类改造 1.4.2 匿名内部类的常见使用场景 1.4.2…...

Python的用处到底是什么?(三)

11. 数据库操作&#xff1a;Python的库&#xff0c;如sqlite3和SQLAlchemy&#xff0c;可以连接和操作各种类型的数据库。 Python提供了一些库和工具&#xff0c;如sqlite3和SQLAlchemy&#xff0c;用于连接和操作各种类型的数据库。以下是关于这两个库的详细解释&#xff1a;…...

【Nodejs】Express基本使用

Express 中文网 基于 Node.js 平台&#xff0c;快速、开放、极简的 web 开发框架。 1.Express的安装方式 Express的安装可直接使用npm包管理器上的项目&#xff0c;在安装npm之前可先安装淘宝镜像&#xff1a; npm install -g cnpm --registryhttps://registry.npmmirror.com/…...

k8s集群安装v1.20.9

参考网上资料并将异常问题解决&#xff0c;经测试可正常安装集群。 1.我的环境准备 本人使用vmware pro 17新建三个centos7虚拟机&#xff0c;每个2cpu&#xff0c;20GB磁盘存储&#xff0c;内存2GB&#xff0c;其中主节点的内存3GB&#xff0c;可使用外网. 2.所有节点安装D…...

Staples Drop Ship EDI 需求分析

Staples 是一家美国零售公司&#xff0c;总部位于马萨诸塞州弗拉明汉&#xff0c;主要提供支持工作和学习的产品和服务。该公司于 1986 年在马萨诸塞州布莱顿开设了第一家门店。到 1996 年&#xff0c;该公司已跻身《财富》世界 500 强&#xff0c;后来又收购了办公用品公司 Qu…...

模型调参及优化

调参 调权重参数&#xff0c;偏置参数 训练数据集用来训练参数w&#xff0c;b 调超参数 验证数据集用来选择超参数学习率lr&#xff0c;隐藏层大小等 如何调参 当泛化误差和训练误差都没有降下去说明欠拟合&#xff1b;当训练误差降下去&#xff0c;但泛化误差出现上升形式&…...

多数据源数据转换和同步的ETL工具推荐

有许多支持多数据源数据转换和同步的ETL工具可供选择。以下是一些常见的ETL工具和它们支持多数据源数据转换和同步的特点&#xff1a; Apache NiFi&#xff1a;Apache NiFi是一个开源的ETL工具&#xff0c;支持多种数据源的连接&#xff0c;包括文件系统、数据库、消息队列、网…...

配置 gitlab https 访问

文章目录 1. 备份2. 生成SSL证书3. 配置文件4. 重启5. 访问 1. 备份 docker exec -ti gitlab-ce gitlab-rake gitlab:backup:create2. 生成SSL证书 yum install openssl openssl-devel -y mkdir /data/gitlab/config/ssl ; cd /data/gitlab/config/ssl### 生成证书 openssl…...

Kepware Modbus驱动简介

1. Modbus驱动能够解决什么问题&#xff1f; 它是Modbus设备驱动的集合&#xff0c;为用户提供一种方便快捷的Modbus设备数采解决方案。 只需要通过简单的配置就可以将常见的例如Modbus TCP/IP Ethernet、RTU Serial 和 ASCII Serial等协议设备无缝连接到 HMI/SCADA、MES/His…...

从零开始学习CTF——CTF是什么

引言&#xff1a; 从2019年10月开始接触CTF&#xff0c;学习了sql注入、文件包含等web知识点&#xff0c;但都是只知道知识点却实用不上&#xff0c;后来在刷CTF题才发现知识点的使用方法&#xff0c;知道在哪里使用&#xff0c;哪里容易出漏洞&#xff0c;可是在挖src漏洞中还…...

为Android构建现代应用——主体结构

创建Screents和ViewModels 在前面的章节中&#xff0c;我们已经分析了OrderNow项目的理论概念和我们将赋予的组织。 在本章中&#xff0c;我们将开始实现初始结构和模板&#xff0c;这将联接每一个应用程序的部分。 首先将添加以下带有各自视图模型的主屏幕&#xff1a; •…...

【shell脚本】shell脚本之日志切割(进阶实战三)

恭喜你&#xff0c;找到宝藏博主了&#xff0c;这里会分享shell的学习整过程。 shell 对于运维来说是必备技能之一&#xff0c;它可以提高很多运维重复工作&#xff0c;提高效率。 shell的专栏&#xff0c;我会详细地讲解shell的基础和使用&#xff0c;以及一些比较常用的she…...

VMLogin和虚拟机里的浏览器有什么区别?

虚拟机&#xff08;Virtual Machine&#xff09;指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。 指纹浏览器&#xff0c;也称防关联浏览器。 简单来说&#xff0c;就是允许在同一台电设备上操作和管理多个平台、多个账号&#xff0c;账…...

unimrcp server的session资源分配与回收

unimrcp使用APR的内存池管理内存&#xff0c;因此&#xff0c;处理函数中一般都会传递一个pool指针&#xff0c;需要内存时&#xff0c;就从pool里分配一块&#xff0c;一般也不需要关心内存的释放。因为&#xff0c;一路呼叫关联一个session&#xff0c;一个session对应一个po…...

【图论】三种中心性 —— 特征向量、katz 和 PageRank

维基百科&#xff1a;在图论和网络分析中&#xff0c;中心性指标为图中相应网络位置的节点分配排名或数值。中心性这一概念最初起源于社交网络分析&#xff0c;因此很多衡量中心性的术语也反映了其社会学背景。 不同中心性指标对 “重要” 的衡量方式不同&#xff0c;因此适用于…...

[sqoop]将hive查询后的数据导入到MySQL

一、知识点 export:将Hive的表导入到mysql叫导出 搜了很多&#xff0c;发现sqoop在hive导出到mysql时 1&#xff09;不支持where参数对数据进行过滤。 2&#xff09;不支持指定hive表的方式导出&#xff0c;只能指定Hive目录进行导出。 二、操作 1、在MySQL中建表 creat…...

Linux df、du命令

df&#xff1a;查看文件系统硬盘使用情况 df 命令&#xff0c;用于显示 Linux 系统中各文件系统的硬盘使用情况&#xff0c;包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等。 df 命令的基本格式为&#xff1a; [rootlocalhost ~]# df [选项] [目录或文件名] df…...

java版+免费商城搭建+小程序商城免费搭建+Spring Cloud + Spring Boot + MybatisPlus + 前后端分离 + 二次开发

J2EE企业分布式微服务云快速开发架构 Spring CloudSpring Boot2MybatisOauth2ElementUI 前后端分离 1. 鸿鹄Cloud架构清单 2. Commonservice&#xff08;通用服务&#xff09; 通用服务&#xff1a;对spring Cloud组件的使用&封装&#xff0c;是一套完整的针对于分布式微…...

软件设计师学习第一章

计算机组成与体系结构&#xff08;6分&#xff09; 内容概述 数据的表示 进制转换 R 进制转十进制使用按权展开法&#xff0c;其具体操作方式为&#xff1a;将 R 进制数的每一位数值用 Rk 形示&#xff0c;即幂的底数是 R &#xff0c;指数为 k &#xff0c; k 与该位和小数点…...

蓝桥杯单片机第十一届国赛 真题+代码

iic.c /* # I2C代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础&#xff0c;根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求&#xff0c;进行代码调试和修改。 */ #include <STC1…...

ChromePass终极指南:浏览器密码提取与安全管理完全攻略

ChromePass终极指南&#xff1a;浏览器密码提取与安全管理完全攻略 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass 副标题&#xff1a;从密码危机到数据掌控&#xff1a;3步实现…...

用STM32+物联网做个智能药盒:手把手教你搞定毕设硬件选型与代码框架

基于STM32的智能药盒开发实战&#xff1a;从硬件选型到云端联调 在老龄化社会加速和慢性病管理需求激增的背景下&#xff0c;智能医疗设备正从医院走向家庭。作为嵌入式开发者&#xff0c;将STM32与物联网技术结合打造智能药盒&#xff0c;不仅能解决实际用药管理痛点&#xff…...

UniAppX项目数据可视化升级:用lime-echart + ECharts打造高性能图表(从Vue2/Vue3到uni-app-x全流程)

UniAppX高性能数据可视化实战&#xff1a;lime-echart与ECharts的深度整合指南 当移动端数据可视化需求遭遇性能瓶颈时&#xff0c;UniAppX框架与lime-echart的组合正在成为技术决策者的新选择。本文将揭示如何在不同技术栈中实现图表渲染性能的突破性提升&#xff0c;从原理剖…...

数据清洗避坑指南:缺失值和异常值处理的5个常见错误(附真实案例)

数据清洗避坑指南&#xff1a;缺失值和异常值处理的5个常见错误&#xff08;附真实案例&#xff09; 在电商平台的用户行为分析中&#xff0c;我们曾遇到一个诡异现象&#xff1a;某促销活动页面的转化率突然飙升到98%。进一步排查发现&#xff0c;是爬虫程序将未加载完成的页…...

DIY电源改造必备:TL594与SG3524 PWM控制器实战对比(附电路图)

DIY电源改造实战&#xff1a;TL594与SG3524 PWM控制器深度对比与电路设计指南 1. 从零认识PWM控制器的核心价值 在电子爱好者的工作台上&#xff0c;电源改造项目总是充满魅力与挑战。无论是将旧电脑电源改造成可调实验室电源&#xff0c;还是为自制音响系统设计高效供电模块&a…...

python基于微信小程序的家政服务与互助平台

目录技术栈选择功能模块设计数据库设计接口开发小程序前端部署与测试安全与合规项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术栈选择 后端采用Python的Django或Flask框架&#xff0c;提供RESTful API接口。数据库使用MyS…...

通义千问3-Reranker-0.6B效果惊艳:数学证明步骤间逻辑连贯性重排序

通义千问3-Reranker-0.6B效果惊艳&#xff1a;数学证明步骤间逻辑连贯性重排序 1. 模型介绍与核心能力 通义千问3-Reranker-0.6B是Qwen3 Embedding模型系列的最新成员&#xff0c;专门针对文本重排序任务进行了深度优化。这个6亿参数的模型虽然体积小巧&#xff0c;但在数学证…...

【模型手术室】第七篇:模型量化 —— 从 FP16 到 4-bit 的极限压缩与性能翻倍

专栏进度&#xff1a;07 / 10 (微调实战专题) 大模型默认使用 FP16&#xff08;16 位浮点数&#xff09; 存储权重&#xff0c;这意味着每个参数占 2 字节。一个 7B 模型光权重就占 14GB 显存。量化的本质是把这些高精度的数字映射到更小的整数空间&#xff08;如 INT4&#xf…...

从单片机到汽车座舱:ThreadX RTOS在嵌入式领域的真实应用场景与选型思考

ThreadX RTOS在汽车座舱与工业控制中的实战选型指南 当特斯拉Model S的17英寸触控屏在2012年首次亮相时&#xff0c;很少有人注意到支撑这套系统的幕后英雄——实时操作系统。如今&#xff0c;从智能手表到航空电子设备&#xff0c;实时操作系统(RTOS)已成为嵌入式世界的隐形支…...

硬盘监控与健康管理:DiskInfo全方位使用指南

硬盘监控与健康管理&#xff1a;DiskInfo全方位使用指南 【免费下载链接】DiskInfo DiskInfo based on CrystalDiskInfo 项目地址: https://gitcode.com/gh_mirrors/di/DiskInfo 在数字化时代&#xff0c;硬盘故障可能导致珍贵数据永久丢失。DiskInfo作为一款基于Crysta…...