Java进阶

Java进阶

    • 注解
      • 什么是注解?
      • 内置注解
      • 元注解
      • 自定义注解
    • 对象克隆(对象复制)
      • 如何实现克隆?
      • 浅克隆
      • 深克隆
    • 设计模式
        • 统一建模语言(UML)
          • 接口
          • 类之间的关系
        • 面向对象设计原则
          • 1. 单一职责
          • 2. 开闭原则
          • 3. 里氏替换原则
          • 4. 依赖倒置
          • 5. 接口隔离
          • 6. 迪米特原则(最少知识原则,降低类之间的耦合)
          • 7. 组合/聚合复用原则

注解

最早使用的注解:方法重写@Override

什么是注解?

Java中的注解也称标注,可以对类、方法、属性、参数、包等进行标注,然后让编译器或运行时其他类进行解析,完成某个功能。
注解也可以编译到字节码文件中。

内置注解

Java中已经定义好的注解:

  • @Override-检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
  • @Deprecated-标记过时方法。如果使用该方法,会报编译警告。
  • @SuppressWarnings-指示编译器去忽略注解中声明的警告。
  • @FunctionalInterface-用于指示被修饰的接口是函数式接口。

元注解

元注解是Java API提供的,用于修饰注解的注解。通常用在注解的定义上:

  • @Retention-标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。
  • @Documented-标记这些注解是否包含在用户文档中。
  • @Target-标记这个注解是那种Java成员变量。
  • @Inherited-标记这些注解是继承于哪个注解类(默认注解并没有继承于任何子类)
  • @Repeatable-标识注解可以在同一个声明上使用多次。
    重点掌握
    在这里插入图片描述

自定义注解

对象克隆(对象复制)

为什么要克隆?new出来的对象的属性还是初始化时候的值,所以当需要一个新的对象来保存当前对象的“状态”就靠clone方法了。
将一个已经存在的对象以及对象数据克隆到另一个对象中。

如何实现克隆?

类实现Cloneable接口
重写Object类中clone()
在重写的clone方法中,调用父类clone方法返回一个新对象

克隆分为浅克隆,深克隆

浅克隆

克隆一个对象时,如果对象中有关联的对象,只将关联对象的地址复制过来,那么称为浅克隆

深克隆

克隆一个对象时,如果对象中有关联的对象,将关联对象也一同克隆(创建一个新对象),那么称为深克隆

如何做到深克隆?
方式一:在每一层类中都重写clone方法(类实现Cloneable接口),层级多了就比较麻烦;
方式二:以序列化方式实现深克隆。对象的输入和输出流

设计模式

设计模式最早诞生于建筑领域,后来被引入到软件设计领域。
设计模式:之前的程序员,在实际开发中,对于一些经常出现的问题,进行总结,这些被优化后的解决方案被称为设计模式。

为什么要学习设计模式?

  1. 首先学习设计模式是对面向对象设计的应用。
  2. 是对面向对象设计原则,封装、继承、多态以及类与类之间关系的应用
  3. 可以提高我们的设计能力,有助于阅读源码
  4. 提升程序可维护性、可复用性、可扩展性(在程序后期添加新功能时成本最低,尽量不影响之前的功能)
统一建模语言(UML)

UML:帮助开发人员进行设计的语言,使用各种图形符号,来表示各模块之间的关系。
Java语言基本单位:

接口
类之间的关系
  1. 依赖关系:在一个类中的方法中,使用到了另一个,具有临时性(依赖 use-a)
  2. 关联关系:把一个类当作对另一个类的属性(学生关联宿舍has-a)
    组合中还可以根据强弱分为聚合关系和组合关系
  • 聚合关系
  • 组合关系
  1. 继承关系
  2. 实现关系
面向对象设计原则
1. 单一职责

:最简单的面向对象设计原则,用于控制类的粒度大小。
优点:低耦合,高内聚

2. 开闭原则

开闭原则即对扩展开放,对修改封闭。为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。在进行软件设计时,一般先评估出最有可能发生变化的类,然后构造抽象来隔离那些变化。
开闭原则

3. 里氏替换原则

继承必须确保超类所拥有的性质在子类中仍然成立。
所有使用父类的地方必须能透明的使用其子类对象。
在使用继承关系时,在子类中重写父类方法时,不要在重写对子类运行结果产生影响。子类原来调用父类方法,重写父类方法后,调用的是子类自己方法,导致结果产生影响。

4. 依赖倒置

上层模块不应该依赖底层模块,它们都应该依赖于抽象。
如果有多个同类型事物时,我们可以抽取一个共同的抽象层,具体的实现细节应该依赖于抽象。

5. 接口隔离

接口隔离:使用多个接口,而不总使用单一的总接口,不强迫新功能实现不需要的方法。
可以根据不同的功能设计接口,不要将所有的功能设计到一个接口中,让子类可以根据自己的需要去实现不同的接口,不用实现一些不必要的功能。

6. 迪米特原则(最少知识原则,降低类之间的耦合)

迪米特原则:要求一个对象应该对其他对象有最少的了解。(只和你的直接朋友交谈,不跟“陌生人”说话)

7. 组合/聚合复用原则

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

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

相关文章

AB包介绍及导出工具实现+AB包资源简单加载

Resource原理 项目中建立Resources目录,资源导入内部 生成项目包 资源文件存储路径 结论:存储在Resources下的资源,最终会存储在游戏的主体包中,发送给用户,手机系统上,如果需要做资源的更新,是…

全包圆玛奇朵样板间亮相,极简咖啡风引领家装新潮流

在追求品质生活的当下,家居装修风格的选择成为了许多消费者关注的焦点。近日,全包圆家居装饰有限公司精心打造的玛奇朵样板间正式对外开放,以其独特的咖啡色系极简风格,为家装市场带来了一股清新的潮流。玛奇朵样板间不仅展示了全…

算法基础——模拟

目录 1 多项式输出 2.蛇形方阵 3.字符串的展开 模拟,顾名思义,就是题⽬让你做什么你就做什么,考察的是将思路转化成代码的代码能⼒。这类题⼀般较为简单,属于竞赛⾥⾯的签到题(但是,万事⽆绝对&#xff…

Java---类与对象

类与对象 前言:一、面向对象二、类的定义1.类的定义格式2.访问修饰限定符 三、类的实例化四、this引用1.this引用2.this引用的原因 五、对象的构造和初始化1.初始化对象2.构造方法(1).构造方法的概念:(2).特性:(3).this调用:3.就地初始化4.默…

【巧文书高效编标工具】技术解决方案

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 巧文书高效编标工具**是一款基于自然语言处理(NLP)与自动化技术的智能编标解决方案,旨在提升标书编制效率、降低人工错误率。通过结合规则引擎、模板化生成和AI辅助校对&#xff0c…

1.基于TCP的简单套接字服务器实现

目录 1. TCP通信流程 2. 服务器端的通信流程 2.1 创建用于监听的套接字 2.2 绑定本地IP地址和端口 2.3 设置监听 2.4 等待接受客户端的连接请求 2.5 与客户端进行通信 2.6 客户端连接服务器 3.代码实现 client.cpp server.cpp 运行方式 在本文中,我们将…

【大模型基础_毛玉仁】5.3 附加参数法:T-Patcher

目录 5.3 附加参数法:T-Patcher5.3.1 补丁的位置1)键值存储体2)补丁设计 5.3.2 补丁的形式5.3.3 补丁的实现1)准确性2)局部性 5.3 附加参数法:T-Patcher 附加参数法:通过引入可训练的额外参数实…

【原理系列】计算机组成原理-第一遍阅读总结

目录 创作灵感: 总览: 1、计算机抽象与技术 2、ISA指令集架构 3、CPU处理器 4、存储器 创作灵感: 夯实计算机原理,构建知识框架 此系列将总结和记录我对 【深入浅出计算机组成原理-台湾科技大学/元智大学的刘一宇教授】 的…

React程序打包与部署

===================== 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 为生产环境准备React应用最小化和打包环境变量错误处理部署到托管服务部署到Netlify探索高级主题:Hooks、Su…

C++运算符重载、类的转换构造函数和类型转换函数的基础练习

练习1:(困难) 建立一个矩阵类,可以完成指定的操作或运算。 说明: (1)、矩阵为2行3列,基类型为整型; (2)、操作或运算:初始化&…

PERL开发环境搭建>>Windows,Linux,Mac OS

特点 简单 快速 perl解释器直接对源代码程序解释执行,是一个解释性的语言, 不需要编译器和链接器来运行代码>>速度快 灵活 借鉴了C/C, Basic, Pascal, awk, sed等多种语言, 定位于实用性语言,既具备了脚本语言的所有功能,也添加了高级语言功能 开源.免费 没有&qu…

docker(2) -- 启动后修改目录和网络

1. 前言 docker启动前是image文件,启动后是container文件,启动的时候我们可以指定容器的挂载目录以及网络类型,但启动后,这些信息都以配置文件的形式保存在container中,container重新启动时无法重新指定这些信息&…

Flutter开发中如何避免UI显示溢出的问题

文章目录 1. 使用灵活的布局组件2. 允许内容滚动3. 处理文本溢出4. 检查父容器约束5. 使用自适应布局6. 调试工具7. 其他技巧总结 在 Flutter 开发中,UI 溢出(如 A RenderFlex overflowed 错误)通常是由于布局空间不足或子组件尺寸超出父容器…

使用FastExcel时的单个和批量插入的问题

在我们用excel表进行插入导出的时候,通常使用easyexcel或者FastExcel,而fastexcel是easy的升级版本,今天我们就对使用FastExcel时往数据库插入数据的业务场景做出一个详细的剖析 场景1 现在我们数据库有一张组织表,组织表的字段…

【力扣刷题|第十七天】0-1 背包 完全背包

目标和 力扣题目网址:目标和 这道题我们先用回溯的思想来做。首先我们设正数和为S,数组和为N,目标值为T,那么S-(N-S)T化简之后可以得S(TN)/2即选择的正数个数为偶数,而且NT也为偶数,那么第一个判断条件我们就有了&…

深入浅出 Embedding

1. 什么是 Embedding? Embedding(嵌入)是一种将高维数据映射到低维连续空间的技术,用于表达数据的语义关系。简单来说,它是一种向量化表示,将文本、图像、用户行为等信息转换为数值向量,使得相似的数据在向量空间中距离更近。 2. 如何理解 Embedding? 2.1 浅显易懂的…

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft Fabric 服务器搭建,Fabric 模组详细搭建教程

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft Fabric 服务器搭建,Fabric 模组详细搭建教程 一、 服务器介绍二、安装 JDK 21三、搭建 Minecraft 服务端四、本地测试连接五、如何添加模组(mods)六、添加服务,并设置开…

【MLP-BEV(10)】BEVPooling V1和BEVPooling V2的view_transformer,进行鱼眼图片实践

文章目录 先说说 BEVPoolv1步骤1:3D点生成步骤2 2D特征采样和BEV特征生成特点再谈谈BEVPoolv2步骤1:3D点生成步骤2: 计算索引关系步骤3: `voxel_pooling`计算鱼眼图片进行实践步骤1、3D点生成(基于Kannala-Brandt 进行调整)步骤2、2D特征采样和BEV特征生成(1) 体素化 (Voxe…

鸿蒙项目源码-天气预报app-原创!原创!原创!

鸿蒙天气预报项目源码包运行成功含文档ArkTS语言。 我半个月写的原创作品,请尊重原创。 原创作品,盗版必究!!!! 原创作品,盗版必究!!!! 原创作品…

告别桌面杂乱与充电焦虑,移速165W百变桌面充电站首发体验

告别桌面杂乱与充电焦虑,移速165W百变桌面充电站首发体验 哈喽小伙伴们好,我是Stark-C~ 先如今,家里的电子产品越来越多,手机、平板、电脑三件套已经是基础配置,还有相机、Switch、智能手表等,这些产品用…