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. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public StringBuffer() | 构造 | 创建一个空的StringBuffer对象 |
2 | public StringBuffer(String str) | 构造 | 将接受到的String内容变为StringBuffer内容 |
3 | public StringBuffer append(数据类型 变量) | 普通 | 内容连接,等价于String中:”+”操作 |
4 | public StringBuffer insert(int offset,数据类型 变量) | 普通 | 在指定索引位置处插入数据 |
5 | public StringBuffer delete(int start,int end) | 普通 | 删除指定索引范围之内的数据 |
6 | public 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. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public char charAt(int index) | 普通 | 获取指定索引字符 |
2 | public int length() | 普通 | 获取字符串长度 |
3 | public 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. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public static Runtime getRuntime() | 普通 | 获取Rintime类的实例化对象 |
2 | public int avaliableProcessors() | 普通 | 获取可用的CPU处理器数量 |
3 | public long maxMemory() | 普通 | 取得最大可用内存量 |
4 | public long totalMemory() | 普通 | 取得总共可用内存量 |
5 | public long freeMemory() | 普通 | 取得空闲内存量 |
6 | public 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. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public static void arraycopy(Object src,int srcPos,Object destPos,int length) | 普通 | 数组复制操作 |
2 | public static long currentTimeMillis() | 普通 | 取得当前的日期时间,以long型数据返回 |
3 | public 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. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public BigInterger(String val) | 构造 | 将一个字符串变成BigInterger类型数据 |
2 | public BigInterger add(BigInterger val) | 普通 | 加法计算 |
3 | public BigInterger substract(BigInterger val) | 普通 | 减法计算 |
4 | public BigInterger multiply(BigInterger val) | 普通 | 乘法计算 |
5 | public BigInterger divideBigInterger val) | 普通 | 除法计算 |
6 | public BigInterger max(BigInterger val) | 普通 | 返回两个大数字中的最大值 |
7 | public BigInterger min(BigInterger val) | 普通 | 返回两个大数字的最小值 |
8 | public BigInteger[] divideAndRemainder(BigInterger val) | 普通 | 除法操作,数组的第一个元素为除法的商,第二个元素为除法的余数 |
BigDecimal
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public BigDecimal(double val) | 构造 | 将double表示形式转换为BigDecimal |
2 | public BigDecimal(int val) | 构造 | 将int表示形式转换为BigDecimal |
3 | public BigDecimal(String val) | 构造 | 将字符串表示形式转换为BigDecimal |
4 | public BigDecimal add(BigDecimal augend) | 普通 | 加法计算 |
5 | public BigDecimal subtract(BigDecimal subtrahend) | 普通 | 减法计算 |
6 | public BigDecimal multiply(BigDecimal multiplicand) | 普通 | 乘法计算 |
7 | public BigDecimal divide(BigDecimal divisor) | 普通 | 除法计算 |
8 | public BigDecimal divide(BigDecimal divisor,int scale,RoundingMode roundingMode) | 普通 | 除法计算设置保留下小数位与进位模式 |
Date日期处理类
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public Date() | 构造 | 实例化Date对象 |
2 | public Date(long date) | 构造 | 将数字变为Date类对象,long为日期时间数据 |
3 | public 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. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public static void sort(数据类型[] 变量) | 普通 | 数组排序 |
2 | public static int binarySearch(数据类型[] 变量,数据类型 key) | 普通 | 利用二分查找算法进行数据查询 |
3 | public static int compare(数据类型[] 变量,数据类型[] 变量) | 普通 | 比较两个数组的大小,返回3类结果:大于(1)、小于(-1)、等于(0) |
4 | public static boolean equals(数据类型[] 变量,数据类型[] 变量) | 普通 | 数组相等判断 |
5 | public static void fill(数据类型[] 变量,数据类型 变量) | 普通 | 数组填充 |
6 | public 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 最新版本链接:Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接: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设置铃声和闹钟使用的方法是一样的,但是要区别的去获取对应的权限。 统一权限,不管是设置闹钟还是铃声,他们都需要一个系统设置权限如下: //高版本需要WRITE_SETTINGS权限//此权限是敏感权限,无法动态申请,需要…...

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

解决nuxt3下载慢下载报错问题
在下载nuxt3时总是下不下来,最后还报错了。即使改成国内镜像源也不行。 解决方法: 直接去github上下载 https://github.com/nuxt/starter/tree/v3 解压后得到如下目录: 手动修改项目名和文件夹名 安装依赖 npm install可能会比较慢或下不…...
Ubuntu修改swap大小
查看swap位置和大小: swapon -s 方案一:修改原有文件大小方式 第一步:进入系统根目录cd /; 第二步:执行:sudo dd if/dev/zero of/swap bs1M count16384 //每段块1M 共16384块,即16G 第三步:执行…...

[C#] 复数乘法的跨平台SIMD硬件加速向量算法(不仅支持X86的Sse、Avx、Avx512,还支持Arm的AdvSimd)
文章目录 一、简单算法二、向量算法2.1 算法思路2.1.1 复数乘法的数学定义2.1.2 复数的数据布局2.1.3 第1步:计算 (a*c) (-b*d)i2.1.4 第2步:计算 (a*d) (b*c)i2.1.5 第3步:计算结果合并 2.2 算法实现(UseVectors)2.…...

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

强大的接口测试可视化工具:Postman Flows
Postman Flows是一种接口测试可视化工具,可以使用流的形式在Postman工作台将请求接口、数据处理和创建实际流程整合到一起。如下图所示 Postman Flows是以API为中心的可视化应用程序开发界面。它提供了一个无限的画布用于编排和串连API,数据可视化来显示…...
系统设计及解决方案
发送验证码 1:根据手机号从Redis中获取value(验证码_时间戳) 2:如果value不为空,并且时间戳与当前时间戳的间隔小于60秒,则返回一个错误信息 3:生成随机验证码 4:调用阿里云短信服务API给用户发送短信验证码…...

从0入门自主空中机器人-2-2【无人机硬件选型-PX4篇】
1. 常用资料以及官方网站 无人机飞控PX4用户使用手册(无人机基本设置、地面站使用教程、软硬件搭建等):https://docs.px4.io/main/en/ PX4固件开源地址:https://github.com/PX4/PX4-Autopilot 飞控硬件、数传模块、GPS、分电板等…...

Linux之ARM(MX6U)裸机篇----2.汇编LED驱动实验
一,alpha的LED灯硬件原理分析 STM32 IO初始化流程 ①,使能GPIO时钟 ②,设置IO复用,复用为GPIO ③,配置GPIO的电气属性推挽,上拉下拉 ④,使用GPIO,输出高/低电平 MX6ULL IO初始化…...

e3 1220lv3 cpu-z分数
e3 1220lv3 双核四线程,1.1G频率,最低可在800MHZ运行,TDP 13W。 使用PE启动后测试cpu-z分数。 现在e3 1220lv3的价格落到69元。...
HTML5适配手机
要使 HTML5 网站适配手机设备,您可以遵循以下几个步骤和最佳实践: 1. 使用视口(Viewport) 在 HTML 文档的 <head> 部分添加视口元标签,以确保页面在移动设备上正确缩放和显示: <meta name"…...

C# 中使用 MassTransit
在生产环境中使用 MassTransit 时,通常需要进行详细的配置,包括设置连接字符串、配置队列、配置消费者、处理重试和错误队列等。以下是一个完整的示例,展示了如何在 ASP.NET Core 应用程序中配置 MassTransit,包括请求/响应模式和…...
网络编程 实现联网 b+Tree
网络编程是客户端和服务器之间通信的基础,也是现代应用开发中不可或缺的技能。在 Unity 中实现网络功能,需要结合计算机网络原理、数据结构与算法,以及网络协议的实际应用。以下是对这一块内容的详细介绍,包括每个涉及到的知识点&…...

VBA进度条ProgressForm1
上一章《VBA如何使用ProgressBar进度条控件》介绍了ProgressBar控件的使用方法,今天我给大家介绍ProgressForm1进度条的使用方法,ProgressForm1是集成ProgressBar控件和Label控件的窗体,可以同时显示进度条和百分比,如下图&#x…...
Cloudflare 免费域名邮箱 支持 Catch-all 无限别名收件
本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 与自建 Poste.io 还有 Serv00 邮局不同,Cloudflare 的域名邮箱并不需要 VPS,也没有复杂的配置。只要有一个托管在 Cloudflare 的域名就可以部署,像是常见的免费域名 eu.org 或者 dpdns.org 都是可以使用的。 需要…...
Ref vs. Reactive:Vue 3 响应式变量的最佳选择指南
Ref vs. Reactive:Vue 3 响应式变量的最佳选择指南 在 Vue 3 的 Composition API 中,ref 和 reactive 是创建响应式数据的两种主要方式。许多开发者经常困惑于何时使用哪种方式。本文将深入对比两者的差异,帮助您做出最佳选择。 核心概念解…...
预览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> 标签,添加: --> <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),由 Linux 之父 Linus Torvalds 于 2005 年开发,用于管理 Linux 内核开发。它彻底改变了代码协作和版本管理的方式,现已成为软件开发的事实标准工具&…...
服务器健康摩尔斯电码:深度解读S0-S5状态指示灯
当服务器机柜中闪烁起神秘的琥珀色灯光,运维人员的神经瞬间绷紧——这些看似简单的Sx指示灯,实则是服务器用硬件语言发出的求救信号。掌握这套"摩尔斯电码",等于拥有了预判故障的透视眼。 一、状态指示灯:服务器的生命体…...
Vue:Ajax
AJAX 允许我们在不刷新页面的情况下与服务器交互,实现:动态加载数据,提交表单信息,实时更新内容,与后端 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》一文中的核心模型结构。该论文提出了一种端到端的手语生成方法,能够将自然语言文本映射为连续的 3D 骨架序列,并引入 Counter Decoding 实现动态序列长度控制。我…...