【Java进阶】学好常用类,code省时省力

news2025/8/3 2:46:21

一、工具类

所谓工具类,即将完成通用功能的方法分类放到类中,工具类能够被高效地重复使用,使我们的编码快速、高效。

工具类的设计

工具方法使用public static修饰,通过工具类名调用工具方法。对于工具类,我们通常都会将构造方法私有化,目的是防止外界创建对象调用静态方法。

如果工具方法未用static修饰,则需要创建工具类对象调用工具方法,这时我们应考虑将工具类设计为单例模式

单例模式(singleton)

设计模式:谈到单例模式,我们应当想到设计模式,设计模式是一套被反复使用的代码设计经验总结,专门用于解决特定场景的需求。

所谓单例,即只有一个实例(对象),即保证在整个应用中某个类有且只有一个实例,即类在堆内存中只能创建一个对象。 实例中持有数据,只有一个实例,则多个模块访问该实例的数据都是一样的,可用于共享信息。

单例模式分类

  • 饿汉式:类加载时创建对象
  • 懒汉式:类加载时只声明对象,只有需要时才创建对象
  • 枚举法:

设计要求

  • 必须在类中创建一个对象
  • 构造器私有化,防止外界创建对象
  • 提供一个公共静态方法,用于返回自身创建的对象(即向外界提供统一的访问方式)

二、包装类

所谓包装类,即将基本数据类型封装到一个类中,包装类位于java.lang

Object

  • Boolean --> boolean
  • Number
    • Byte --> byte
    • Short --> short
    • Integer --> int
    • Long --> long
    • Float --> float
    • Double--> double
  • Character --> char

Integer

Integer内部封装了一个int类型的值,并提供了操作该值以及int和String之间转换的方法

常用方法

  • static Integer valueOf(int i):创建指定int值的Integer对象

  • static Integer valueOf(String s): 创建指定String值的Integer对象

  • static int parseInt(String s)将String转换为int类型

  • static String toString(int i):将int转换为String对象

  • int intValue():将Integer转换为int类型

  • String toString():将Integer转换为String对象

Auto-Boxing 和 Auto-UnBoxing

装箱和拆箱,装箱即将基本数据类型包装为包装类对象,拆箱即将包装类对象转换为基本数据类型。

自动装箱和自动拆箱,其实跟装箱和拆箱差不多的,只是不需要我们手动去转换,但底层依然是手动装箱和拆箱。

自动装箱:Integer num = 20;

自动拆箱:int val = num;

缓存设计

从性能上考虑,将常用数据存储到缓存区域,使用时则不需要创建对象,从而提高性能。

缓存范围:对于Byte、Short、Integer、Long,范围为[-128, 127];对于Character,范围为[0, 127]。

三、BigDecimal类

位于java.math,用于处理高精度数据和金融领域

构造方法:

BigDecimal(type val):type可以为int、long、double、String

例如:BigDecimal num = new BigDecimal(0.09);

成员方法:

  • add()
  • subtract()
  • multiply()
  • divide()

除不尽问题:java.lang.ArithmeticException
Non-terminating decimal expansion; no exact representable decimal result.

  • setScale()

保留位数, 精度控制

  • RoundingMode.HALF_UP 四舍五入
  • RoundingMode.HALF_DOWN 四舍五入

四、String类

位于java.lang,String为字符串(字符序列)

分类

根据同一个对象, 内容能不能修改区分

  • 不可变字符串:String
    • 创建完毕,内容将不能修改,若改变其内容,其实是创建新对象
    • 在内存中以字符数组的形式存在
    • 创建方式
      • String str = "Hello"; 存储在方法区的常量池,节约内存
      • String str = new String("Hello");
      • str1先指向常量池中的hello,之后str2也指向了常量池的hello

*   “空”值
    *   `String str = null;` 没有初始化,没有分配空间
    *   `String str = "";` 完成初始化,分配了空间,但没内容
*   常用方法
    *   `int length()`:返回字符串的字符个数(长度)(包含空格)
    *   `char charAt(int index)`:返回指定索引位置的字符(从0开始)
    *   `int indexOf(String str)`:返回指定字符串在此字符串中从左向右第一次出现的索引(比如获取文件名“.”的位置)
    *   `boolean equals(Object anObject)`:比较内容是否相同
    *   `boolean equalsIgnoreCase(String anotherString)`:比较内容是否相同(忽略虑大小写)(比如验证码判断)
    *   `String toUpperCase()`:将字符串所有字符转为大写
    *   `String toLowerCase()`:把字符串所有字符转换为小写
    *   `String substring(int beginIndex)`:从指定位置开始截取字符串(从0开始)
    *   `String substring(int beginIndex, int endIndex)`:截取指定区域的字符串(从0开始,左闭右开)(比如截取文件的文件名部分)
    *   `boolean startsWith()`:判断字符串是否以指定前缀结束
    *   `boolean endsWith()`:判断字符串是否以指定后缀结束(比如判断文件为何种类型)
    *   `String trim()`:清除字符串头部尾部空白
    *   `boolean isEmpty()`:判断字符串是否为空
    *   `String concat(String str)`:拼接字符串
    *   `byte[] getBytes()`:将字符串转为byte序列
    *   `int hashCode()`:取字符串的哈希码
    *   `String replace(char oldChar, char newChar)`:将字符串中的某个字符替换为另一个字符
    *   `String[] split(String regex)`:拆分字符串
  • 可变字符串:StringBuilder/StringBuffer

    创建完毕内容可以修改,内容发生修改,对象保持不变

    • StringBuffer
      • 封装的数组默认空间是16个字符,当容量不够时,会自动扩容
      • 构造方法
        • StringBuffer():创建默认容量的字符串缓冲区
        • StringBuffer(int capacity):创建指定容量的字符串缓冲区
      • 常用方法
        • append()
        • insert()
        • delete()
        • setCharAt():只能在有数据的位置修改
        • replace(start, end, str):可以替换为空、变长、变短
        • length():返回字符个数
        • capacity():返回字符缓冲区的容量
      • 扩容原理
        • 当向字符数组添加元素发现容量不够时,利用value << 1 + 2(乘二加二)计算出扩容后新字符数组的容量,若新容量仍不满足要求,则直接将字符串长度作为容量进行扩容,然后利用数组复制的方式将旧字符数组复制到新字符数组,最后将新字符数组的地址赋值给包装类StringBuffer的value属性。(16 --> 34 --> 70 --> 142 ...)

           

           

  • 线程安全,适合多线程环境
  • StringBuffer(与StringBuilder基本一致)
  • 区别
    • 相同点:都是字符串可变缓冲区,API提供了相同的CRUD操作
    • 不同点:StringBuffer线程安全,效率低,出生于JDK 1.0;StringBuilder线程不安全,效率高,出生于JDK1.5

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI内容生成时代:该如何和AI对话?

北大出版社&#xff0c;人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理 人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典 AI自动生成内容&#xff08;AIGC)最近可以说非常热门。而如何给AI有效输入提示&#xff0c;从而达…

基于JSP的保险业务管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86467452 主要使用技术 SpringStruts2HibernateJSPJSCSSMysql 功能介绍 本系统旨在为当今的保险行业提供一套综合性的管理系统业务&#xff0c;系统的主要用户为保险的购买者以及系统的管理…

安信可Ai-WB1系列固件烧录指导

文章目录前言1 准备材料2 硬件连接3 烧录软件的使用联系我们前言 本文主要介绍如何使用Ai-WB1系列模组以及开发板更新固件烧录操作说明。 1 准备材料 AI-WB1系列模组或者开发板USB转TTL模块/Type-C数据线固件详见链接常见固件中的出厂固件串口工具链接烧录工具详见链接 烧录…

在github上部署静态页面

使用github-page部署静态页面 需求 假如你辛辛苦苦写好了一个静态网页&#xff0c;很想要炫耀一下&#xff0c;让大家都可以通过公网访问看到我的网页。但是不想太麻烦&#xff0c;买服务器&#xff0c;安装软件&#xff0c;部署环境&#xff0c;配置域名&#xff0c;备案&…

navicate的安装使用

1 navicat概述 Navicat for MySQL 是管理和开发 MySQL 或 MariaDB 的理想解决方案。这套全面的前端工具为数据库管理、开发和维护提供了一款直观而强大的图形界面。官网&#xff1a; http://www.navicat.com.cn 2 navicat安装 网上有教程 3 navicat使用 3.1 建立和mysql服务…

金融行业数据安全法律法规清单

近年来&#xff0c;随着业务快速发展&#xff0c;金融机构积累了大量的数据&#xff0c;其中包含大量的客户信息等敏感数据&#xff0c;数据信息一旦泄露&#xff0c;不仅会给客户造成直接经济损失&#xff0c;也会给金融业的声誉带来负面影 响&#xff0c;甚至会导致金融机构承…

dreamweaver作业静态HTML网页设计 大学美食菜谱网页制作教程(web前端网页制作课作业)

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Linux之权限【读、写、执行】【详细总结】

目录权限相关介绍rwx权限详解rwx作用到文件rwx作用到目录文件及目录权限实际案例权限修改第一种方式&#xff0c;&#xff0c;-&#xff0c;变更权限案例演示&#xff1a;第二种方式&#xff1a;通过数字变更权限chmod urwx,grx,ox 文件目录名 chmod 751 文件目录名修改文件所…

工时管理:警惕员工时间偷窃!企业应该如何避免?

员工时间偷窃是指员工捏造工时&#xff0c;对工时进行四舍五入&#xff0c;或故意延长休息时间&#xff0c;从事与工作无关的活动&#xff0c;却谎报了工作时间&#xff0c;接受了公司在这期间支付的劳动报酬。大家都知道的“带薪摸鱼”这个词&#xff0c;就是员工时间偷窃的一…

Redis学习

Redis1.NoSQL数据库概述NoSQL使用场景NoSQL不适用场景2.Redis2.1应用场景2.1.1 配合关系型数据库做高速缓存2.1.2 多样的数据结构存储持久化数据2.1.3 Redis内存管理2.1.3.1 删除策略2.1.4 Redis持久化机制2.1.4.1 什么是RDB持久化&#xff1f;2.1.4.2 RDB创建快照时会阻塞主线…

小啊呜产品读书笔记001:《邱岳的产品手记-12》第22讲 产品经理的图文基本功(上):产品文档 23讲产品经理的图文基本功(下):产品图例

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-12》第22讲 产品经理的图文基本功&#xff08;上&#xff09;&#xff1a;产品文档 & 23讲产品经理的图文基本功&#xff08;下&#xff09;&#xff1a;产品图例一、今日阅读计划二、泛读&知识摘录1、第22讲 产品经…

WPF中使用MVVM模型进行数据绑定

文章目录前言一、声明一个类用来实现接口 INotifyPropertyChanged二、实例化ViewModel对象1.新建MainViewModel模型类2.实例化对象三、在界面设计代码中进行绑定四、应用前言 WPF数据绑定对于WPF应用程序来说尤为重要&#xff0c;本文将讲述使用MVVM模式进行数据绑定的四步走用…

如何实现一个优秀的 HashTable 散列表?

本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 提问。 前言 大家好&#xff0c;我是小彭。 在前几篇文章里&#xff0c;我们聊到了 Java 中的几种线性表结构&#xff0c;包括 ArrayList、LinkedList、ArrayDeque 等。今天&#xf…

ArcGIS绘制地球

下面这个图是非常不错的&#xff0c;截取自论文的一张图&#xff1a; 学了十几年地理学&#xff0c;最初的兴趣恐怕还是小时候常常摆弄的地球仪&#xff1b;现在终于有机会尝试地球仪风格制作了。 虽然迟到了十几年&#xff0c;不过今天还是有机会“复现”小时候的地球仪。 先…

使用docker-compose部署达梦DEM管理工具,mac m1系列适用

之前搭建了mac m1下基于docker的达梦库&#xff08;地址&#xff09;&#xff0c;但是没有一个好用的管理端。 用过DBeaver&#xff0c;可以使用自定jar创建dm链接&#xff0c;只做简单查询还行&#xff0c;要是用到一些修改、大文本查看、配置修改等高级点的功能就不行了。 …

Redis-使用java代码操作Redis

目录 Java连接Redis Java链接 测试是否连接 Java操作Redis Redis字符串(String) Redis哈希(Hash) Redis列表&#xff08;List&#xff09; Redis集合&#xff08;Set&#xff09; Java连接Redis 前置条件&#xff1a;Redis的服务要开启 pom依赖 <dependency>&l…

小熊U租港交所上市:市值28亿港元 京东联想腾讯是股东

雷递网 雷建平 11月24日小熊U租母公司凌雄科技集团有限公司&#xff08;简称&#xff1a;“凌雄科技”&#xff0c;股票代码为&#xff1a;“02436”&#xff09;今日在港交所上市。凌雄科技发行价为7.6港元&#xff0c;募资总额为3.37亿港元。凌雄科技开盘价为7.9港元&#xf…

C++17 --- 多态性、虚函数、多态的条件、联编(捆绑,绑定)

一、多态性 1、多态 多态性是面向对象程序设计的关键技术之一。 若程序设计语言不支持多态性&#xff0c;不能称为面向对象的语言。 多态性(polymorphism) 多态性是考虑在不同层次的类中&#xff0c;以及在同一类中&#xff0c;同名的成员函数之间的关系问题。 函数的重载&…

弘玑Cyclone2022产品发布会:超级自动化下的流程挖掘——弘观流程智能

近日&#xff0c;在弘玑Cyclone“智无边界&#xff0c;数字未来”发布会上&#xff0c;弘玑Cyclone2022年超级自动化系列产品全新亮相&#xff0c;首席产品官贾岿博士带领产品团队以创新技术对新时代语境下的数字生产力进行了全新解读。 本文将为大家分享本次发布会重磅推出的…

C++之字符串处理函数

字符串操作函数 C语言中几个处理字符串的函数都是以str开头,处理时默认遇到\0结束操作 这些字符串函数都使用了下面这个头文件: #include <string.h> 测量字符串的长度strlen 函数原型 size_t strlen(const char *s) //s指需要测量的字符串首元素地址注意,测量时不计…