一、Scanner 类
Scanner 类位于 java.util 包下,用于从控制台或其他输入流中读取用户输入的数据,是 Java 中常用的输入工具类。
import java.util.Scanner;
public class MethodScanner {
public static void main(String[] args) {
// 1. 创建 Scanner 对象,关联标准输入流(控制台)
Scanner scanner = new Scanner(System.in);
// 2. 读取不同类型的数据
int intScanner = scanner.nextInt(); // 读取下一个整数(以空白符分隔)
double doubleScanner = scanner.nextDouble(); // 读取下一个双精度浮点数
String stringScanner1 = scanner.next(); // 读取下一个单词(以空白符/空格分隔,不包含空格)
String stringScanner2 = scanner.nextLine(); // 读取一整行句子(包含空格,直到换行符结束)
// 3. 实现循环输入(直到输入 quit 退出,忽略大小写)
while (scanner.hasNext()) { // 判断是否还有后续输入数据
String name = scanner.next();
if (name.equalsIgnoreCase("quit")) { // 忽略大小写比较
break; // 退出循环
}
}
// 4. 关闭 Scanner,释放相关资源(避免资源泄露)
scanner.close();
}
}
二、Random 类
Random 类位于 java.util 包下,用于生成伪随机数,支持生成不同范围、不同类型的随机数据,核心分为「无种子」和「有种子」两种创建方式。
核心说明
- 无种子构造:
new Random(),以当前系统时间戳作为随机数种子,每次运行生成的随机数序列不同。 - 有种子构造:
new Random(种子值),种子固定时,每次运行生成的随机数序列完全相同(可复现)。
import java.util.Random;
public class MethodRandom {
public static void main(String[] args) {
// 1. 创建 Random 对象
Random random = new Random(); // 不加参数,以系统时间戳为种子(每次运行结果不同)
Random seedRandom = new Random(123); // 以 123 为固定种子(每次运行结果相同)
// 2. 生成不同范围的整数
int intRandom1 = random.nextInt(); // 生成 int 类型全范围的整数(-2^31 ~ 2^31-1)
int intRandom2 = random.nextInt(100); // 生成 [0, 100) 范围的整数(左闭右开)
int intRandom3 = random.nextInt(1, 100); // 生成 [1, 100) 范围的指定整数(Java 11+ 支持)
System.out.println(intRandom1 + " " + intRandom2 + " " + intRandom3);
}
}
三、LocalDateTime 类
LocalDateTime 类位于 java.time 包下(Java 8+ 新增),用于表示「日期+时间」(不含时区),是替代传统 Date、Calendar 类的推荐方案,API 更简洁、线程安全。
补充说明
- 同包下的
LocalDate仅表示「日期」,LocalTime仅表示「时间」,使用方式与LocalDateTime类似。 DateTimeFormatter用于日期与字符串之间的格式转换,线程安全,可复用。
import java.time.LocalDateTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;
public class MethodDate {
public static void main(String[] args) {
// 1. 生成当前日期时间(系统当前时间)
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
System.out.println("============================================================");
// 2. 生成指定日期时间(年、月、日、时、分、秒)
LocalDateTime dateTime1 = LocalDateTime.of(2024, 1, 2, 3, 4, 5);
System.out.println(dateTime1);
System.out.println("============================================================");
// 3. 按默认格式(yyyy-MM-dd'T'HH:mm:ss)将字符串转为 LocalDateTime
LocalDateTime parse = LocalDateTime.parse("2024-01-01T08:01:01"); // 固定格式,不可修改
System.out.println(parse);
System.out.println("============================================================");
// 4. 获取日期时间的各个组成部分(年、月、日、时、分、秒)
int year = dateTime1.getYear();
Month month = dateTime1.getMonth();
int day = dateTime1.getDayOfMonth();
int hour = dateTime1.getHour();
int minute = dateTime1.getMinute();
int second = dateTime1.getSecond();
System.out.println(year + " " + month.getValue() + " " + day + " " + hour + " " + minute + " " + second);
System.out.println("============================================================");
// 5. 按自定义格式进行字符串与 LocalDateTime 的转换
String stringDate = "2021-01-01 08:01:01";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 创建自定义格式转换器
LocalDateTime dateTime2 = LocalDateTime.parse(stringDate, dateTimeFormatter); // 字符串 -> LocalDateTime
System.out.println(dateTime2);
System.out.println("============================================================");
// 6. 获取日期相关的附加信息(本周/本月/本年的第几天)
System.out.println(dateTime1); // 原始指定日期
System.out.println(dateTime1.getDayOfWeek().getValue()); // 本周第几天(1=周一,7=周日)
System.out.println(dateTime1.getDayOfMonth()); // 本月第几天
System.out.println(dateTime1.getDayOfYear()); // 本年第几天
System.out.println("============================================================");
// 7. 日期时间的增减操作(返回新对象,原对象不变,不可变特性)
// 增减天
LocalDateTime dateTime3 = dateTime1.plusDays(1); // 加一天
System.out.println(dateTime3);
LocalDateTime dateTime4 = dateTime1.minusDays(1); // 减一天
System.out.println(dateTime4);
System.out.println("============================================================");
// 增减周
LocalDateTime dateTime5 = dateTime1.plusWeeks(1); // 加一周
System.out.println(dateTime5);
LocalDateTime dateTime6 = dateTime1.minusWeeks(1); // 减一周
System.out.println(dateTime6);
System.out.println("============================================================");
// 增减月
LocalDateTime dateTime7 = dateTime1.plusMonths(1); // 加一个月
System.out.println(dateTime7);
LocalDateTime dateTime8 = dateTime1.minusMonths(1); // 减一个月
System.out.println(dateTime8);
System.out.println("============================================================");
// 增减年
LocalDateTime dateTime9 = dateTime1.plusYears(1); // 加一年
System.out.println(dateTime9);
LocalDateTime dateTime10 = dateTime1.minusYears(1); // 减一年
System.out.println(dateTime10);
System.out.println("============================================================");
}
}
四、BigDecimal 类
BigDecimal 类位于 java.math 包下,用于解决 float、double 类型浮点运算时的精度丢失问题,适用于金融、财务等需要高精度计算的场景。
核心说明
- 初始化推荐:优先使用
String类型参数构造(new BigDecimal("6.66")),避免使用double类型参数(仍会存在精度问题)。 - 运算特性:加减乘除运算后会返回新的
BigDecimal对象,原对象保持不变(不可变特性)。 - 除法注意:除法可能出现除不尽的情况,必须指定精度和舍入模式,否则会抛出异常。
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
public class AboutBigDecimal {
public static void main(String[] args) {
// 1. 初始化 BigDecimal 对象(推荐使用 String 类型参数,保证精度)
BigDecimal num1 = new BigDecimal("6.66");
BigDecimal num2 = new BigDecimal("3.34");
// 2. 执行加减乘运算(返回新对象,原对象不变)
BigDecimal add = num1.add(num2); // 加法
BigDecimal sub = num1.subtract(num2); // 减法
BigDecimal mul = num1.multiply(num2); // 乘法
System.out.println(add + " " + sub + " " + mul);
// 3. 执行除法运算(需处理除不尽的情况,指定精度和舍入模式)
// 方式1:指定保留小数位数(3位)和舍入模式(四舍五入 HALF_UP)
BigDecimal div1 = num1.divide(num2, 3, RoundingMode.HALF_UP);
System.out.println(div1);
// 方式2:通过 MathContext 指定精度(4位有效数字),使用默认舍入模式
BigDecimal div2 = num1.divide(num2, new MathContext(4));
System.out.println(div2);
}
}