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

面向对象高级三:内部类 枚举 泛型 java.lang包下常用API

一.内部类1.内部类概述2.成员内部类实例内部类1成员内部类可以定义类的一切成员2当创建对象时不能直接给内部类创建对象而要先创建外部类的对象 然后new成员内部类的对象3在成员内部类的实例方法中 可以直接访问外部类的成员4在成员内部类的实例方法中访问三个位置不同值的变量3.静态内部类省了一个外部类对象1静态内部类 可以直接New出来2静态内部类无论是实例方法还是静态方法只能直接访问外部类的静态成员但不能直接访问外部类的实例成员4.局部内部类鸡肋5.**匿名内部类1认识匿名内部类本质是子类-------普通代码只用到一次 不必专门为此设定一个类优化计算机会自动把这个匿名内部类编译成一个子类 然后立即创建出一个子类对象2匿名内部类的使用场景本来既要创建类又要在测试类里创建对象现在直接在测试类创建一个不需要名声类的对象匿名内部类直接在这个匿名类里进行原本需要在类里进行的操作或者更简化成也可以直接实现接口的方法3注意事项为什么a 100;会报错匿名内部类本质是一个类的子类 / 接口实现类它的类体和普通类一样只允许成员变量包括静态 / 实例方法抽象 / 实例 / 静态构造代码块 / 静态代码块内部类不能直接放执行语句比如赋值、打印、循环等这些语句必须包裹在方法、构造代码块或静态代码块里。6.对比内部类类型创建方式核心语法依赖外部类对象访问外部类成员限制适用场景成员内部类new 外部类.new 内部类()是可访问所有成员包括 private外部类和内部类强关联复用外部类成员静态内部类new 外部类.静态内部类()否仅能访问静态成员无需外部类对象独立使用内部类局部内部类仅在方法内new 局部内部类()是隐含可访问外部类 方法 final 变量方法内临时使用复用逻辑匿名内部类new 接口/抽象类() { 重写方法 }是隐含可访问外部类 方法 final 变量快速实现接口 / 抽象类一次性使用二.枚举1.认识枚举------------------------------------------抽象枚举------------------------------枚举常量可以被视为已经实例化的对象因此它们不能再使用new关键字来创建对象------------------2.枚举的常见应用场景做信息标志和分类并且在测试运行时 只能填所枚举过的常量三.泛型1.认识泛型没有添加泛型时 集合可以添加任何元素此时强制转换类型有可能出错加了后就能约束操作 避免报错2.泛型类E数据类型 e参数--------------------------------------泛型类可以声明多个类型变量---------------------------------------泛型可以通过继承某个类 它的数据可以是Animal或者Animal的子类3.泛型接口应用场景系统需要处理老师和学生的数据提供两个功能保存信息和根据名称查询数据------------------接口的泛型继承后 实现他的类的类型也只能是泛型继承的类或者子类4.泛型方法 泛型通配符 上下限1泛型方法不是泛型方法原因此时E不是这个方法自己定义的 而是这个泛型类声明给到这个方法使用的-----------------在创建泛型类对象/实现泛型接口时需要通过尖括号指定实际类型而调用泛型方法不用传入的参数是什么类型就是什么类型eg.----------------报错原因 虽然BMW和BENZ都继承了Car 但ArrayListBMW ArrayListBENZ和ArrayListCar并不存在继承关系此时需要用到泛型方法 但要注意的是为避免任何类型都能加到T内 需要限定T必须是Car及其子类2泛型通配符用T代表一个东西通用类、工具类、单个数据用E代表集合 / 数组里的元素List、Map、自定义容器T/E 是确定的类型必须先声明能读能写? 是不确定的类型不用声明代表任意 / 未知类型当你不关心具体类型只做通用操作 → 用于上述例子而言要限定类型也可以用extends。。。3上下限extendsCar上限Car及其子类superCar下限Car及其父类通配符类型读写规则适用场景? extends T只能读get不能写除了nullset读取数据生产者? super T可以写 T / 子类只能读成 Object写入数据消费者(Plate? extends Fruit能接收PlateFruitPlateApplePlateBanana但编译器不知道盘子里具体装的是什么可能是PlateApple→ 只能放Apple可能是PlateBanana→ 只能放Banana可能是PlateFruit→ 可以放Apple/Banana为了保证类型安全编译器禁止向? extends T类型的容器中写入任何非null的值super不管盘子是 PlateFruit / PlateFood放进去一个 Apple / Banana都是安全的Apple是FruitFruit是Food→ 怎么放都不会类型不匹配super能读但只能读成Object因为盘子可能是PlateFoodPlateObject编译器不知道具体是哪个父类所以只能安全地当成Object读出来。1.? extends 水果上界只能往外拿不能往里放你不知道盘子里是苹果还是香蕉不敢乱塞东西2.? super 水果下界只能往里放拿出来只能当 Object反正都是水果 / 食物放苹果香蕉绝对安全应用另5.泛型的注意事项擦除问题 基本数据类型问题1擦除问题class文件底层还是基于object类型的 只在赋值时强转 泛型只在写代码时进行约束--关于桥接方法但 Java编译后泛型会被删掉》编译器自动加个桥接方法对上 看不见也不用写2里必须是包装类型 不能是基本数据类型四.java.lang包下常用API1.Object类1toString重写后 可以输出内容而非地址2equalsequals默认比较地址是否相同 此时也能实现 要比较两个内容是否相同 就要重写equals方法3hascode方法class Person { private String name; private int age; // 重写equals Override public boolean equals(Object o) { if (this o) return true; if (o null || getClass() ! o.getClass()) return false; Person person (Person) o; return age person.age Objects.equals(name, person.name); } // 重写hashCode基于equals中用到的属性name age Override public int hashCode() { // 用Objects.hash()简化底层是组合属性计算哈希值 return Objects.hash(name, age); } // 构造方法 public Person(String name, int age) { this.name name; this.age age; } }hashCode()vsequals()核心关系场景要求反例后果a.equals(b) truea.hashCode() b.hashCode()HashSet/HashMap 无法去重a.equals(b) falsea.hashCode()尽量b.hashCode()哈希表效率降低大量元素挤在一个桶对象属性未修改hashCode()返回值不变哈希表中对象 “丢失”4clone注意clone方法是用protected修饰的 直接调用会报错 应在子类(extends Object)中重写clone-------此时直接调用还会报错 牵扯到处理异常----------------------2.Objects1equals方法如果s1为null的话 调用s1的equals方法 就会出现空指针异常但是Objects.equals不会---Objects源码先确定a不为空 再比较ab2isNull方法或者isNull源码3nonNull方法3.包装类1Valueof装、intValue拆实现万物皆对象但实际代码中会自动装箱拆箱用途泛型和集合不支持使用基本类型 只能使用对应的引用类型自动装箱也会自己调用valueOf 所以应关注valueOf的源码2字符串类型转换toStringvalueOf结果都是231更好的方案直接调用valueOf4.StringBuilder StringBuffer(1)StringBuilder(StringBuilder重写了toString方法 所以输出的是内容)------String是不可变字符串------------------(2)StringBuffer线程安全在很多人一起修改字符串时 StringBuffer更安全5.StringJoiner则StringBuild的案例可以简化为

相关文章:

面向对象高级三:内部类 枚举 泛型 java.lang包下常用API

一.内部类1.内部类概述 2.成员内部类(实例内部类)(1)成员内部类可以定义类的一切成员(2)当创建对象时不能直接给内部类创建对象而要先创建外部类的对象 然后new成员内部类的对象(3)在…...

解码 DINO 核心:三大创新如何重塑端到端目标检测

1. 从DETR到DINO:目标检测的范式革命 记得我第一次用Faster R-CNN做目标检测时,光是调整锚框尺寸就花了整整三天。这种传统检测方法就像用老式打字机写代码——每个环节都需要手工微调。直到2020年DETR横空出世,才让我意识到目标检测还能这么…...

Wan2.2-T2V-A5B提示词怎么写?新手快速出效果的实用指南

Wan2.2-T2V-A5B提示词怎么写?新手快速出效果的实用指南 1. 认识Wan2.2-T2V-A5B视频生成模型 Wan2.2-T2V-A5B是一款由通义万相开源的轻量级文本到视频生成模型,拥有50亿参数规模。虽然它生成的视频分辨率是480P,但在时序连贯性和运动推理能力…...

NaViL-9B多模态模型5分钟快速部署:图文问答零基础入门教程

NaViL-9B多模态模型5分钟快速部署:图文问答零基础入门教程 1. 认识NaViL-9B多模态模型 NaViL-9B是上海人工智能实验室推出的原生多模态大语言模型,它不仅能像传统语言模型一样处理纯文本问答,还具备强大的图片理解能力。这意味着你可以上传…...

如何将Uvicorn部署到Azure Functions Premium Plan:完整指南

如何将Uvicorn部署到Azure Functions Premium Plan:完整指南 【免费下载链接】uvicorn An ASGI web server, for Python. 🦄 项目地址: https://gitcode.com/GitHub_Trending/uv/uvicorn Uvicorn是Python生态中备受推崇的ASGI Web服务器&#xff…...

手把手教你用YOLOv5训练自己的交通标志数据集(从LabelImg标注到模型部署)

从零构建YOLOv5交通标志检测器的实战指南 在自动驾驶和智能交通系统快速发展的今天,准确识别道路标志已成为计算机视觉领域的重要应用场景。不同于传统图像处理方法,基于深度学习的目标检测技术能够适应复杂环境变化,而YOLOv5以其卓越的速度-…...

Project Sistine核心代码剖析:从图像分割到鼠标事件模拟

Project Sistine核心代码剖析:从图像分割到鼠标事件模拟 【免费下载链接】sistine Turn a MacBook into a Touchscreen with $1 of Hardware 项目地址: https://gitcode.com/gh_mirrors/si/sistine Project Sistine是一个创新的开源项目,它能让普…...

F3D动画播放教程:如何轻松展示和播放3D模型动画

F3D动画播放教程:如何轻松展示和播放3D模型动画 【免费下载链接】f3d Fast and minimalist 3D viewer. 项目地址: https://gitcode.com/GitHub_Trending/f3/f3d 想要快速查看和播放3D模型动画吗?F3D(Fast and minimalist 3D viewer&am…...

EDK II代码质量门禁报告:全面解析门禁检查结果与最佳实践

EDK II代码质量门禁报告:全面解析门禁检查结果与最佳实践 【免费下载链接】edk2 EDK II 项目地址: https://gitcode.com/gh_mirrors/ed/edk2 EDK II作为现代、功能丰富的跨平台UEFI和PI规范固件开发环境,其代码质量门禁系统是确保固件可靠性和安全…...

brpc跨平台构建自动化:Jenkins与GitHub Actions终极指南

brpc跨平台构建自动化:Jenkins与GitHub Actions终极指南 【免费下载链接】brpc brpc is an Industrial-grade RPC framework using C Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recomm…...

MySQL局域网远程连接测试教程

MySQL局域网远程连接测试教程1本地服务器安装MySQL服务器,安装MySQL shell, Workbench(非必须)防火墙配置2远程访问用户电脑配置IP配置安装 Workbench客户端1本地服务器 安装MySQL服务器,安装MySQL shell, Workbench(非必须) 点击右下角的Advanced Opt…...

老旧设备的开源OCR解决方案:技术适配与性能优化指南

老旧设备的开源OCR解决方案:技术适配与性能优化指南 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件,适用于Windows系统,支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHub…...

F3D开发环境搭建:从零开始编译和构建这个开源3D项目

F3D开发环境搭建:从零开始编译和构建这个开源3D项目 【免费下载链接】f3d Fast and minimalist 3D viewer. 项目地址: https://gitcode.com/GitHub_Trending/f3/f3d F3D是一款快速且极简的3D查看器,本指南将带你从零开始搭建其开发环境&#xff0…...

语音合成延迟优化:IndexTTS-2-LLM网络IO调优实战

语音合成延迟优化:IndexTTS-2-LLM网络IO调优实战 1. 为什么语音合成总在“等”?从用户卡顿说起 你有没有试过在语音合成页面点下“开始合成”,然后盯着进度条数秒——明明只是一句话,却要等3秒、5秒,甚至更久&#x…...

如何高效访问优质内容?bypass-paywalls-chrome-clean工具全方位使用指南

如何高效访问优质内容?bypass-paywalls-chrome-clean工具全方位使用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代,大量优质内容被…...

3步打造Windows字体终极体验:MacType高清渲染全攻略

3步打造Windows字体终极体验:MacType高清渲染全攻略 【免费下载链接】mactype Better font rendering for Windows. 项目地址: https://gitcode.com/gh_mirrors/ma/mactype 一、视觉痛点全解析:谁在忍受模糊字体的煎熬? 设计师的色彩…...

BootstrapBlazor通知组件:如何实现声音提示功能

BootstrapBlazor通知组件:如何实现声音提示功能 【免费下载链接】BootstrapBlazor 项目地址: https://gitcode.com/gh_mirrors/bo/BootstrapBlazor BootstrapBlazor是一个功能丰富的Blazor组件库,提供了各种UI组件来增强Web应用的用户体验。其中…...

Fish Speech 1.5入门指南:无需Python基础,5步完成高质量语音生成

Fish Speech 1.5入门指南:无需Python基础,5步完成高质量语音生成 你是不是也遇到过这些烦恼?想给视频配音,但自己的声音不好听,找配音员又太贵;想制作有声书,但录制过程繁琐,效果还…...

HP-Socket创新项目原型迭代记录:变更、原因与效果

HP-Socket创新项目原型迭代记录:变更、原因与效果 【免费下载链接】HP-Socket High Performance TCP/UDP/HTTP Communication Component 项目地址: https://gitcode.com/gh_mirrors/hp/HP-Socket HP-Socket作为一款高性能TCP/UDP/HTTP通信组件,其…...

Guohua Diffusion 数据库集成方案:MySQL管理生成任务与作品元数据

Guohua Diffusion 数据库集成方案:MySQL管理生成任务与作品元数据 如果你用过Guohua Diffusion这类图像生成工具,可能会遇到一个头疼的问题:生成的图片越来越多,管理起来越来越乱。今天想找上周生成的那张“赛博朋克风格的城市夜…...

LiuJuan Z-Image Generator参数详解:CFG Scale=2.0与12步生成高质量人像

LiuJuan Z-Image Generator参数详解:CFG Scale2.0与12步生成高质量人像 想用AI生成一张惊艳的人像照片,却发现要么细节模糊,要么风格怪异,怎么调参数都达不到理想效果?如果你也遇到过类似问题,那今天这篇文…...

告别卡顿闪烁!在Cesium 1.134中集成SOG格式,让400万高斯秒级加载

突破性能瓶颈:Cesium 1.134集成SOG格式实现400万高斯秒级渲染 在三维地理空间可视化领域,Cesium一直是开发者构建高精度场景的首选引擎。但当项目涉及数百万级高斯泼溅数据时,传统加载方式往往导致令人崩溃的卡顿和视角移动时的闪烁问题。最近…...

JPEXS Free Flash Decompiler社区大使选拔流程:申请与评审完全指南

JPEXS Free Flash Decompiler社区大使选拔流程:申请与评审完全指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler JPEXS Free Flash Decompiler是一款功能强大的Flash反编译…...

Llama-3.2V-11B-cot部署案例:中小企业低成本构建AI图文分析工作台

Llama-3.2V-11B-cot部署案例:中小企业低成本构建AI图文分析工作台 1. 项目概述 Llama-3.2V-11B-cot是基于Meta最新多模态大模型开发的专业级视觉推理工具,专为中小企业打造的低成本AI图文分析解决方案。该工具针对双卡RTX 4090环境进行了深度优化&…...

如何为Rainmeter贡献多语言翻译:完整指南

如何为Rainmeter贡献多语言翻译:完整指南 【免费下载链接】rainmeter Desktop customization tool for Windows 项目地址: https://gitcode.com/gh_mirrors/ra/rainmeter Rainmeter作为一款强大的Windows桌面自定义工具,支持全球用户通过多语言界…...

HP-Socket技术演讲视频描述撰写指南:关键词与吸引力

HP-Socket技术演讲视频描述撰写指南:关键词与吸引力 【免费下载链接】HP-Socket High Performance TCP/UDP/HTTP Communication Component 项目地址: https://gitcode.com/gh_mirrors/hp/HP-Socket HP-Socket是一款高性能跨平台网络通信框架,专为…...

BootstrapBlazor滑块组件:如何实现垂直方向滑动控制

BootstrapBlazor滑块组件:如何实现垂直方向滑动控制 【免费下载链接】BootstrapBlazor 项目地址: https://gitcode.com/gh_mirrors/bo/BootstrapBlazor BootstrapBlazor滑块组件为Blazor开发者提供了强大的数值输入控件,而垂直方向滑块则是构建现…...

基于springboot运动服装销售系统设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...

Blazor组件测试工具:BootstrapBlazor测试库完整指南

Blazor组件测试工具:BootstrapBlazor测试库完整指南 【免费下载链接】BootstrapBlazor 项目地址: https://gitcode.com/gh_mirrors/bo/BootstrapBlazor BootstrapBlazor测试库是企业级Blazor UI组件库的质量保障体系,提供了一套完整的组件测试解…...

基于springboot美食分享平台设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...