当前位置: 首页 > news >正文

java常见类库

StringBuffer类

String和StringBuffer的区别

String

  • 不可变性String 类是不可变的,这意味着一旦创建了一个 String 对象,其值就不能改变。每次对 String 进行修改(如连接、替换等操作)都会产生新的 String 对象,原来的对象不会被改变。

  • 线程安全性:由于 String 的不可变性,它是线程安全的,可以被多个线程共享而无需担心数据一致性的问题。

  • 性能:因为每次修改都会创建新的对象,所以在频繁进行字符串操作时,String 的效率较低。

StringBuffer

  • 可变性StringBuffer 是一个可变的字符序列,可以被多次修改而不创建新的对象。这意味着如果需要对字符串进行大量的修改操作,使用 StringBuffer 比使用 String 更加高效。

  • 线程安全性StringBuffer 是线程安全的。它的方法都是同步的(即加了 synchronized 关键字),这使得 StringBuffer 可以在多线程环境中安全地使用,但是也导致了它的性能相比非线程安全的 StringBuilder 要差一些。

  • 性能:当需要在一个单线程环境下进行大量字符串操作时,StringBuffer 仍然不是最优选择,因为它的线程安全特性会带来额外的开销。在这种情况下,应该考虑使用 StringBuilder

使用场景

  • 使用 String:当你不需要修改字符串内容时,或者修改次数非常少的时候,使用 String 是合适的。此外,String 的不可变性和线程安全性使其成为多线程环境中的首选。

  • 使用 StringBuffer:如果你的应用程序需要在多线程环境中频繁地修改字符串,那么 StringBuffer 是一个很好的选择,因为它提供了线程安全的操作。

  • 使用 StringBuilder:对于单线程环境下的频繁字符串操作,推荐使用 StringBuilder,因为它比 StringBuffer 性能更高,同时又保持了可变性的优点。

StringBuffer介绍

String类自身有一个最大的缺陷:内容一旦声明则不可改变,JDK为了方便用户修改字符串内容提供了StringBuffer类

StringBuffer类不像String类那样可以直接通过声明字符串常量方式进行实例化,而是必须像普通类对象使用一样,首先通过构造方法进行对象实例化,而后才可以调用方法进行处理。

No.方法类型描述
1public StringBuffer()构造创建一个空的StringBuffer对象
2public StringBuffer(String str)构造将接受到的String内容变为StringBuffer内容
3public StringBuffer append(数据类型 变量)普通内容连接,等价于String中:”+”操作
4public StringBuffer insert(int offset,数据类型 变量)普通在指定索引位置处插入数据
5public StringBuffer delete(int start,int end)普通删除指定索引范围之内的数据
6public StringBuffer reverse()普通内容反转

示例

public class JavaDome{public static void main(String args[]){StringBuffer buf = new StringBuffer("hello");change(buf);String data = StringBuffer.toString();  //将StringBuffer变为String实例System.out.println(data);}
}
​
public static void change(StringBffer temp){temp.append("world").append("!");
}
实际上使用:
String strB = "hello"+"world"+"!"
程序编译后的结果全部等价于以下操作:
StringBuffer buf = new StringBuffer();
buf.append("hello").append("world").append("!");
所有的"+"编译之后都变成了StringBuffer中append()方法

除了可以修改内容的能力外,还提供了一些String类所不具备的方法

插入删除数据

StringBuffer buf = new StringBuffer();
buf.append("hello world").delete(6,12).insert(6,"!");

字符串反转

StringBuffer buf = new StringBuffer();
buf.append("hello");
System.out.println(buf.reverse());

CharSequence接口

常见子类

String、StringBuffer、StringBuilder

常见的方法

No.方法类型描述
1public char charAt(int index)普通获取指定索引字符
2public int length()普通获取字符串长度
3public CharSequence subSequence(int start,int end)普通截取部分字符串

使用示例

CharSequence str = "hello"; 
//子类实例向父类接口转型
CharSequence sub = str.subSequence(4,8);
//截取部分子字符串
​
//String类是CharSequence接口子类,所以本程序利用对象向上转型的操作通过字符串的匿名对象实现了CharSequece父接口对象实例化,随后调用subSequence()方法实现了子字符串的截取操作

注:

开发中优先考虑String类,只有在频繁操作修改这一操作中才会考虑使用StringBuffer或StringBuilder

AutoCloseable接口

该接口的主要功能是结合异常处理结构在资源操作完成后实现自动释放功能

public interface AutoCloseale{public void close() throws Exception;//资源释放
}

Runtime类

Runtime描述的是运行时的状态,在每一个JVM进程中都会提供唯一的一个Runtime类实例化对象。

可以利用Runtime类对象获取与JVM有关的运行时状态。

由于Runtime类中只存在一个实例化对象,所以在Runtime类中默认将默认将其构造方法封装(单例设计模式),这样就必须用Runtime类中提供的getRuntime()方法(为static方法)来获取实例化对象,随后就可以获取一些系统相关的信息。

No.方法类型描述
1public static Runtime getRuntime()普通获取Rintime类的实例化对象
2public int avaliableProcessors()普通获取可用的CPU处理器数量
3public long maxMemory()普通取得最大可用内存量
4public long totalMemory()普通取得总共可用内存量
5public long freeMemory()普通取得空闲内存量
6public void gc()普通运行垃圾收集器,释放垃圾空间

获取本机CPU处理器数量

public class JavaAPIDemo{public static void main(String args) throws Exception{Runtime runtime = Runtime.getRuntime(); //获取Runtime实例化对象System.out.println(runtime.avaliableProcessors()); //获取处理器数量}
}

注: long型数据主要有两种情况,表示文件大小和表示日期时间

System类

No.方法类型描述
1public static void arraycopy(Object src,int srcPos,Object destPos,int length)普通数组复制操作
2public static long currentTimeMillis()普通取得当前的日期时间,以long型数据返回
3public static void gc()普通执行GC操作

Cleaner类

在java中对象的整个生命周期大致可以分为七个阶段:

创建阶段(Created)

应用阶段(In Use)

不可见阶段(Invisible)

不可达阶段(Unreachable)

收集阶段(Collected)

终结阶段(Finalized)

释放阶段(Free)

Math数学计算

程序开发本质就是数据处理,java提供有java.lang.Math类来帮助开发者进行常规的数学计算处理。

例如,四舍五入,三角函数,乘方处理等

Math.abs(-10.9)  //绝对值 10.9
Math.max(10.2,20.3) //获取最大值
Math.log(5) //对数:1.60943...
Math.round(15.1) //四舍五入 15
Math.round(-15.5) //四舍五入 -15
Math.round(-15.51) //四舍五入 -16
Math.pow(10.2,20.2) //乘方:2.36441...

Rondom随机数

import java.util.Random

设置一个随机数的范围边界就可以随机生成不大于此边界范围的正整数

方法(随机生成正整数):public int nextInt(int bound)

Random rand = new Random();
rand.nextInt(100);

大数字处理类

BigInteger

No.方法类型描述
1public BigInterger(String val)构造将一个字符串变成BigInterger类型数据
2public BigInterger add(BigInterger val)普通加法计算
3public BigInterger substract(BigInterger val)普通减法计算
4public BigInterger multiply(BigInterger val)普通乘法计算
5public BigInterger divideBigInterger val)普通除法计算
6public BigInterger max(BigInterger val)普通返回两个大数字中的最大值
7public BigInterger min(BigInterger val)普通返回两个大数字的最小值
8public BigInteger[] divideAndRemainder(BigInterger val)普通除法操作,数组的第一个元素为除法的商,第二个元素为除法的余数

BigDecimal

No.方法类型描述
1public BigDecimal(double val)构造将double表示形式转换为BigDecimal
2public BigDecimal(int val)构造将int表示形式转换为BigDecimal
3public BigDecimal(String val)构造将字符串表示形式转换为BigDecimal
4public BigDecimal add(BigDecimal augend)普通加法计算
5public BigDecimal subtract(BigDecimal subtrahend)普通减法计算
6public BigDecimal multiply(BigDecimal multiplicand)普通乘法计算
7public BigDecimal divide(BigDecimal divisor)普通除法计算
8public BigDecimal divide(BigDecimal divisor,int scale,RoundingMode roundingMode)普通除法计算设置保留下小数位与进位模式

Date日期处理类

No.方法类型描述
1public Date()构造实例化Date对象
2public Date(long date)构造将数字变为Date类对象,long为日期时间数据
3public long getTime()普通将当前的日期时间变为long型

SimpleDateForrmat日期格式化

正则表达式

Arrays数组操作类

import java.util.Arrays

public class JavaApIDemo{public static void main(String[] args) throws Exception{int dataA[] = new int[] {1,2,3};int dataB[] = new int[] {1,2,3};System.out.println(Arrays.compare(dataA,dataB));System.out.println(Arrays.equals(dataA,dataB));int data[]C = new int[10];Arrays.fill(dataC,3); //内容填充System.out.println(Arrays.toString(dataC)); //数组转为字符串输出}
}
No.方法类型描述
1public static void sort(数据类型[] 变量)普通数组排序
2public static int binarySearch(数据类型[] 变量,数据类型 key)普通利用二分查找算法进行数据查询
3public static int compare(数据类型[] 变量,数据类型[] 变量)普通比较两个数组的大小,返回3类结果:大于(1)、小于(-1)、等于(0)
4public static boolean equals(数据类型[] 变量,数据类型[] 变量)普通数组相等判断
5public static void fill(数据类型[] 变量,数据类型 变量)普通数组填充
6public static String toString(数据类型[] 变量)普通数组转为字符串

异常结构

以后慢慢遇到再补充吧!

相关文章:

java常见类库

StringBuffer类 String和StringBuffer的区别 String 不可变性:String 类是不可变的,这意味着一旦创建了一个 String 对象,其值就不能改变。每次对 String 进行修改(如连接、替换等操作)都会产生新的 String 对象&…...

Wordly Wise 3000 国际背单词01 介绍 + 测词汇量

📚 Wordly Wise 3000 国际背单词01 介绍 测词汇量 🌟 大家好!我们正式启动背Wordly Wise 3000单词,旨在利用国际资源和科学的学练方法,帮助大家更得效地坚持学练单词。我们将通过图文和Video等多种形式与大家分享经验…...

Unity Dots理论学习-2.ECS有关的模块(1)

Unity的实体组件系统(ECS)是支撑DOTS模块和技术的面向数据架构。ECS为Unity中的内存数据和runtime进程调度提供了高度的控制和确定性。 ECS for Unity 2022 LTS 配备了两个兼容的物理引擎,一个高级的Netcode package,以及一个用来…...

2021.12.28基于UDP同信的相关流程

作业 1、将TCP的CS模型再敲一遍 服务器 #include <myhead.h> #define PORT 8888 #define IP "192.168.124.123" int main(int argc, const char *argv[]) {//创建套接字//绑定本机IP和端口号//监听客户端请求//接收客户端连接请求//收发消息//创建套接字int…...

使用 Docker 搭建 Hadoop 集群

1.1. 启用 WSL 与虚拟机平台 1.1.1. 启用功能 启用 WSL并使用 Moba 连接-CSDN博客 1.2 安装 Docker Desktop 最新版本链接&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接&#xff1a;Docker Desktop release notes | Do…...

optuna和 lightgbm

文章目录 optuna使用1.导入相关包2.定义模型可选参数3.定义训练代码和评估代码4.定义目标函数5.运行程序6.可视化7.超参数的重要性8.查看相关信息9.可视化的一个完整示例10.lightgbm实验 optuna使用 1.导入相关包 import torch import torch.nn as nn import torch.nn.functi…...

Android 设置铃声和闹钟

Android设置铃声和闹钟使用的方法是一样的&#xff0c;但是要区别的去获取对应的权限。 统一权限&#xff0c;不管是设置闹钟还是铃声&#xff0c;他们都需要一个系统设置权限如下: //高版本需要WRITE_SETTINGS权限//此权限是敏感权限&#xff0c;无法动态申请&#xff0c;需要…...

自动化测试模型(一)

8.8.1 自动化测试模型概述 在自动化测试运用于测试工作的过程中&#xff0c;测试人员根据不同自动化测试工具、测试框架等所进行的测试活动进行了抽象&#xff0c;总结出线性测试、模块化驱动测试、数据驱动测试和关键字驱动测试这4种自动化测试模型。 线性测试 首先&#…...

解决nuxt3下载慢下载报错问题

在下载nuxt3时总是下不下来&#xff0c;最后还报错了。即使改成国内镜像源也不行。 解决方法&#xff1a; 直接去github上下载 https://github.com/nuxt/starter/tree/v3 解压后得到如下目录&#xff1a; 手动修改项目名和文件夹名 安装依赖 npm install可能会比较慢或下不…...

Ubuntu修改swap大小

查看swap位置和大小&#xff1a; swapon -s 方案一&#xff1a;修改原有文件大小方式 第一步&#xff1a;进入系统根目录cd /; 第二步&#xff1a;执行&#xff1a;sudo dd if/dev/zero of/swap bs1M count16384 //每段块1M 共16384块&#xff0c;即16G 第三步&#xff1a;执行…...

[C#] 复数乘法的跨平台SIMD硬件加速向量算法(不仅支持X86的Sse、Avx、Avx512,还支持Arm的AdvSimd)

文章目录 一、简单算法二、向量算法2.1 算法思路2.1.1 复数乘法的数学定义2.1.2 复数的数据布局2.1.3 第1步&#xff1a;计算 (a*c) (-b*d)i2.1.4 第2步&#xff1a;计算 (a*d) (b*c)i2.1.5 第3步&#xff1a;计算结果合并 2.2 算法实现&#xff08;UseVectors&#xff09;2.…...

C#WPF基础介绍/第一个WPF程序

什么是WPF WPF&#xff08;Windows Presentation Foundation&#xff09;是微软公司推出的一种用于创建窗口应用程序的界面框架。它是.NET Framework的一部分&#xff0c;提供了一套先进的用户界面设计工具和功能&#xff0c;可以实现丰富的图形、动画和多媒体效果。 WPF 使用…...

强大的接口测试可视化工具:Postman Flows

Postman Flows是一种接口测试可视化工具&#xff0c;可以使用流的形式在Postman工作台将请求接口、数据处理和创建实际流程整合到一起。如下图所示 Postman Flows是以API为中心的可视化应用程序开发界面。它提供了一个无限的画布用于编排和串连API&#xff0c;数据可视化来显示…...

系统设计及解决方案

发送验证码 1&#xff1a;根据手机号从Redis中获取value(验证码_时间戳) 2&#xff1a;如果value不为空&#xff0c;并且时间戳与当前时间戳的间隔小于60秒&#xff0c;则返回一个错误信息 3&#xff1a;生成随机验证码 4&#xff1a;调用阿里云短信服务API给用户发送短信验证码…...

从0入门自主空中机器人-2-2【无人机硬件选型-PX4篇】

1. 常用资料以及官方网站 无人机飞控PX4用户使用手册&#xff08;无人机基本设置、地面站使用教程、软硬件搭建等&#xff09;&#xff1a;https://docs.px4.io/main/en/ PX4固件开源地址&#xff1a;https://github.com/PX4/PX4-Autopilot 飞控硬件、数传模块、GPS、分电板等…...

Linux之ARM(MX6U)裸机篇----2.汇编LED驱动实验

一&#xff0c;alpha的LED灯硬件原理分析 STM32 IO初始化流程 ①&#xff0c;使能GPIO时钟 ②&#xff0c;设置IO复用&#xff0c;复用为GPIO ③&#xff0c;配置GPIO的电气属性推挽&#xff0c;上拉下拉 ④&#xff0c;使用GPIO&#xff0c;输出高/低电平 MX6ULL IO初始化…...

e3 1220lv3 cpu-z分数

e3 1220lv3 双核四线程&#xff0c;1.1G频率&#xff0c;最低可在800MHZ运行&#xff0c;TDP 13W。 使用PE启动后测试cpu-z分数。 现在e3 1220lv3的价格落到69元。...

HTML5适配手机

要使 HTML5 网站适配手机设备&#xff0c;您可以遵循以下几个步骤和最佳实践&#xff1a; 1. 使用视口&#xff08;Viewport&#xff09; 在 HTML 文档的 <head> 部分添加视口元标签&#xff0c;以确保页面在移动设备上正确缩放和显示&#xff1a; <meta name"…...

C# 中使用 MassTransit

在生产环境中使用 MassTransit 时&#xff0c;通常需要进行详细的配置&#xff0c;包括设置连接字符串、配置队列、配置消费者、处理重试和错误队列等。以下是一个完整的示例&#xff0c;展示了如何在 ASP.NET Core 应用程序中配置 MassTransit&#xff0c;包括请求/响应模式和…...

网络编程 实现联网 b+Tree

网络编程是客户端和服务器之间通信的基础&#xff0c;也是现代应用开发中不可或缺的技能。在 Unity 中实现网络功能&#xff0c;需要结合计算机网络原理、数据结构与算法&#xff0c;以及网络协议的实际应用。以下是对这一块内容的详细介绍&#xff0c;包括每个涉及到的知识点&…...

VBA进度条ProgressForm1

上一章《VBA如何使用ProgressBar进度条控件》介绍了ProgressBar控件的使用方法&#xff0c;今天我给大家介绍ProgressForm1进度条的使用方法&#xff0c;ProgressForm1是集成ProgressBar控件和Label控件的窗体&#xff0c;可以同时显示进度条和百分比&#xff0c;如下图&#x…...

Cloudflare 免费域名邮箱 支持 Catch-all 无限别名收件

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 与自建 Poste.io 还有 Serv00 邮局不同,Cloudflare 的域名邮箱并不需要 VPS,也没有复杂的配置。只要有一个托管在 Cloudflare 的域名就可以部署,像是常见的免费域名 eu.org 或者 dpdns.org 都是可以使用的。 需要…...

Ref vs. Reactive:Vue 3 响应式变量的最佳选择指南

Ref vs. Reactive&#xff1a;Vue 3 响应式变量的最佳选择指南 在 Vue 3 的 Composition API 中&#xff0c;ref 和 reactive 是创建响应式数据的两种主要方式。许多开发者经常困惑于何时使用哪种方式。本文将深入对比两者的差异&#xff0c;帮助您做出最佳选择。 核心概念解…...

预览pdf(url格式和blob格式)

<template><div class"pdf-container"><div v-if"loading" class"loading-state"><a-spin size"large" /></div><div v-else-if"error" class"loading-state">加载失败&…...

Maven的配置与运行

maven配置国内镜像 <!-- # %MAVEN_HOME%\conf\settings.xml # 找到 <mirrors> 标签&#xff0c;添加&#xff1a; --> <mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>htt…...

Python爬虫实战:研究Hyper 相关技术

一、项目概述 本项目展示了如何结合 Python 的异步编程技术与 Hyper 框架开发一个高性能、可扩展的网络爬虫系统。该系统不仅能够高效地爬取网页内容,还提供了 RESTful API 接口,方便用户通过 API 控制爬虫的运行状态和获取爬取结果。 二、系统架构设计 1. 整体架构 系统采…...

windows命令行面板升级Git版本

Date: 2025-06-05 11:41:56 author: lijianzhan Git 是一个 ‌分布式版本控制系统‌ (DVCS)&#xff0c;由 Linux 之父 Linus Torvalds 于 2005 年开发&#xff0c;用于管理 Linux 内核开发。它彻底改变了代码协作和版本管理的方式&#xff0c;现已成为软件开发的事实标准工具&…...

服务器健康摩尔斯电码:深度解读S0-S5状态指示灯

当服务器机柜中闪烁起神秘的琥珀色灯光&#xff0c;运维人员的神经瞬间绷紧——这些看似简单的Sx指示灯&#xff0c;实则是服务器用硬件语言发出的求救信号。掌握这套"摩尔斯电码"&#xff0c;等于拥有了预判故障的透视眼。 一、状态指示灯&#xff1a;服务器的生命体…...

Vue:Ajax

AJAX 允许我们在不刷新页面的情况下与服务器交互&#xff0c;实现&#xff1a;动态加载数据&#xff0c;提交表单信息&#xff0c;实时更新内容&#xff0c;与后端 API 通信。通常使用专门的 HTTP 客户端库来处理 AJAX 请求。 npm install axiosimport axios from axios;expor…...

《Progressive Transformers for End-to-End Sign Language Production》复现报告

摘要 本文复现了《Progressive Transformers for End-to-End Sign Language Production》一文中的核心模型结构。该论文提出了一种端到端的手语生成方法&#xff0c;能够将自然语言文本映射为连续的 3D 骨架序列&#xff0c;并引入 Counter Decoding 实现动态序列长度控制。我…...