用亿点时间重学部分Java基础

本地构建AI智能分析助手之 05 PandasAI如何MySQL数据库 (教程含源码) 与 PostgreSQL 连接器类似,MySQL 连接器允许您连接到 MySQL 数据库。即使您不熟悉 MySQL 或 PandasAI,它也设计得易于使用。 阅读详情

从笔者个人角度, 针对Java基础中的一些生僻难点进行了归类整理, 希望可以帮到有需要的兄弟们

1 关键字

1.1 private

类中所有的private方法都隐式地指定为final

1.2 static

static修饰的变量永远不会被序列化

类中被static修饰的内容建议通过类名进行调用

通过静态导入import static导入的静态成员, 可以直接使用, 不需要再通过类名调用

1.3 strictfp

strictfp关键字可以应用于方法/类/接口, 不能应用于抽象方法/变量/构造函数, 确保在每个平台上获得相同的结果

常用于浮点数相关内容, 防止因平台不同导致数据精度不一致

Java 17中解决了浮点指令问题, 已移除此关键字

1.4 transient

对于不想序列化的变量, 使用transient

需要注意以下内容:

  • 只能修饰变量, 不能修饰类和方法
  • 修饰的变量, 在反序列化后变量值将会被置成类型的默认值. 例如, 如果是修饰 int 类型,那么反序列化后结果就是 0

2 基本类型

2.1 8种基本类型介绍

基本类型位数字节默认值
int3240
short1620
long6480L
byte810
char162'u0000'
float3240f
double6480d
boolean1false

其中boolean依赖于JVM厂商的具体实现, 理论上占1位, 可能出现不同

2.2 精度丢失问题

float和double都会丢失精度, 原因是数据转换为二进制可能会出现无限循环, 超出储存长度

在涉及金额等极为敏感的浮点数据时, 请使用BigDecimal来处理运算

在创建BigDecimal时, 应使用字符串参数或valueOf方法:

// YES!!
new BigDecimal("0.1");
BigDecimal.valueOf(0.1f);
// NO!! 会丢失精度
new BigDecimal(0.1f);
复制代码

2.3 包装类型

基本类型都有对应的包装类型, 其存在的意义在于允许null值含义

举个例子, 学生参加考试但成绩为0和没有参加考试成绩为null是两种情形, 基本类型int没办法体现, 其包装类型Integer则可以

包装类型除Float和Double外都存在常量池, 所以在比较时应使用equals方法而不是==:

// 常量池中存在一个Integer对象, 其值为1
Integer i1 = 1;
Integer i2 = 1;
Integer i3 = new Integer(1);
// 结果为true
i1 == i2;
// 结果为false
i1 == i3;
// 结果为true
i1.equals(i3);
复制代码

3 函数

3.1 函数签名

函数签名是函数在一个类中的唯一标识

内容包括方法名/参数类型/参数名, 不包括返回值

3.2 重载

发生在同一个类中(或者父类和子类之间), 方法名必须相同,参数类型不同/个数不同/顺序不同,方法返回值和访问修饰符可以不同

那可以存在方法名相同/参数相同但返回值不同的重载吗?

答案是不行, 3.1中的函数签名不包括返回值, 所以方法名相同/参数相同但返回值不同的方法会被认为是同一方法, 不能进行重载

3.3 重写

方法名/参数列表必须相同,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类

如果方法的返回值类型是 void 和基本数据类型,则返回值重写时不可修改

如果方法的返回值类型是引用类型,重写时可以返回该引用类型的子类

3.4 try-catch-finally

当try语句和finally语句中都有return时, finally语句的返回值将会覆盖原始的返回值

换而言之, finally语句一定会执行

// 返回为0
try {
    return 1;
} catch (Exception e) {
    // ...
} finally {
    return 0;
}
复制代码

3.5 try-with-resource

适用于任何实现 java.lang.AutoCloseable或者 java.io.Closeable 的对象, 会自动调用close方法

4 面向对象

4.1 对象构建顺序

  1. 静态代码块
  2. 非静态代码块
  3. 构造方法

4.2 静态代码块

public class Person {

    static {
        // 静态代码块
    }
    
}
复制代码

静态代码只会在类的初始化步骤执行一次, 具体在代码中写法为:

  • new Person()
  • Class.forName("cn.houtaroy.models.Person")

举个具体的例子:

package cn.houtaroy.models;

public class Person {

    static {
        System.out.println("静态代码块执行");
    }
    
    public static void main(String[] args) {
        try {
            new Person();
            Class.forName("cn.houtaroy.models.Person");
            new Person();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}
复制代码

上述代码只会有一次输出: 静态代码块执行

可以理解为: 静态代码块中定义的是不同对象共性的初始化内容

一个类中的静态代码块可以有多个,会按照它们出现的先后顺序依次执行

public class Person {

    static {
        // 先执行
    }
    static {
        // 再执行
    }
    
}
复制代码

静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问:

public class Person {

    static {
        // 可以赋值
        age = 0;
        // IDE报错, 无法访问
        System.out.printf("出生年龄: %d", age);
    }
    
    public static Integer age;
    
}
复制代码

4.3 静态内部类

  1. 不需要依赖外围类的创建
  2. 不能使用任何外围类的非静态成员变量和方法

静态内部类可用于实现单例模式, 优点是延迟初始化和JVM提供的线程安全支持 :

public class PersonFactory {

    // 私有构造方法, 防止在外部调用
    private PersonFactory() {
        
    }

   // 私有静态内部类, 无法被外部访问
    private static class PersonFactoryHolder {
        private static final PersonFactory INSTANCE = new PersonFactory();
    }

    // 静态方法, 调用私有静态内部类获取唯一实例
    public static PersonFactory getInstance() {
        return PersonFactoryHolder.INSTANCE;
    }
    
}
复制代码

4.4 hashCode与equals

hashCode用于判断对象的hash值是否相同

equals用于判断对象是否相同

在用到hash的地方都会使用hashCode和equals, 例如HashMap. 所以在重写时, 请务必使二者的返回结果保持一致

4.5 值传递

Java中只有值传递, 哪怕是在面向对象, 举个具体的例子:

public class Test {

    public static void main(String[] args) {
        Student s1 = new Student("小张");
        Student s2 = new Student("小李");
        Test.swap(s1, s2);
        System.out.println("s1:" + s1.getName());
        System.out.println("s2:" + s2.getName());
    }

    public static void swap(Student x, Student y) {
        Student temp = x;
        x = y;
        y = temp;
        System.out.println("x:" + x.getName());
        System.out.println("y:" + y.getName());
    }
    
}
复制代码

输出结果为:

x:小李
y:小张
s1:小张
s2:小李
复制代码

可以看到, 在函数内部x和y进行了交换, 但外部的s1和s2并没有发生变化

所以这四个变量代表的含义是:

  • s1: 学生小张对象的引用的值
  • s2: 学生小李对象的引用的值
  • x: s1的深拷贝
  • y: s2的深拷贝

因为x和y是深拷贝, 所以无论它们如何变化, 都不会影响原来的s1和s2

4.6 this/super与静态

两者的概念范畴完全不同:

  • 静态方法是类范畴的概念
  • this/super是对象范畴的概念

4.7 Objects.equals

在进行比较时(并非类, 全部内容均可)推荐使用Objects.equals:

// 均为false, 且不会抛空指针异常
Objects.equals("Houtaroy", null);
Objects.equals(null, "Houtaroy");
复制代码

5 枚举

5.1 使用枚举相关集合

在将枚举作为元素或键值等使用时, 推荐使用枚举相关集合, 例如EnumSet和EnumMap:

// 创建EnumSet
EnumSet<Gender> set = EnumSet.of(Gender.MAN);
// 创建EnumMap
EnumMap<Gender, String> map = new EnumMap<>(Gender.class);
map.put(Gender.MAN, "男人");
复制代码

5.2 实现设计模式

单例模式

利用枚举可以更简洁/高效/安全的实现单例模式, 且由JVM提供保障

public enum PersonFactory {

    INSTANCE;

    PersonFactory() {
      // 实现人员工厂初始化
      person = PersonCheckEntity.builder().id("test").build();
    }

    private PersonCheckEntity person;

    public static PersonFactory getInstance() {
      return INSTANCE;
    }

    public PersonCheckEntity getDeliveryStrategy() {
      return this.person;
    }
    
}
复制代码

策略模式

public enum PersonStrategy {

    STAND {
        @Override
        public void advance(Person person) {
            System.out.println("向前迈了一步");
        }
    },
    SIT {
        @Override
        public void advance(Person person) {
            System.out.println("向前爬了一截");
        }
    };
 
    public abstract void advance(Person person);
    
}

public class Person {
    
    private PersonStrategy status;
    
    public void advance() {
        status.advance(this);
    }
    
}
复制代码

状态模式

public enum PersonStrategy {

    STAND {
        @Override
        public void walk(Person person) {
            System.out.println("向前迈了一步");
        }
    },
    SIT {
        @Override
        public void walk(Person person) {
            System.out.println("坐着没办法走路, 站起来");
            person.setStatus(PersonStrategy.STAND);
            person.walk();
        }
    };
 
    public abstract void walk(Person person);
    
}

public class Person {
    
    private PersonStrategy status;
    
    public void walk() {
        status.walk(this);
    }
    
}
复制代码

6 反射

6.1 什么是反射

反射是框架的灵魂

它赋予了程序在运行过程中分析和使用类概念的能力, 使我们脱离最基本的业务逻辑, 站在更高的维度去处理和思考问题

Java中的利器注解便用到了反射

6.2 获取Class对象的四种方式

Class对象可以理解为类的描述

具体类

Class myClass = Target.class;
复制代码

Class.forName

Class myClass = Class.forName("cn.houtaroy.models.Target");
复制代码

对象实例

Target object = new Target();
Class myClass = object.getClass();
复制代码

类加载器

Class myClass = ClassLoader.loadClass("cn.houtaroy.models.Target");
复制代码

通过类加载器获取的Class不会执行初始化, 意味着不进行包括初始化等一系列步骤,静态块和静态对象不会执行

6.3 具体操作

创建目标类:

public class Target {

    private String value;

    public void say(String name) {
        System.out.printf("I love %s%n", name);
    }

    private void classValue() {
        System.out.printf("value is %s%n", value);
    }
    
}
复制代码

进行反射操作:

public class ExampleUtils {
    
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,
        NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        Class<?> targetClass = Class.forName("cn.houtaroy.models.Target");
        Object targetObject = targetClass.newInstance();
        Method[] methods = targetClass.getMethods();
        for (Method method : methods) {
            System.out.printf("拥有方法: %s%n", method.getName());
        }
        Field[] fields = targetClass.getFields();
        for (Field field : fields) {
            System.out.printf("拥有字段: %s%n", field.getName());
        }
        targetClass.getDeclaredMethod("say", String.class).invoke(targetObject, "Java");
        Field valueField = targetClass.getDeclaredField("value");
        valueField.setAccessible(true);
        valueField.set(targetObject, "test");
        Method classValueMethod = targetClass.getDeclaredMethod("classValue");
        classValueMethod.setAccessible(true);
        classValueMethod.invoke(targetObject);
    }
    
}
复制代码

运行结果为:

拥有方法: say
拥有方法: wait
拥有方法: wait
拥有方法: wait
拥有方法: equals
拥有方法: toString
拥有方法: hashCode
拥有方法: getClass
拥有方法: notify
拥有方法: notifyAll
I love Java
value is test
复制代码
  • getMethods和getFields方法只会读取public属性
  • 访问私有属性时使用getDeclaredMethod和getDeclaredField, 并调用setAccessible(true)修改其可使用性

从上述内容即可看出, 利用反射会带来一定程度的安全隐患

7 Java中的IO

程序I/O可分解为如下操作:

  1. 程序向操作系统发起I/O调用请求
  2. 系统内核等待I/O设备准备好数据
  3. 系统内核将数据从内核空间拷贝到用户空间

7.1 Blocking I/O

即同步阻塞I/O, 程序会一直等待到I/O操作执行完成

7.2 Non-blocking I/O

即I/O多路复用模型

同步非阻塞I/O使用轮询方式, 会非常消耗CPU资源, 在Web开发中几乎无法使用

I/O多路复用模型利用一个线程来管理, 通过减少无效的系统调用,减少了对 CPU 资源的消耗

7.3 Asynchronous I/O

即异步I/O模型, 通俗点就是系统内核完成后会执行程序指定的回调函数

8 小细节

8.1 StringBuilder与StringBuffer区别

StringBuilder线程不安全

StringBuffer线程安全

8.2 字节流与字符流

字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位

字符(Character)是计算机中使用的字母、数字、字和符号, 在不同的编码中占用的字节数量不同

Java中存在字节流为什么还要提供字符流呢?

因为在不知道字符编码类型时, 使用字节流很容易出现乱码问题

音频文件、图片等媒体文件用字节流较好,如果涉及到字符的话使用字符流较好


 

搭建 Newman + Postman + Git + Jenkins 环境教程 一步步搭建 Newman、Postman、Git 和 Jenkins 的环境。这些工具常用来做 API 测试和 CI/CD 自动化,尤其是 Postman 和 Newman 搭配 Git 和 Jenkins,能实现 API 集合的版本管理和自动测试。 阅读详情

相关推荐

LiteOS | 基于LiteOS的智慧农业案例实验分享

分享一个基于小熊派+LiteOS+华为云的案例实验(智慧农业)。 实验框图 相关模块简介 1、STM32L431RCT6 2、LiteOS LiteOS是华为开发的轻量级实时操作系统: LiteOS源码GitHub仓库链接: https://github.com/LiteOS/LiteOS 其源码一级目录结构如下: 其内核包括任务管理、内存管理、时间管理、通信机制、中断管理、队列管...

嵌入式大杂烩 5990

Java 什么是反射及反射的应用

一,概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 以下主要介绍通过反射获取私有的和公共的构造方法、成员变量、方法; 二,获取任意类的字节码对象的几种方式 Class类: Class 类的实例对象表示正在运行的 Java 应...

ezconn的博客 859

人大金仓数据库Kingbase FlySync同步程序安装

Kingbase FlySync同步程序(以下简称 KFS)是面向异地容灾、数据集中共享的场景推出的具备在异构数据平台间实现实时、增量数据同步的工具类产品,主要采用了物理日志解析技术,帮助用户解决不同数据平台的数据间可实现任意方向实时移动流转的问题,并保证此过程中数据不丢失,状态可监控,流转数据量可统计。KFS 需要安装的主要组件有 2 个,分别是后端同步程序和管理控制平台,另外KFS的部署方式也有2种,为分离部署何集中部署•集中部署:KFS与数据库部署在同一机器上。

weixin_44312518的博客 1179

java基础之-反射详解

Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。反射是java很重要的特性之一,了解反射可以让我们更好的进行编程反射机制详解 | JavaGuide。

m0_53039615的博客 195

camera 知识速查

本文总结了Camera开发中的常见问题排查方法和关键技术点。主要内容包括:I2C/MIPI不通的排查步骤、时序问题分析方法、Sensor/AF/Flash/PDAF的Bring Up流程、OTP调试方法、PDAF原理及调试、CTS/ITS问题解决思路、AE震荡解决方案、Systrace性能分析方法、Flicker产生原理、Tombstone问题定位等。还涉及V4L2框架解析、问题定位分层方法、Sensor Setting注意事项、时钟信号概念、第三方应用卡顿排查、大光圈概念、Monkey测试方法。

qq_41665131的博客 783

从像素到光影:解析《黑神话:悟空》中Nanite与Lumen的协同渲染革命

本文深度解析了《黑神话:悟空》如何利用Unreal Engine 5的Nanite与Lumen技术实现渲染革命。Nanite处理亿级多边形几何细节,无需传统LOD优化;Lumen提供全动态全局光照,实现实时光线反弹。两者协同工作,为游戏带来电影级视觉体验,重塑了实时渲染的技术标准与工作流程。

f6g7h8i9j的博客 425

Java反射机制分析

反射 1、反射机制的概念 指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能操作它的任意一个方法和属性。这种动态获取信息,以及动态调用对象方法的功能叫Java语言的反射机制。 本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。 2、反射的原理 为了彻底理解反射的原理,可以先理解一下虚拟机的工作机制。 通常,java在编译之后,会将Java代码生成为class源文件,JVM启动时,将会载入所有的源文件,并将类型信息存放

_Hihi_的博客 601

YOLOv8改进策略【YOLO和Mamba】| 2024 VM-UNet,高效的特征提取模块VSS block 二次创新提高精度

VM-UNet模型设计的出发点是解决现有CNN-based和模型在医学图像分割中的局限性,利用(SSMs)的优势,提出一种更有效的医学图像分割模型。具体来说,CNN-based模型在捕捉长距离信息方面存在不足,而模型由于自注意力机制的二次复杂度导致计算负担较重。SSMs模型如Mamba不仅在建模长距离依赖方面表现出色,还具有线性计算复杂度,这为VM-UNet的设计提供了理论基础。

Limiiiing的博客 620

Android粒子破碎效果(2)——实现多种破碎效果之ParticleSmasher

Android粒子破碎六种效果,包含爆炸效果、坠落效果、四个方向的逐渐飘落效果; 支持链式调用,自定义动画时间、样式、动画幅度等;

ifadai的博客 2397

基于STM32L4XX 、HAL库的TMC2209-LA-T步进电机驱动器驱动程序应用设计

/ R/W=0 表示写。uint32_t gconf_value = (0 << 0) // I_scale_analog: 禁用,使用UART控制电流。uint32_t ihold_irun = (8 << 0) // 保持电流 8/31 最大值。

PP_Cottage的博客 449

【实战教程】BMAD-METHOD 入门教程:用 AI 组建你的“七人开发团队”

简单说,BMAD-METHOD 就像一个会自己运转的“AI 软件公司”。它不是某个单一应用,而是一种AI 工作流方法论—— 把一个项目拆解成多个角色(产品、架构、前后端、测试、运维等),每个角色由一个 AI 智能体负责协作,就像你真的在带一个 7 人团队。GitHub 项目地址 👉目前 Star 数已经达到了恐怖的 20k,可见这套方法的影响力不小。BMAD-METHOD 的核心理念不是“生成代码”,而是“自动化协作”。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1624

《Java面试 基础篇》

Java

m0_47743353的博客 605

SolidWorks速成教程P3-5【零件 | 第五节】——异形孔向导&线性阵列&镜像

这节介绍异形孔向导、线性阵列、镜像。

嵌入式阿齐Archie 6074

重学Java(开篇)

hi,朋友,从今天开始,重新出发啦,之前的成绩和后悔都不重要啦!觉得落后了,就奔跑起来,而不是意志消沉!!! 研一假期即将结束,计划将自己过去的学习进行总结和复盘,以期有新的收获,同时能够更好的规划未来。 **好吧,先立个flag:每周至少更新三次总结,欢迎监督~~~~**** 复习计划: 1. 重学java 2. 重学数据结构与算法 3. 复习计算机操作系统并实践 4. 复习计算机网络并实践 5. 复习数据库并实践 6. 复习计组 7. ...

mark_追光的csdn博客空间 304

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

重学java—线程基础

线程:是操作系统进行调度的最小单位。线程不占有内存空间,它包括在进程的内存空间中。在同一个进程内,多个线程共享进程的资源。一个进程至少有一个线程。

weixin_43917227的博客 176

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

重学JAVA基础Day1

Java学习的第一天 1.概述 计算机包括硬件和软件两个部分。硬件是计算机中可以看得见的物理部分,软件是看不见的指令。这些指令可以控制计算机的硬件进行各种运算。 程序设计 定义:创建(或开发软件)。软件就是指令的集合,告诉计算机该做什么。 程序设计语言: 软件开发人员在程序设计语言强大的工具的帮助下创建软件。 2.计算机硬件概述 计算机一般包括: 中央处理器(CPU) 内存(主存) 储存设备 输入设备 输出设备 通信设备 这些小器件通过总线(bus)连接 3.冯·诺..

weixin_44644443的博客 458

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

重学Java(一):与《Java编程思想》的不解之缘

说起来非常惭愧,我在 2008 年的时候就接触了 Java,但一直到现在(2018 年 10 月 10 日),基础知识依然非常薄弱。用一句话自嘲就是:十年 IT 老兵,Java 菜鸡一枚。 于是,我想,不如静下心来,重新读一遍那些经典的 Java 技术书,并且没读完一章就输出一篇原创技术文章。从哪一本开始呢?想了一想,还是从《Java 编程思想》开始吧!毕竟这本书赢得了全球程序员的广泛赞誉,从 J...

wanghao112956的博客 162

重学 Go 语言:基础篇

专栏亮点 79 章节内容解析 Go 语言基础知识点; 使用反汇编、编程范式推导 Go 核心原理; 从架构思想层面解析 Go 语言每个细节; 与 C 语言对比学习 Go 基础核心; 从 Go 语言背景知识到灵活使用,知其然知其所以然。 专栏介绍 我一直从事服务器后端系统开发快 10 年了,高并发分布式是互联网应用的基础,工作中先后使用过C#、Java、Go 等语言。当前工作需要把平台迁移到 Go...

GitChat 969

《重学Java高并发》同步转异步编程技巧与实战运用

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!**

2401_84010326的博客 780

花火带你重学Java基础(一)

JVM会把class文件编译成机器码,这体现了JAVA解释型的特点,同时JIT也会把热点代码即时编译成机器码并且保存下来,因此我们也说JAVA是解释型和编译型混合语言。好啦,花火的第一节JAVA基础篇结束啦,本系列的目的就是总结更加精炼的语言,让大家快速温习一下JAVA基础,希望大家友善交流。之后会一天一更,完结这个系列的。

weixin_44817879的博客 78

2024050501-重学 Java 设计模式《实战命令模式》

命令模式在我们通常的互联网开发中相对来说用的比较少,但这样的模式在我们的日常中却经常使用到,那就是Ctrl+CCtrl+V。当然如果你开发过一些桌面应用,也会感受到这样设计模式的应用场景。从这样的模式感受上,可以想到这是把逻辑实现与操作请求进行分离,降低耦合方便扩展。命令模式是行为模式中的一种,以数据驱动的方式将命令对象,可以使用构造函数的方式传递给调用者。调用者再提供相应的实现为命令执行提供操作方法。可能会感觉这部分有一些饶,可以通过对代码的实现进行理解,在通过实操来熟练。

qq_24428851的博客 1400

2024043002-重学 Java 设计模式《适配器模式》

适配器模式的主要作用就是把原本不兼容的接口,通过适配修改做到统一。使得用户方便使用,就像我们提到的万能充、数据线、MAC笔记本的转换头、出国旅游买个插座等等,他们都是为了适配各种不同的口,做的兼容。。除了我们生活中出现的各种适配的场景,那么在业务开发中呢?在业务开发中我们会经常的需要做不同接口的兼容,尤其是中台服务,中台需要把各个业务线的各种类型服务做统一包装,再对外提供接口进行使用。而这在我们平常的开发中也是非常常见的。后面的实现类都需要完成此接口,并把具体的逻辑包装到指定的类中,满足单一职责。

qq_24428851的博客 997

重学Java(一)JDK、运算符、数据集合、字符串、时间、排序

目录一.jdk、jre、jvm二.运算符instanceof位运算符三.数据集合Collection接口List接口:存储有序的,可重复的数据(动态数组)Set接口:存储无序的,不可重复的数组Map接口Set,List,Map的工具类 Collections四.字符串StringStringBufferStringBuilder五.时间JDK8之前有的时间类java.util.Datejava.sql.DateSimpleDateFormat日历类 Calendar类(抽象类)JDK8新增的时间类Local

qq_43644273的博客 663

12天,这本《重学Java设计模式》PDF书籍下载量9k,新增粉丝1400人,Github上全球推荐榜!

作者:小傅哥 博客:https://bugstack.cn ????沉淀、分享、成长,让自己和他人都能有所收获! 一、前言 ????距离《重学Java设计模式》这本PDF书籍???? 7月12日出炉以后,因为工作内容时间加长,已经有两周没有推文了,对我自己来说还蛮不习惯的。也同时让我感悟到,除了上学阶段以后,想给自己投入时间真的不容易。 就像说365天,天天重复奋斗,那只能叫做劳动辛苦,不能算作给自己的努力。 有时候人之所以穷,是连时间都不是自己的,可用在自己身上的时间少之又少。就像有些人的时间一天等于

bugstack虫洞栈 5084

从 Spring 开始,三年时间,说说我与 优快云 的故事

按照近期的更新计划,本应该是一周更新两篇的,不过最近在准备部门内部的分享,本人呢,又不擅长做 PPT,结果就导致花了很久的时间。PPT 更擅长表达观点,而博客则不必关心那些花里胡哨的东西,直接把内容做好就行了。这篇内容自然就是选自我分享中的一段小插曲,先讲一下我与 优快云 的一些故事。

大鹏的博客 844

2024050402-重学 Java 设计模式《实战责任链模式》

击鼓传雷,看上图你是否想起周星驰有一个电影,大家坐在海边围成一个圈,拿着一个点燃的炸弹,互相传递。责任链模式的核心是解决一组服务中的先后执行处理关系,就有点像你没钱花了,需要家庭财务支出审批,10块钱以下找闺女审批,100块钱先闺女审批在媳妇审批。你可以理解想象成当你要跳槽的时候被安排的明明白白的被各个领导签字放行。这个类的是包装了责任链处理过程中返回结果的类,方面处理每个责任链的返回信息。// 时间格式化// 级别人员ID// 级别人员姓名// 责任链这部分是责任链,

qq_24428851的博客 1481
上一篇: 一个死锁的case
下一篇: SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享
在酒吧写代码
博客等级 码龄7年 210粉丝 330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值