java进阶知识

🍀注解

☘️什么是注解:

Java中的注解也称标注,可以对类,方法,属性,参数,包等进行标注,让编译器或运行时其他类进行解析, 完成某个功能.
注:Java 标注可以通过反射获取标注内容,注解也可以编译到字节码文件

☘️内置注解:

在这里插入图片描述

☘️元注解:

元注解是javaAPI提供的,是用于修饰注解的注解,通常用在注解的定义上:
🍁分类:
1.@Retention- 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。(注解生效范围)
SOURCE:在源文件中有效(即源文件保留)
CLASS:在 class 文件中有效(即 class 保留)
RUNTIME:在运行时有效(即运行时保留)

🍁2.@Documented- 标记这些注解是否包含在用户文档中。

🍁3.@Target- 标记这个注解应该是哪种 Java 成员。
ElementType.TYPE 可以应用于类的任何元素。
ElementType.CONSTRUCTOR 可以应用于构造函数。
ElementType.FIELD 可以应用于字段或属性。
ElementType.LOCAL_VARIABLE 可以应用于局部变量。
ElementType.METHOD 可以应用于方法级注释。
ElementType.PACKAGE 可以应用于包声明。
ElementType.PARAMETER 可以应用于方法的参数

🍁4.@Inherited- 标记这个注解是继承于哪个注解类(默认注解并没有继承于任何
子类)
🍁5.@Repeatable- 标识某注解可以在同一个声明上使用多次。

🍁6.自定义注解

🍀对象克隆:

☘️作用:
将一个已经存在的对象以及对象数据 克隆到另一对象中.
注:对象克隆两个内存地址不同

☘️如何实现对象克隆:

类实现 Cloneable接口,重写Object 类中clone() 在重写的clone方法中,调用父类clone方法返回一个新对象
在这里插入图片描述
在这里插入图片描述
☘️浅克隆:
克隆一个对象时,如果对象中有关联的对象,只将关联对象的地址复制过来,那么称为浅克隆
☘️
深克隆:

克隆一个对象时,如果对象中有关联的对象,如果将关联的对象也一同克隆(创建一个新的),那么称为深克隆
☘️如何做到深克隆:
1.在每一层类中都重写clone方法,类实现 Cloneable接口, 层级多了就比较麻烦
2.序列化 对象的输入和输出流
在这里插入图片描述

🍀Java设计模式:

☘️概念:
经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。
☘️统一建模语言(Unified Modeling Language,UML)
UML: 是一种帮助开发人员进行设计的语言,使用各种图形符号,来表示各模块之间的关系.
☘️java语言基本单位:
☘️1.类:
类是指具有相同属性、方法和关系的对象的抽象,它封装了数据和行为,是面向对象程序设计(OOP)的基础,具有封装性、继承性和多态性等三大特性。在 UML 中,类使用包含类名、属性和操作且带有分隔线的矩形来表示
☘️2.接口:
接口(Interface)是一种特殊的类,它具有类的结构但不可被实例化,只可以被子类实现。它包含抽象操作,但不包含属性。它描述了类或组件对外可见的动作。在 UML 中,接口使用一个带有名称的小圆圈来进行表示

☘️ 类与类之间的关系:

☘️1.依赖关系:
在一个类中的方法,使用到另一个类中的方法具有临时性(依赖 use-a)
在这里插入图片描述
☘️ 2.关联关系 :
把一个类当做另一个类的属性 (has-a)
🍁单关连:
在这里插入图片描述
Customer类持有一个类型为Address的成员变量类实现
🍁双关联:
在这里插入图片描述
双方各自持有对方类型的成员变量
🍁自关联:
在这里插入图片描述
自关联在UML类图中用一个带有箭头且指向自身的线表示。上图的意思就是Node类包含类型为Node的成员变量,也就是“自己包含自己”
☘️3.聚合关系
在这里插入图片描述
聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如,学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。
☘️4. 组合关系
在这里插入图片描述
在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,头和嘴的关系,没有了头,嘴也就不存在了。
☘️5.继承关系(is-a)
是父类与子类之间的关系
在这里插入图片描述
☘️6.实现关系
实现关系是接口与实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作
在这里插入图片描述

☘️面向对象设计原则:

1.单一职责:(实现类职责要单一)
一个类不要负责太多事情,否则导致类内部耦合度高,不利于扩展高内聚,低耦合
2.开闭原则:(对扩展开发,对修改关闭)
程序扩展功能时,不建议修改原有的代码,建议通过扩展一个新的类来实现新的功能.
3.里氏替换原则:(不要破坏继承体系)
子类继承父类时除添加新的方法完成新增功能外尽量不要重写父类的方法(使用父类时,可以换成子类,也能保证程序没有问题)
4.接口隔离原则:(在设计接口的时候要精简单一)
使用多个接口,而不使用单一的总接口,不强迫新功能实现不需要的方法
5.依赖倒置原则:(要求面向接口编程)
如果有多个同类型事物时,我们可以抽取一个共同抽象层,具体的实现细节应该依赖于抽象.
6. 迪米特原则(只与直接的朋友的通信):
一个最好只与自己直接相关的类有关系,尽量不要使用到与自己没有直接关系的类.
7.组合/聚合复用原则:(尽量使用聚合和组合的方式,而不是使用继承)
在某些情况下, B类中只想用到A类中的某个方法, 那么可以不使用继承关系 可以在B类中关联A, 调用A类中的方法还可以在B类中依赖A, 在B类中的某个方法中使用到A类中的方法

☘️设计模式:

注: java中设计模式共23种分为3大类 创建型 ,结构型,行为型

☘️单例模式:

特点:
单例类只有一个实例对象;该单例对象必须由单例类自行创建; 单例类对外提供一个访问该单例的全局访问点;
实现方式:
1. 饿汉式(急切式)
在类加时就把唯一单例对象就创建好了
在这里插入图片描述
☘️2.懒汉式单例
在类加载时并不创建单例对象,在第一次获取单例对象时才创建存在线程安全问题双重检索 + volatile
在这里插入图片描述
注:Runtime 类属于典型的单例设计

☘️工厂模式

🍁简单工厂:
有一个工厂类,负责生产某一类产品,同一类产品,具备同一个抽象父类(抽象类,接口)将创建对象与使用对象分离(spring框架就是这种设计思想)
在这里插入图片描述
注:简单工厂模式并不是23种设计模式之一,因为它并不符合开闭原则
🍁工厂方法模式:
工厂方法,对工厂进行抽象,一个抽象的产品对应一个抽象的工厂 一个具体的产品,对应一个具体的工厂,一个具体的工厂负责生产一个具体的产品.需要扩展新产品时,只需要添加新的具体产品类,和新的生产该产品的具体工厂类即可,这样就不需要修改原来的工厂,
符合开闭原则.
在这里插入图片描述
🍁抽象工厂模式:
抽象工厂是生产一系列产品(某个公司的产品 华为手机 华为汽车), 在抽象的工厂中定义生产不同的产品具体的工厂负责生产一个公司的一系列产品.

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

☘️原型模式:

在开发过程,需要创建多个数据相同的对象,每次使用new创建开销比较大,**使用对象克隆,**以先创建出来的原型对象为模板进行对象复制,提高了创建效率

☘️代理模式:

代理模式就是给一个对象提供一个代理,并由代理对象控制对原对象的引用。它使得客户不能直接与真正的目标对象通信。代理对象是目标对象的代表,其他需要与这个目标对象打交道的操作都是和这个代理对象在交涉比如 汽车厂卖汽车 不可能自己去卖 可以让4s店代理去卖
优点:
将目标与添加的功能相分离,保护目标对象,耦合度降低,增加新的功能不需要修改目标对象
🍁代理模式结构:

  1. 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
  2. 真实主题(RealSubject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
  3. 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能
    在这里插入图片描述
    代理模式分类:
    🍁静态代理:
    静态代理模式的特点,代理类接受一个Subject接口的对象,任何实现该接口的对象,都可以通过代理类进行代理,增加了通用性。
    注:满足开闭原则(添加一类目标时,可以扩展添加一个新的代理类),代码是写死的,不灵活
    在这里插入图片描述

☘️动态代理:(在动态代理中我们不再需要再手动的创建代理类,我们只需要编写一个动态
处理器就可以了。真正的代理对象在运行时为我们动态的来创建)
🍁jdk代理:
创建一个代理对象生成器,实现InvocationHandler,重写invoke方法,此方法会被代理动态调用
在这里插入图片描述
注:传入参数为目标类的类加载器, 获取目标类的接口、动态处理器

在这里插入图片描述
注:底层使用反射机制
注;它始终无法摆脱仅支持interface 代理的桎梏

🍁cglib代理:
实现时,不需要目标类区实现接口,采用动态字节码生成技术,为我们的目标类生成一个子类对象,
当调用方法时,对方法进行拦截,调用目标类方法.要求目标类不能是final修饰,方法也不能是final修饰的,和static修饰的.
注:pring框架中两种代理生成机制都实现了: 可以根据目标是否实现接口自动选择生成代理对象的方式,默认采用cglib代理方式生成.

☘️适配器模式:

将一个类的接口转换成客户希望的另外一个接口使得原本由于接口不兼容而不能一起工作的那些类能一起工作

☘️模版方法模式:

在程序开发中,有些实现步骤流程是固定的,可以抽取父类,在父类中实现各个步骤,再在父类中定义一个流程控制方法,在此方法中按照步骤调用执行,可以将某个容易发生变化的步骤定义为抽象方法,针对不同的情况,可以扩展一个子类实现抽象的方法,最终是由子类对象调用父类中流程控制的方法即可.

☘️策略模式:

可以将同一种功能不同实现细节先抽取一个抽象接口/抽象类,然后把不同的实现让子类继承实现,最只选择时,只需要选择不同的子类既可,将不同实现封装不同的子类中

  • 29
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值