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 中实现网络功能,需要结合计算机网络原理、数据结构与算法,以及网络协议的实际应用。以下是对这一块内容的详细介绍,包括每个涉及到的知识点&…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
