其他常用类
Math类
Math 类位于 java.lang 包中,提供数学运算的静态方法
Math 类是 Java 中的一个工具类,提供了许多用于数学运算的静态方法。它包含常见的数学函数,如三角函数、指数函数、对数函数、取整函数、随机数生成等。Math 类的方法都是静态的,因此可以直接通过类名调用,无需创建 Math 类的实例
Math类的特点
- 工具类:Math 类是一个工具类,所有方法都是静态的
- 不可实例化:Math 类的构造方法是私有的,因此不能创建 Math 类的实例
- 常量:Math 类提供了两个常用的数学常量
- Math.PI:圆周率 π,约等于 3.141592653589793。
- Math.E:自然对数的底数 e,约等于 2.718281828459045
Math类常用方法
-
abs():返回绝对值
-
max():返回两个值中的最大值
-
min():返回两个值中的最小值
-
ceil():向上取整
-
floor():向下取整
-
round():四舍五入
-
pow():返回第一个参数的第二个参数次方
double pow = Math.pow(2, 3); // 8.0 (2^3) -
sqrt():返回平方根
double sqrt = Math.sqrt(16); // 4.0 -
exp():返回自然对数的底数 e 的指定次方
double exp = Math.exp(1); // 2.718281828459045 (e^1) -
log():返回自然对数(以 e 为底)
double log = Math.log(Math.E); // 1.0 (ln(e)) -
log10():返回以 10 为底的对数
double log10 = Math.log10(100); // 2.0 (log10(100))
Math中的随机数生成
-
Math 类提供了一个简单的随机数生成方法 random(),用于生成 [0.0, 1.0) 范围内的伪随机浮点数。除此之外,Java 还提供了更强大的随机数生成工具类 java.util.Random 和 java.util.concurrent.ThreadLocalRandom
-
Math.random() 方法,返回一个 [0.0, 1.0) 范围内的伪随机浮点数,返回值是一个 double 类型的值,范围包括 0.0,但不包括 1.0
-
通过 Math.random() 可以生成指定范围的随机数。
-
生成 [0, 100) 范围内的随机整数
int randomInt = (int) (Math.random() * 100); -
生成 [10, 20) 范围内的随机浮点数
double randomDouble = 10 + Math.random() * 10;
-
Arrays类
Arrays 类位于 java.util 包中,提供数组操作的静态方法
Arrays 类是 Java 中的一个工具类,提供了许多用于操作数组的静态方法。它包含数组的排序、搜索、填充、复制、比较等功能。Arrays 类的方法都是静态的,因此可以直接通过类名调用,无需创建 Arrays 类的实例
Arrays类的特点
-
工具类:Arrays 类是一个工具类,所有方法都是静态的。
-
不可实例化:Arrays 类的构造方法是私有的,因此不能创建 Arrays 类的实例。
-
支持多种数据类型:Arrays 类的方法支持多种数据类型的数组,包括基本类型(如 int[]、double[])和对象类型(如 String[])
Arrays类常用方法
-
sort():对数组进行排序
-
Arrays.sort 方法会对传入的数组进行原地排序,即直接修改原数组的内容
- 对于基本类型数组,使用 双轴快速排序(Dual-Pivot Quicksort),这是对经典快速排序的优化
- 对于对象类型数组,使用 归并排序(Merge Sort) 或 TimSort(一种优化的归并排序)
int[] numbers = {5, 3, 9, 1}; Arrays.sort(numbers); // numbers = {1, 3, 5, 9} //部分排序 int[] numbers = {5, 3, 9, 1, 7}; Arrays.sort(numbers, 1, 4); // 对索引 1 到 3 的元素排序,numbers = {5, 1, 3, 9, 7}-
sort(Object[] a):对对象数组进行自然排序(要求数组元素实现 Comparable 接口)
-
sort(T[] a, Comparator<? super T> c):使用自定义的比较器对对象数组进行排序
// 定义一个字符串数组 String[] names = {"Alice", "Bob", "Charlie", "David", "Eva"}; // 使用 Comparator 定义排序规则:按字符串长度升序排序 Arrays.sort(names, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.length() - s2.length(); // 按长度升序 } });
-
binarySearch():在已排序的数组中使用二分查找算法搜索指定元素
- 如果找到元素,返回其索引
- 如果未找到元素,返回一个负值(表示插入点)
int[] numbers = {1, 3, 5, 9}; int index = Arrays.binarySearch(numbers, 5); // index = 2 int index2 = Arrays.binarySearch(numbers, 7); // index2 = -4 (插入点为 3) //返回值 = -(插入点索引 + 1) -
fill():将数组的所有元素填充为指定值
int[] numbers = new int[5]; Arrays.fill(numbers, 10); // numbers = {10, 10, 10, 10, 10} //部分填充 int[] numbers = new int[5]; Arrays.fill(numbers, 1, 4, 10); // 填充索引 1 到 3 的元素,numbers = {0, 10, 10, 10, 0} -
copyOf():复制数组的指定长度
int[] numbers = {1, 2, 3, 4, 5}; int[] copy = Arrays.copyOf(numbers, 3); // copy = {1, 2, 3} //复制数组的指定范围 int[] numbers = {1, 2, 3, 4, 5}; int[] copy = Arrays.copyOfRange(numbers, 1, 4); // copy = {2, 3, 4} -
toString():将数组转换为字符串表示
-
stream():将数组转换为流(Java 8 引入)
asList()方法
-
Arrays.asList():将数组转换为一个固定大小的列表
-
返回的列表是固定大小的,不能添加或删除元素。
-
支持修改元素(如 set() 方法)。
-
-
Arrays.asList 返回的列表是一个 ArrayList,但这个 ArrayList 是 Arrays 类的一个内部类,而不是 java.util.ArrayList。它的底层实现是基于原数组的视图
- 固定大小。
- 支持修改元素。
- 不支持添加或删除元素
System类
System 类是 Java 中的一个核心类,提供了与系统相关的功能和方法。它是一个工具类,所有方法都是静态的,因此可以直接通过类名调用,无需创建 System 类的实例
常用字段
-
System.in
-
类型:InputStream
-
作用:表示标准输入流,通常用于从控制台读取输入
Scanner scanner = new Scanner(System.in); System.out.print("Enter your name: "); String name = scanner.nextLine(); System.out.println("Hello, " + name);
-
-
System.out
-
类型:PrintStream
-
作用:表示标准输出流,通常用于向控制台输出信息
System.out.println("Hello, World!");
-
-
System.err
-
类型:PrintStream
-
作用:表示标准错误输出流,通常用于输出错误信息
System.err.println("An error occurred!");
-
常用方法
-
currentTimeMillis():返回当前时间的毫秒数(从 1970 年 1 月 1 日 00:00:00 UTC 开始)
long currentTime = System.currentTimeMillis(); System.out.println("Current Time: " + currentTime); -
exit(int status):终止当前运行的 Java 虚拟机
- status:退出状态码。0 表示正常退出,非 0 表示异常退出
System.exit(0); // 正常退出 -
arraycopy(Object src, int srcPos, Object dest, int destPos, int length):复制数组的一部分到另一个数组
int[] src = {1, 2, 3, 4, 5}; int[] dest = new int[5]; System.arraycopy(src, 0, dest, 0, src.length); System.out.println(Arrays.toString(dest)); // 输出: [1, 2, 3, 4, 5]
大数类
BigInteger 类
BigInteger 类用于表示任意精度的整数。它可以处理超出 long 类型范围的大整数
特点
- 任意精度:可以表示任意大小的整数
- 不可变性:BigInteger 对象是不可变的,所有操作都会返回一个新的 BigInteger 对象
- 丰富的运算方法:支持加、减、乘、除、取模、幂运算等
创建 BigInteger 对象
-
通过字符串创建
-
通过字节数组创建
-
使用静态方法
BigInteger bigInt = new BigInteger("123456789012345678901234567890"); byte[] bytes = {0x12, 0x34, 0x56}; BigInteger bigInt = new BigInteger(bytes); BigInteger bigInt = BigInteger.valueOf(1234567890L);
运算
在对BigInteger进行加减乘除需要使用对应的方法
- 加法:add(BigInteger val)
- 减法:subtract(BigInteger val)
- 乘法:multiply(BigInteger val)
- 除法:divide(BigInteger val)
- 取模:mod(BigInteger val)
- 幂运算:pow(int exponent)
- 比较:compareTo(BigInteger val)
BigDecimal类
BigDecimal 类用于表示任意精度的浮点数。它可以处理高精度的十进制运算,适用于金融计算等场景
特点
-
任意精度:可以表示任意大小和精度的浮点数。
-
不可变性:BigDecimal 对象是不可变的,所有操作都会返回一个新的 BigDecimal 对象。
-
精确计算:避免了浮点数运算中的精度丢失问题
创建对象
-
通过字符串创建
BigDecimal bigDec = new BigDecimal("123.456789012345678901234567890"); -
通过 double 值创建
-
BigDecimal.valueOf(double val) 方法内部通过 Double.toString(val) 将 double 转换为字符串,再基于字符串构造 BigDecimal 对象。这一过程能保留 double 值的完整十进制表示
-
避免直接使用 double 构造函数导致的精度问题
BigDecimal bigDec = BigDecimal.valueOf(123.456);//精确的 BigDecimal d = new BigDecimal(0.1); System.out.println(d); // 输出:0.100000000000000005551115123125...
常用方法
-
加法:add(BigDecimal val)
-
减法:subtract(BigDecimal val)
-
乘法:multiply(BigDecimal val)
-
除法:divide(BigDecimal val, int scale, RoundingMode roundingMode)
BigDecimal quotient = bigDec1.divide(bigDec2, 2, RoundingMode.HALF_UP); //scale指定计算结果 保留的小数位数 //roundingMode定义 舍入规则 -
取模:remainder(BigDecimal val)
-
比较:compareTo(BigDecimal val)
日期类
-
Java 提供了多种日期和时间相关的类,主要包括 java.util.Date、java.util.Calendar、java.text.SimpleDateFormat 以及 Java 8 引入的 java.time 包中的类(如 LocalDate、LocalTime、LocalDateTime 等)
-
java.util.Date 类是第一代日期类,Date 类是 Java 中最早的日期类,用于表示特定的瞬间,精确到毫秒
-
java.util.Calendar 类,Calendar 类是一个抽象类,用于替代 Date 类中的过时方法,提供了对日期和时间的更灵活的操作
-
java.text.SimpleDateFormat 类,SimpleDateFormat 类用于格式化和解析日期和时间
java.time 包(Java 8 引入)
Java 8 引入了新的日期和时间 API,位于 java.time 包中。这些类是不可变的,线程安全,且设计更加合理。
常用类
-
LocalDate:表示日期(年、月、日)。
-
LocalTime:表示时间(时、分、秒、纳秒)。
-
LocalDateTime:表示日期和时间。
常用方法
-
LocalDate.now():获取当前日期
LocalDate today = LocalDate.now(); System.out.println("Today: " + today); -
LocalTime.now():获取当前时间
LocalTime now = LocalTime.now(); System.out.println("Now: " + now); -
LocalDateTime.now():获取当前日期和时间
LocalDateTime now = LocalDateTime.now(); System.out.println("Now: " + now); -
DateTimeFormatter 用于将日期和时间格式化为字符串,或将字符串解析为日期和时间对象
-
ofPattern(String pattern):创建一个自定义格式的 DateTimeFormatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); -
format(TemporalAccessor temporal):将日期或时间格式化为字符串。
String formattedDateTime = formatter.format(now) // 例如: 2023-10-25 14:30:45 -
parse(CharSequence text):将字符串解析为日期或时间对象
LocalDateTime parsedDateTime = LocalDateTime.parse("2023-10-25 14:30:45", formatter);
-

浙公网安备 33010602011771号