Java常用工具类详解

目录

[一、Java 中的数学利器:java.lang.Math 类详解](#一、Java 中的数学利器:java.lang.Math 类详解)

1.常用属性

2.常用方法

[⑴.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 类:随机数生成的利器)

1.常用构造方法

Random()

2.常用方法

[⑴.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 类)

1.常用属性

[⑴.static final PrintStream err](#⑴.static final PrintStream err)

[⑵.static final InputStream in](#⑵.static final InputStream in)

[⑶.static final PrintStream out](#⑶.static final PrintStream out)

2.常用方法

[⑴.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:通用唯一标识符)

1.什么是UUID?

UUID核心特性

[Java 中 UUID 的应用场景](#Java 中 UUID 的应用场景)

2.Java中的UUID实现


一、Java 中的数学利器:java.lang.Math 类详解

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

1.常用属性

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

PIMath 类中一个静态常量,表示圆周率 ,其值约为 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 类型的数据,也有对应的重载方法可以处理 longfloatdouble 类型的数据。

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 方法用于返回两个数中的最小值。同样,也有对应的重载方法可以处理 longfloatdouble 类型的数据。

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 类型取值范围内的随机整数,其范围是 -21474836482147483647

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 对象。常见的环境变量有 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
相关推荐
软件开发技术局26 分钟前
撕碎QT面具(8):对控件采用自动增加函数(转到槽)的方式,发现函数不能被调用的解决方案
开发语言·qt
周杰伦fans2 小时前
C#中修饰符
开发语言·c#
yngsqq2 小时前
c# —— StringBuilder 类
java·开发语言
赔罪2 小时前
Python 高级特性-切片
开发语言·python
星星点点洲2 小时前
【操作幂等和数据一致性】保障业务在MySQL和COS对象存储的一致
java·mysql
xiaolingting3 小时前
JVM层面的JAVA类和实例(Klass-OOP)
java·jvm·oop·klass·instanceklass·class对象
风口上的猪20153 小时前
thingboard告警信息格式美化
java·服务器·前端
子豪-中国机器人3 小时前
2月17日c语言框架
c语言·开发语言
夏天的阳光吖3 小时前
C++蓝桥杯基础篇(四)
开发语言·c++·蓝桥杯
追光少年33224 小时前
迭代器模式
java·迭代器模式