【自学笔记】01Java基础-08Java常用API:04包装类

记录Java基础-常用API-有关时间日期的类。

1 包装类

  • 其实就是8种基本数据类型对应的引用类型,因为基本数据类型不能直接参与面向对象编程。
  • 具有将基本数据类型转换为对象的功能,并且实现了多种接口,支持集合框架和泛型。

在这里插入图片描述
包装类的主要特点和功能

  • 自动装箱与拆箱:从Java 5开始引入了自动装箱和自动拆箱机制,使得基本数据类型和其对应的包装类之间可以自动转换。

    • 自动装箱:基本类型的数据和变量可以直接赋值给包装类型的变量。

    • 自动拆箱:包装类型的变量可以直接赋值给基本数据类型的变量。

  • 空值处理:基本类型无法表示null,而包装类可以持有null值,这在需要区分值存在与否的场景下非常有用。

  • 实现接口:包装类通常实现了诸如Comparable、Serializable、Cloneable等接口,使得基本类型能够参与到这些接口定义的方法调用中。

  • 方法扩展:包装类提供了一些基本类型不具备的方法,如Integer类的parseInt()、toString()方法,以及用于缓存特定范围内的对象以提高性能的静态工厂方法valueOf()等。

包装类使用示例

假设在SpringBoot应用中有一个API接口,用于返回用户的年龄信息。由于年龄(age)是一个基本类型int,在处理HTTP请求和响应时,通常会将其封装到一个包含状态码和具体数据的包装类中。

首先,创建一个表示用户年龄响应的包装类 AgeResponse

import org.springframework.http.HttpStatus;

public class AgeResponse {

    private int code; // 状态码
    private String message; // 消息提示
    private Integer age; // 年龄数据

    public AgeResponse(HttpStatus status, String message, Integer age) {
        this.code = status.value();
        this.message = message;
        this.age = age;
    }

    // Getter与Setter方法
    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

然后,在Controller层,当处理完查询用户年龄的请求后,可以将年龄信息封装到AgeResponse中返回给前端:

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.HttpStatus;

@RestController
public class UserController {

    @GetMapping("/users/{id}/age")
    public ResponseEntity<AgeResponse> getUserAge(@PathVariable("id") Long id) {
        // 假设userService是获取用户年龄的业务服务
        Integer userAge = userService.getUserAgeById(id);

        if (userAge != null) {
            // 将年龄信息封装到AgeResponse中
            AgeResponse response = new AgeResponse(HttpStatus.OK, "获取成功", userAge);
            return ResponseEntity.ok(response);
        } else {
            // 用户不存在或年龄未找到时的状态码和消息
            AgeResponse response = new AgeResponse(HttpStatus.NOT_FOUND, "未找到该用户的年龄信息", null);
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response);
        }
    }
}

这样,客户端收到的响应就是一个包含了状态码、消息以及实际年龄数据的对象,便于前后端进行统一的数据交互格式。这里的Integer就是对基本类型int的包装类,它允许我们设置null值,并提供了更多的对象操作功能。

2 Arrays类

  • java.util.Arrays 类是Java标准库中的一个工具类,提供了处理数组的各种静态方法。
  • 这个类包含了对数组的排序、搜索、填充、比较以及转换为列表等多种操作。
  1. 排序

    • sort(int[] a):对整型数组进行升序排序。
    • sort(Object[] a, Comparator<? super T> c):对对象数组按照指定的比较器进行排序。
  2. 查找

    • binarySearch(int[] a, int key):在有序整型数组中使用二分查找算法查找指定元素并返回索引,找不到则返回负数。
    • equals(int[] a, int[] a2):检查两个整型数组是否相等。
  3. 填充

    • fill(int[] a, int val):将整型数组的所有元素设置为给定的值。
  4. 比较

    • deepEquals(Object[] a1, Object[] a2):深度比较两个数组的内容是否相同,对于数组内的对象也会递归进行内容比较。
  5. 复制

    • copyOf(int[] original, int newLength):创建原数组的一个副本,并可以指定新数组的长度。
  6. 转换为List

    • asList(T... a):将数组转换为固定大小的List视图,注意虽然看起来像List,但它不支持add或remove等修改操作。
  7. 其他方法

    • hashCode(int[] a):计算数组的哈希码。
    • toString(int[] a):将数组的内容转换成字符串表示形式。
    • 还有针对不同数据类型的类似方法,如long[]double[]Object[]等。

通过 Arrays 类,开发者能够方便地对数组进行各种基础操作,提高代码效率和简洁性。不过,对于多维数组的操作,通常需要循环嵌套调用 Arrays 的方法来实现。此外,在Java 8及更高版本中,Stream API提供了更多灵活且强大的数组操作方式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记录汇川:H5U与Fctory IO测试8

主程序&#xff1a; 子程序&#xff1a; IO映射 子程序&#xff1a; 出料程序 子程序&#xff1a; 重量程序 子程序&#xff1a; 自动程序 Fctory IO配置&#xff1a; HMI配置 实际动作如下&#xff1a; Fctory IO测试8

【一】创建Python TK GUI窗口,并简单设置窗口

文章目录 背景系统环境开始一个简单GUI启动一个GUI窗口&#xff08;不完成功能&#xff09;简单配置GUI窗口&#xff08;大小、位置、图标&#xff09; 运行示例 背景 这是一个系列文章。下一篇【【二】为Python Tk GUI窗口添加一些组件和绑定一些组件事件】 使用pyth…

AIGC大模型必备知识——LLM ,你知道它是如何训练的吗?小白必读深度好文

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; 近年来&#xff0c;人工智能&#xff08;AI&#xff09;领域经历了令人瞩目…

FineBI实战项目一(17):热门商品Top10分析开发

点击新建组件&#xff0c;创建热门商品Top10组件。 选择柱状图&#xff0c;拖拽cnt&#xff08;总数&#xff09;到横轴&#xff0c;拖拽goodName到纵轴。 选择排序规则。 修改横轴和纵轴的标签名称 切换到仪表板&#xff0c;拖拽组件到仪表板 效果如下&#xff1a;

今天去面一个点工,HR要我会数据库,Linux还有Python,这合理吗

软件测试出路在哪&#xff1f; 业务编程&#xff01;&#xff01; 1、软件测试的变化趋势 变化趋势1&#xff1a; 功能测试是核心&#xff0c;但是价值降低 目前测试这个行业&#xff0c;还是有大量的点工。但是行业的进步&#xff0c;技术的创新&#xff0c;导致了企业的需求…

mapper向mapper.xml传参中文时的乱码问题

1.起因&#xff1a; 在idea中进行模糊查询传参时&#xff0c;发现在idea中查中文查不出记录&#xff0c;在navicate中可以查出来。 2.猜测&#xff1a; 1.idea中的编码问题导致的乱码。 2.idea和navicate的编码一致性导致的乱码。 3.mapper向mapper.xml传参后出现乱码。 3.解…

「 典型安全漏洞系列 」02.SQL注入详解

引言&#xff1a;SQL注入是一个老生常谈且又非常重要的漏洞&#xff0c;导致许多热点的数据泄露事件。尽管学习起来相对简单&#xff0c;但它可能用于某些高危漏洞的利用。这使得它成为初学者的兴趣点&#xff0c;甚至对于更有经验的用户来说&#xff0c;SQL注入也是基本知识。…

快速打通 Vue 3(四):标签的 ref 属性与 Vue3 生命周期

很激动进入了 Vue 3 的学习&#xff0c;作为一个已经上线了三年多的框架&#xff0c;很多项目都开始使用 Vue 3 来编写了 这一组文章主要聚焦于 Vue 3 的新技术和新特性 如果想要学习基础的 Vue 语法可以看我专栏中的其他博客 Vue&#xff08;一&#xff09;&#xff1a;Vue 入…

【数据结构】--二叉树递归题记

最近写了几道关于二叉树的剑指offer题&#xff0c;和小伙伴们分享一下心得。 &#x1f308;对称的二叉树 请实现一个函数&#xff0c;用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样&#xff0c;那么它是对称的。 思路分析&#xff1a; 对于二叉树的问题来说肯…

谷达冠楠:抖音开网店创业怎么做

随着互联网的发展&#xff0c;越来越多的人选择在网上创业。而抖音作为目前最火的短视频平台之一&#xff0c;也成为了许多人开网店的首选。那么&#xff0c;如何在抖音上开网店创业呢?下面就来详细介绍一下。 第一步&#xff1a;注册账号 首先&#xff0c;你需要在抖音上注册…

登录模块的实现

一.前期的准备工作 1.页面的布局 (1)表单的校验: 利用element-ui提供的文档绑定rules规则后实现校验 (2)跨域的配置 &#xff1a; 利用proxy代理来解决跨域的问题 (3)axios拦截器的配置 两个点:1. 在请求拦截的成功回调中,如果token,因为调用其它的接口需要token才能调取。 在请…

【排序】对各种排序的总结

文章目录 前言1. 排序算法的复杂度及稳定性分析2. 排序算法的性能测试2.1 重复率较低的随机值排序测试2.2 重复率较高的随机值排序测试 前言 本篇是基于我这几篇博客做的一个总结&#xff1a; 《简单排序》&#xff08;含&#xff1a;冒泡排序&#xff0c;直接插入排序&#x…

【Docker】概述与安装

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一. Docker的概述 1.Docker为什么出现 2…

【AI视野·今日CV 计算机视觉论文速览 第285期】Mon, 8 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Mon, 8 Jan 2024 Totally 66 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Denoising Vision Transformers Authors Jiawei Yang, Katie Z Luo, Jiefeng Li, Kilian Q Weinberger, Yonglong Tian, Yue…

YOLOv8-Seg改进:轻量化改进 | 超越RepVGG!浙大阿里提出OREPA:在线卷积重参数化

🚀🚀🚀本文改进:OREPA在线卷积重参数化巧妙的和YOLOV8结合,并实现轻量化 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提升分割性能; 3)独家…

(css样式)权限控制el-button是否显示 + 鼠标悬浮停留才会显示el-button

前提&#xff1a; &#xff08;1&#xff09;当前物理席位是主任席&#xff08;seatType‘1’&#xff09; &#xff08;2&#xff09;管制席位TWR_ONE账号发布了内容&#xff1a;管制席——zhouzebiao——。。。。 &#xff08;3&#xff09;主任席tatai账号发布了内容&…

C++|47.动态数组 48.C++的std:vector使用优化

动态数组 动态数组叫vector&#xff0c;也是一种定义好的类/数据结构。“定义好”意味着 vector处在std命名空间之中。 vector的存在代表着一种可以调用的数据结构&#xff0c;不用 动态的意思是可以将该数组的大小进行动态调整。 也就意味着起初vector是没有固定大小的。 它是…

Git 基础指令

Git 基础指令 本章涵盖了我们在使用 Git 完成各种操作时将会用到的各种基本命令。 在学习完本章之后&#xff0c;我们应该能够配置并初始化一个仓库&#xff08;repository&#xff09;、开始或停止跟踪&#xff08;track&#xff09;文件、暂存&#xff08;stage&#xff09;…

QT第四天

头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTime>//时间类 #include<QTimerEvent>//定时器事件类 #include<QtTextToSpeech> //语言播报类 #include<QPushButton> namespace Ui { class Widget; }clas…

【Scala】——变量数据类型运算符

1. 概述 1.1 Scala 和 Java 关系 1.2 scala特点 Scala是一门以Java虚拟机&#xff08;JVM&#xff09;为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言&#xff08;静态语言需要提前编译的如&#xff1a;Java、c、c等&#xff0c;动态语言如&#…