目录
[一、Java 中的数学利器:java.lang.Math 类详解](#一、Java 中的数学利器:java.lang.Math 类详解)
[⑴.static int abs(int a)](#⑴.static int abs(int a))
[⑵.static double ceil(double a)](#⑵.static double ceil(double a))
[⑶.static double floor(double a)](#⑶.static double floor(double a))
[⑷.static int max(int a, int b) 和 static int min(int a, int b)](#⑷.static int max(int a, int b) 和 static int min(int a, int b))
[⑸.static double random()](#⑸.static double random())
[⑹.static long round(double a)](#⑹.static long round(double a))
[⑺.static double sqrt(double a)](#⑺.static double sqrt(double a))
[⑻.static double pow(double a, double b)](#⑻.static double pow(double a, double b))
[二、Java 中 java.util.Random 类:随机数生成的利器](#二、Java 中 java.util.Random 类:随机数生成的利器)
[⑴.int nextInt()](#⑴.int nextInt())
[⑵.int nextInt(int bound)](#⑵.int nextInt(int bound))
[⑶.double nextDouble()](#⑶.double nextDouble())
[3.练一练:生成 5 个不重复的随机数](#3.练一练:生成 5 个不重复的随机数)
[三、深入探索 Java 中的 java.lang.System 类](#三、深入探索 Java 中的 java.lang.System 类)
[⑴.static final PrintStream err](#⑴.static final PrintStream err)
[⑵.static final InputStream in](#⑵.static final InputStream in)
[⑶.static final PrintStream out](#⑶.static final PrintStream out)
[⑴.static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)](#⑴.static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length))
[⑵.static void exit(int status)](#⑵.static void exit(int status))
[⑶.static void gc()](#⑶.static void gc())
[⑷.static long currentTimeMillis()](#⑷.static long currentTimeMillis())
[⑸.static long nanoTime()](#⑸.static long nanoTime())
[⑷.static Map getenv()](#⑷.static Map getenv())
[⑸.static Properties getProperties()](#⑸.static Properties getProperties())
[⑹.static String getProperty(String key)](#⑹.static String getProperty(String key))
[四、深入了解 Java 中的 UUID:通用唯一标识符](#四、深入了解 Java 中的 UUID:通用唯一标识符)
[Java 中 UUID 的应用场景](#Java 中 UUID 的应用场景)
一、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
类型的数据,也有对应的重载方法可以处理 long
、float
和 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
方法用于返回两个数中的最小值。同样,也有对应的重载方法可以处理 long
、float
和 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 中 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 中的 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
对象。常见的环境变量有 Path
、JAVA_HOME
、CLASSPATH
等。
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