Java常用工具类详解

news/2025/2/22 16:21:27/

目录

java.lang.Math%C2%A0%E7%B1%BB%E8%AF%A6%E8%A7%A3-toc" name="tableOfContents" style="margin-left:0px">一、Java 中的数学利器:java.lang.Math 类详解

1.常用属性

2.常用方法

⑴.static int abs(int a)

⑵.static double ceil(double a)

⑶.static double floor(double a)

⑷.static int max(int a, int b) 和 static int min(int a, int b)

⑸.static double random()

⑹.static long round(double a)

⑺.static double sqrt(double a)

运行结果:

⑻.static double pow(double a, double b)

java.util.Random%C2%A0%E7%B1%BB%EF%BC%9A%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%94%9F%E6%88%90%E7%9A%84%E5%88%A9%E5%99%A8-toc" name="tableOfContents" style="margin-left:0px">二、Java 中 java.util.Random 类:随机数生成的利器

1.常用构造方法

Random()

2.常用方法

⑴.int nextInt()

⑵.int nextInt(int bound)

⑶.double nextDouble()

3.练一练:生成 5 个不重复的随机数

java.lang.System%C2%A0%E7%B1%BB-toc" name="tableOfContents" style="margin-left:0px">三、深入探索 Java 中的 java.lang.System 类

1.常用属性

⑴.static final PrintStream err

⑵.static final InputStream in

⑶.static final PrintStream out

2.常用方法

⑴.static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

⑵.static void exit(int status)

⑶.static void gc()

⑷.static long currentTimeMillis()

⑸.static long nanoTime()

⑷.static Map getenv()

⑸.static Properties getProperties()

⑹.static String getProperty(String key)

四、深入了解 Java 中的 UUID:通用唯一标识符

1.什么是UUID?

UUID核心特性

Java 中 UUID 的应用场景

2.Java中的UUID实现


java.lang.Math%C2%A0%E7%B1%BB%E8%AF%A6%E8%A7%A3" style="background-color:transparent">一、Java 中的数学利器:java.lang.Math 类详解

在 Java 编程中,处理数学运算时,java.lang.Math 类是一个非常实用的工具。它提供了一系列静态方法和常量,方便我们进行各种常见的数学计算,无需创建对象即可直接使用,大大提高了代码的简洁性和效率。

1.常用属性

  • static final double PI:圆周率常量(3.141592653589793)

PI 是 Math 类中一个静态常量,表示圆周率 ,其值约为 3.141592653589793。在进行与圆相关的计算时,这个常量非常有用。

public class MathPIExample {public static void main(String[] args) {double radius = 5.0;// 计算圆的面积double area = Math.PI * Math.pow(radius, 2);System.out.println("半径为 " + radius + " 的圆的面积是: " + area);}
}

2.常用方法

⑴.static int abs(int a)

abs 方法用于返回一个数的绝对值。它可以处理 int 类型的数据,也有对应的重载方法可以处理 longfloat 和 double 类型的数据。

public class MathAbsExample {public static void main(String[] args) {int num = -10;int absNum = Math.abs(num);System.out.println(num + " 的绝对值是: " + absNum);}
}

运行结果:

⑵.static double ceil(double a)

ceil 方法用于对一个 double 类型的数进行向上取整,返回大于或等于该数的最小整数。

public class MathCeilExample {public static void main(String[] args) {double num = 3.2;double ceilNum = Math.ceil(num);System.out.println(num + " 向上取整的结果是: " + ceilNum);}
}

运行结果:

⑶.static double floor(double a)

floor 方法用于对一个 double 类型的数进行向下取整,返回小于或等于该数的最大整数。

public class MathFloorExample {public static void main(String[] args) {double num = 3.8;double floorNum = Math.floor(num);System.out.println(num + " 向下取整的结果是: " + floorNum);}
}

运行结果:

⑷.static int max(int a, int b) 和 static int min(int a, int b)

max 方法用于返回两个数中的最大值,min 方法用于返回两个数中的最小值。同样,也有对应的重载方法可以处理 longfloat 和 double 类型的数据。

public class MathMaxMinExample {public static void main(String[] args) {int num1 = 10;int num2 = 20;int maxNum = Math.max(num1, num2);int minNum = Math.min(num1, num2);System.out.println(num1 + " 和 " + num2 + " 中的最大值是: " + maxNum);System.out.println(num1 + " 和 " + num2 + " 中的最小值是: " + minNum);}
}

运行结果:

⑸.static double random()

random 方法用于生成一个大于等于 0.0 且小于 1.0 的随机 double 类型的数。通过一些简单的运算,我们可以生成指定范围的随机数。

public class MathRandomExample {public static void main(String[] args) {// 生成 [0-100) 的随机整数int num = (int) (Math.random() * 100);System.out.println("生成的 [0-100) 的随机整数是: " + num);}
}

运行结果:

⑹.static long round(double a)

round 方法用于对一个 double 类型的数进行四舍五入,返回最接近该数的 long 类型的整数。

public class MathRoundExample {public static void main(String[] args) {double num = 3.6;long roundNum = Math.round(num);System.out.println(num + " 四舍五入的结果是: " + roundNum);}
}

运行结果:

⑺.static double sqrt(double a)

sqrt 方法用于计算一个 double 类型的数的平方根。

public class MathSqrtExample {public static void main(String[] args) {double num = 16.0;double sqrtNum = Math.sqrt(num);System.out.println(num + " 的平方根是: " + sqrtNum);}
}

运行结果:

⑻.static double pow(double a, double b)

pow 方法用于计算一个数的指定次幂,其中 a 是底数,b 是指数。

public class MathPowExample {public static void main(String[] args) {double base = 2.0;double exponent = 3.0;double result = Math.pow(base, exponent);System.out.println(base + " 的 " + exponent + " 次幂是: " + result);}
}

运行结果:

java.util.Random%C2%A0%E7%B1%BB%EF%BC%9A%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%94%9F%E6%88%90%E7%9A%84%E5%88%A9%E5%99%A8" name="%E4%BA%8C%E3%80%81Java%20%E4%B8%AD%C2%A0java.util.Random%C2%A0%E7%B1%BB%EF%BC%9A%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%94%9F%E6%88%90%E7%9A%84%E5%88%A9%E5%99%A8">二、Java 中 java.util.Random 类:随机数生成的利器

在 Java 编程里,我们常常需要生成随机数来满足各种需求,比如模拟游戏中的随机事件、生成测试数据等。java.util.Random 类就是专门用来生成随机数的工具类,它提供了丰富的方法和构造函数,让我们可以轻松地生成不同类型和范围的随机数。

1.常用构造方法

Random()

这是 Random 类最常用的构造方法。当我们使用 Random() 来创建 Random 对象时,它会使用当前系统时间作为种子来初始化随机数生成器。由于系统时间是不断变化的,所以每次创建的随机数序列通常是不同的。

import java.util.Random;public class RandomConstructorExample {public static void main(String[] args) {Random random = new Random();// 后续可以使用这个 random 对象生成随机数}
}

2.常用方法

⑴.int nextInt()

nextInt() 方法会返回一个 int 类型取值范围内的随机整数,其范围是 -2147483648 到 2147483647

import java.util.Random;public class NextIntExample {public static void main(String[] args) {Random random = new Random();int randomInt = random.nextInt();System.out.println("生成的随机整数是: " + randomInt);}
}

⑵.int nextInt(int bound)

nextInt(int bound) 方法会返回一个在 [0, bound) 区间内的随机整数。也就是说,生成的随机数大于等于 0 且小于指定的 bound 值。

import java.util.Random;public class NextIntBoundExample {public static void main(String[] args) {Random random = new Random();int bound = 10;int randomInt = random.nextInt(bound);System.out.println("生成的 [0, " + bound + ") 区间内的随机整数是: " + randomInt);}
}

⑶.double nextDouble()

nextDouble() 方法会返回一个在 [0.0, 1.0) 区间内的随机 double 类型的数。

import java.util.Random;public class NextDoubleExample {public static void main(String[] args) {Random random = new Random();double randomDouble = random.nextDouble();System.out.println("生成的 [0.0, 1.0) 区间内的随机小数是: " + randomDouble);}
}

3.练一练:生成 5 个不重复的随机数

下面我们来完成一个小练习,使用 Random 类生成 5 个不重复的随机数。为了确保生成的随机数不重复,我们可以使用 ArrayList 来存储已经生成的随机数,每次生成新的随机数时,先检查该数是否已经在列表中,如果不在则添加到列表中。

import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class GenerateUniqueRandomNumbers {public static void main(String[] args) {Random random = new Random();List<Integer> uniqueNumbers = new ArrayList<>();int count = 0;int bound = 100; // 假设生成 [0, 100) 区间内的随机数while (count < 5) {int randomNumber = random.nextInt(bound);if (!uniqueNumbers.contains(randomNumber)) {uniqueNumbers.add(randomNumber);count++;}}System.out.println("生成的 5 个不重复的随机数是: " + uniqueNumbers);}
}

java.lang.System%C2%A0%E7%B1%BB" name="%E4%B8%89%E3%80%81%E6%B7%B1%E5%85%A5%E6%8E%A2%E7%B4%A2%20Java%20%E4%B8%AD%E7%9A%84%C2%A0java.lang.System%C2%A0%E7%B1%BB">三、深入探索 Java 中的 java.lang.System 类

在 Java 编程的世界里,java.lang.System 类是一个极为重要的工具类,它提供了许多与系统交互的静态方法和属性。由于 System 类的构造方法是私有的,我们无法实例化它,只能通过类名直接调用其静态成员。下面,我们将详细介绍 System 类的常用属性和方法。

1.常用属性

⑴.static final PrintStream err

err 是标准错误输出流,通常用于输出错误信息。与标准输出流不同的是,使用 System.err.println() 输出的信息在控制台中一般会以红色字体显示,这样能让开发者更直观地识别错误信息。

public class SystemErrExample {public static void main(String[] args) {System.err.println("这是一条错误信息!");System.out.println("这是一条错误信息!");}
}

运行结果:

⑵.static final InputStream in

in 是标准输入流,它允许程序从控制台读取用户输入的数据。在实际开发中,我们常常会结合 Scanner 类来使用它。

import java.util.Scanner;public class SystemInExample {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入你的名字:");String name = scanner.nextLine();System.out.println("你输入的名字是:" + name);//拆开写InputStream inputStream = System.in;Scanner s2 = new Scanner(inputStream);System.out.println(s2.next());scanner.close();}
}

⑶.static final PrintStream out

out 是标准输出流,这是我们在 Java 编程中最常用的输出方式。通过 System.out.println() 或 System.out.print() 方法,我们可以将信息输出到控制台。

import java.io.PrintStream;public class oop2 {public static void main(String[] args) {System.out.println("hello world!");PrintStream printStream = System.out;printStream.println(100);printStream.println(false);printStream.println("123");printStream.println(1.23);System.out.println("这是一条标准输出信息。");}
}

2.常用方法

⑴.static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

arraycopy 方法用于数组拷贝,它可以将一个数组中的指定部分复制到另一个数组中。其中,src 是源数组,srcPos 是源数组的起始位置,dest 是目标数组,destPos 是目标数组的起始位置,length 是要复制的元素个数。

public class SystemArraycopyExample {public static void main(String[] args) {int[] srcArray = {1, 2, 3, 4, 5};int[] destArray = new int[5];System.arraycopy(srcArray, 0, destArray, 0, 5);for (int num : destArray) {System.out.print(num + " ");}}
}

运行结果:

⑵.static void exit(int status)

exit 方法用于退出 Java 虚拟机。参数 status 为 0 表示正常退出,非 0 表示异常退出。

public class SystemExitExample {public static void main(String[] args) {System.out.println("程序即将退出...");System.exit(0);System.out.println("这行代码不会被执行。");}
}

运行结果:

⑶.static void gc()

gc 方法用于建议 Java 虚拟机启动垃圾回收器。需要注意的是,这只是一个建议,虚拟机不一定会立即执行垃圾回收操作。

public class SystemGCExample {public static void main(String[] args) {// 创建一些对象for (int i = 0; i < 1000; i++) {new Object();}// 建议启动垃圾回收器System.gc();}
}

⑷.static long currentTimeMillis()

currentTimeMillis 方法用于获取自 1970 - 01 - 01 00:00:00 000 到系统当前时间的总毫秒数。

这个方法在计算程序执行时间、定时任务等场景中非常有用

public class SystemCurrentTimeMillisExample {public static void main(String[] args) {long startTime = System.currentTimeMillis();// 模拟一些耗时操作for (int i = 0; i < 1000000; i++) {// do something}long endTime = System.currentTimeMillis();System.out.println("程序执行耗时:" + (endTime - startTime) + " 毫秒");}
}

.static long nanoTime()

nanoTime 方法用于获取自 1970 年 1 月 1 日 0 时 0 分 0 秒以来,当前时间的纳秒数。它提供了比 currentTimeMillis 更高的时间精度,常用于性能测试等对时间精度要求较高的场景。

public class SystemNanoTimeExample {public static void main(String[] args) {long startTime = System.nanoTime();// 模拟一些耗时操作for (int i = 0; i < 1000000; i++) {// do something}long endTime = System.nanoTime();System.out.println("程序执行耗时:" + (endTime - startTime) + " 纳秒");}
}

⑷.static Map<String, String> getenv()

getenv 方法用于获取当前系统的环境变量,返回一个包含环境变量名和对应值的 Map 对象。常见的环境变量有 PathJAVA_HOMECLASSPATH 等。

import java.util.Map;public class SystemGetenvExample {public static void main(String[] args) {Map<String, String> envVars = System.getenv();for (Map.Entry<String, String> entry : envVars.entrySet()) {System.out.println(entry.getKey() + " = " + entry.getValue());}}
}

⑸.static Properties getProperties()

getProperties 方法用于获取当前系统的属性,返回一个 Properties 对象。系统属性包含了许多关于 Java 虚拟机和操作系统的信息。

import java.util.Properties;public class SystemGetPropertiesExample {public static void main(String[] args) {Properties properties = System.getProperties();properties.list(System.out);}
}

⑹.static String getProperty(String key)

getProperty 方法用于通过指定的 key 获取系统属性的值。例如,我们可以通过 "os.name" 获取操作系统的名称。

public class SystemGetPropertyExample {public static void main(String[] args) {String osName = System.getProperty("os.name");System.out.println("当前操作系统的名称是:" + osName);}
}

四、深入了解 Java 中的 UUID:通用唯一标识符

1.什么是UUID?

UUID(Universally Unique Identifier) 是一种用于生成全局唯一标识符的开放标准,其核心目标是在分布式系统中生成无需中央协调的唯一ID。它通过128位二进制数实现唯一性,相当于在理论上可以产生约3.4×10^38个不同的标识符(大约是宇宙中原子数量的10亿倍)。

UUID核心特性

特性说明
全局唯一性重复概率低至可以忽略不计(每秒生成10亿个UUID,100年后重复概率约50%)
本地生成能力无需依赖数据库或中央服务器
跨平台兼容性支持所有主流编程语言和系统
标准化格式支持多种字符串表示形式

UUID 是一种软件构建的标准,其核心目的是生成具有唯一性的 ID。它具有以下显著特点:

分布式系统友好

在分布式系统中,多个节点可能同时生成标识符。UUID 能够在这种复杂的环境下,为每个节点生成唯一的标识符,避免了主键冲突等问题带来的麻烦。这使得分布式系统的开发和维护更加顺畅。

高度唯一性

UUID 使用 128 位数字来表示,其重复的概率极低。除了传统的 32 位 16 进制表示形式外,还有基于 62 进制的表示方法,这种表示更加简洁紧凑,方便在各种场景下使用。

本地生成

UUID 的生成不需要依赖任何中央控制器或数据库服务器。开发者可以在本地快速、方便地生成唯一标识符,无需与外部系统进行交互,大大提高了开发效率。

跨语言支持

UUID 生成后可以被许多编程语言支持,并且能够方便地转化为字符串表示形式。这使得它适用于多种应用场景,无论是 Web 开发、移动开发还是大数据处理,UUID 都能发挥重要作用。

Java 中 UUID 的应用场景

在 Java 开发中,UUID 的使用非常普遍,常见的应用场景包括:

数据表主键

在数据库设计中,使用 UUID 作为数据表的主键可以避免因自增主键在分布式环境下的冲突问题。每个记录都有一个唯一的 UUID,确保数据的一致性和完整性。

场景标识

在复杂的业务系统中,不同的业务场景可能需要唯一的标识。UUID 可以作为场景标识,方便系统对不同的业务流程进行管理和跟踪。

链路追踪

在分布式系统的调用链中,使用 UUID 可以唯一标识一次请求的处理过程。通过在各个服务之间传递 UUID,我们可以方便地追踪请求的执行路径,定位问题所在。

缓存 Key

在缓存系统中,使用 UUID 作为缓存 Key 可以避免 Key 冲突的问题。每个缓存项都有一个唯一的 UUID,确保缓存数据的准确性和一致性。

2.Java中的UUID实现

Java通过java.util.UUID类提供原生支持:

import java.util.UUID;public class UUIDGenerationExample {public static void main(String[] args) {UUID uuid = UUID.randomUUID();System.out.println("生成的 UUID: " + uuid);}
}

将 UUID 转换为字符串

String toString() 方法用于将 UUID 对象转换为字符串表示形式。在实际开发中,我们经常需要将 UUID 以字符串的形式存储或传输,这个方法非常实用。

import java.util.UUID;public class UUIDToStringExample {public static void main(String[] args) {UUID uuid = UUID.randomUUID();String uuidString = uuid.toString();System.out.println("UUID 的字符串表示: " + uuidString);}
}

格式解析

标准36字符格式分解:

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx

http://www.ppmy.cn/news/1573101.html

相关文章

强化学习笔记7——DDPG到TD3

前提&#xff1a;基于TD 的方法多少都会有高估问题&#xff0c;即Q值偏大。原因两个&#xff1a;一、TD目标是真实动作的高估。 二&#xff1a;自举法高估。 DDPG 属于AC方法&#xff1a;异策略&#xff0c;适合连续动作空间&#xff0c;因为他的策略网络直接输出的动作&#…

滴水逆向_新增节

1 本人亲测过了&#xff0c;在win10&#xff0c;win11 下也是可以新增的 2 手动就不演示了&#xff0c; 能够准确地写程序完成新增节并且正常运行。 3 无论是内存对齐&#xff0c;文件对齐 相等还是说不相等都是可以实现的&#xff0c;测试过了。 附上代码&#xff1a; hea…

Python 高级特性

1. 装饰器(Decorators) 用途:动态修改函数/类的行为,常用于日志、权限、缓存等场景。示例:def timer(func):def wrapper(*args, **kwargs):start = time.time()result = func(*args, **kwargs)end = time.time()print(f"{func.__name__} executed in {end - start:.2…

括 号 问题

E-lz的括号问题_牛客小白月赛105 #include <bits/stdc.h> #define int long long using namespace std; string s; vector<vector<int>>f(1000000); signed main() {ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);int n;cin>>n;cin>>s;queue…

Windows环境安装部署minimind步骤

Windows环境安装部署minimind步骤 必要的软件环境 git git&#xff0c;可下载安装版&#xff0c;本机中下载绿色版&#xff0c;解压到本地目录下&#xff08;如&#xff1a;c:\soft\git.win64&#xff09;&#xff0c;可将此路径添加到PATH环境变量中&#xff0c;供其他程序…

【线段树 二分查找】P3939 数颜色|普及+

本文涉及知识点 C线段树 C二分查找 P3939 数颜色 题目背景 大样例可在页面底部「附件」中下载。 题目描述 小 C 的兔子不是雪白的&#xff0c;而是五彩缤纷的。每只兔子都有一种颜色&#xff0c;不同的兔子可能有 相同的颜色。小 C 把她标号从 1 到 n n n 的 n n n 只兔…

利用Ollama搭建本地DeepSeek大模型

1. 下载安装ollama (1) 官网下载地址&#xff1a;https://github.com/ollama/ollama 这里以window版本为主&#xff0c;下载链接为&#xff1a;https://ollama.com/download/OllamaSetup.exe。 安装完毕后&#xff0c;桌面小图标有一个小图标&#xff0c;表示已安装成功&…

响应式布局学习笔记

什么是响应式布局&#xff1f; 响应式布局&#xff08;Responsive Web Design&#xff09;是一种网页设计方法&#xff0c;使网站能够根据设备屏幕尺寸&#xff08;如手机、平板、电脑&#xff09;自动调整内容和布局&#xff0c;提供最佳浏览体验。 如何调试响应式布局&…