跳到主要内容JavaSE 常用类详解 | 极客日志Javajava
JavaSE 常用类详解
JavaSE 常用类涵盖字符串处理、集合容器、对象基础方法、工具类及日期时间 API。String 类不可变,注意常量池与 equals 比较;ArrayList 为动态数组支持泛型;Object 提供 toString、equals 等基类方法;包装类解决基本类型与泛型兼容问题;StringBuilder 与 StringBuffer 用于可变字符串操作;Math、System、Runtime 提供系统级功能;BigDecimal 解决浮点精度;JDK8 引入 LocalDate、ZonedDateTime 等新时间 API 替代旧版 Date 和 Calendar,具备线程安全与不可变特性。
萤火微光2 浏览 常用类
01 String
java.lang.String 字符串
概述
如何创建对象并封装字符串数据:
①直接放到双引号中 String name="X";
②new String 调构造器方法
String name = new String();
String name2 = new String("X");
char[] chars = {'a', 'b'};
String name3 = new String(chars);
byte[] bytes = {99, 98};
String name4 = new String(bytes);
常用方法
public class StringDemo {
public static void main(String[] args) {
String s1 = "MyJava";
String s2 = "Java";
int n = s1.length();
s1.charAt();
[] chars = s1.toCharArray();
s1.equals(s2);
s1.equalsIgnoreCase(s2);
s1.substring(, );
s1.substring();
s1.replace(, );
s1.contains();
s1.startsWith();
String[] s = s1.split();
}
}
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- Keycode 信息
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
- Escape 与 Native 编解码
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
- JavaScript / HTML 格式化
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
- JavaScript 压缩与混淆
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
char
c
=
1
char
boolean
b1
=
boolean
b2
=
String
s3
=
2
5
String
s4
=
2
String
s5
=
"My"
"*"
boolean
b3
=
"My"
boolean
b4
=
"My"
","
①String 不可变字符串对象,内容不可以改变(每次试图改变都是产生了新的字符串对象)
②""方式创建的字符串对象存储到字符串常量池,且相同内容的字符串只存储一份(节约内存);new 方式创建的字符串对象,每 new 一次都会产生一个新的对象放在堆内存中。
字符串匹配要用 equals() 不能用==,基本数据变量的值用==
02 ArrayList
java.util.ArrayList 泛型类,是集合的一种
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("学习");
list.add("Java");
list.add(1, "My");
String s = list.get(1);
int n = list.size();
list.remove(1);
list.remove("Java");
String s2 = list.set(0, "上班");
System.out.println(list);
}
}
①使用 ArrayList 集合表示购物车存储商品名
03 Object
是 Java 中所有类的祖宗类,所有类的对象都可以直接使用 Object 中提供的方法
public String toString() 方便被子类重写,以便子类调用时可以返回子类的内容
public boolean equals(Object o) 判断两个对象是不是相等,默认判断地址是不是相等;意义是被子类重写,以便子类调用时可以比较子类的内容,快捷键可以自动重写
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
protected Object clone() 对象克隆,因为是 protected 需要在子类中重写方法,用 super 调用;需要在类中实现一个标记接口 class X implements Cloneable;
浅克隆,拷贝的数据与原对象一模一样,引用类型拷贝的只是地址;
深克隆,基本类型的数据直接拷贝,字符串拷贝地址,其他对象创建新对象。(需要手动重写创建新对象拷贝)
04 Objects
String s1 = null;
String s2 = "Java";
boolean b1 = Objects.equals(s1, s2);
boolean b2 = Objects.isNull(s1);
boolean b3 = Objects.nonNull(s2);
05 包装类
作用:把基本类型的数据包装成对象,Integer、Character 其他首字母大写
因为泛型和集合不支持基本数据类型,只能支持引用数据类型->基本数据类型用包装类
Integer a1 = Integer.valueOf(9);
Integer a2 = 8;
int a3 = a2;
ArrayList<Integer> list = new ArrayList<>();
list.add(7);
String s1 = Integer.toString(a1);
String s2 = a1.toString();
String s3 = a1 + "";
String s4 = "66";
int n1 = Integer.parseInt(s4);
int n2 = Integer.valueOf(s4);
06 StringBuilder、StringBuffer
StringBuilder可变字符串对象,相当于一个容器,更适合做字符串的操作
StringBuilder s = new StringBuilder("Java");
s.append(5);
s.append(true);
s.append(1).append("a");
s.reverse();
int l = s.length();
String s2 = s.toString();
优势:频繁的拼接修改效率高;如果操作字符串较少或者不需要操作或者定义字符串变量,仍然用 String。
StringBuffer 与 StringBuilder 用法几乎一模一样
区别:StringBuilder 是线程不安全的(一起用这个对象可能出 Bug),StringBuffer 是线程安全的
07 StringJoiner
既高效又能实现更高效的拼接,并且有些场景代码更简洁
StringJoiner s = new StringJoiner(", ", "[", "]");
s.add("Java1");
s.add("Java2");
08 Math
Math.abs(-12);
Math.ceil(4.0000001);
Math.floor(4.999999);
Math.round(3.49);
Math.max(10, 20);
Math.min(10, 20);
Math.pow(2, 3);
Math.random();
09 System
System.exit(0);
long time = System.currentTimeMillis();
10 RunTime
是一个单例类(只对外提供一个对象),代表程序所在的运行环境
Runtime r = Runtime.getRuntime();
r.exit(0);
int n1 = r.availableProcessors();
long n2 = r.totalMemory();
long n3 = r.freeMemory();
Process p = r.exec("notepad.exe");
Thread.sleep(5000);
p.destroy();
11 BigDecimal
禁止使用构造器 double,所以应该用 valueof 构造
BigDecimal a = BigDecimal.valueOf(0.1);
BigDecimal b = BigDecimal.valueOf(0.2);
a.add(b);
a.subtract(b);
a.multiply(b);
a.divide(b, 2, RoundingMode.HALF_UP);
double c = a.doubleValue();
12 日期时间
Date d = new Date();
long time = d.getTime();
time += 2 * 1000;
Date d2 = new Date(time);
Date d3 = new Date();
d3.setTime(time);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EEE a");
String s1 = sdf.format(d);
String s2 = sdf.format(time);
String s = "2026-01-13 13:28:17 星期二 下午";
Date d2 = sdf.parse(s);
Calendar:系统此刻时间对应的日历,可以单独获取修改时间中的年月日等元素
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
Date d = now.getTime();
long time = now.getTimeInMillis();
now.set(Calendar.MONTH, 9);
now.add(Calendar.DAY_OF_YEAR, -10);
优势:功能丰富使用方便;都是不可变对象,修改后会返回新的实践对象,不会丢失最开始的时间;线程安全;能精确到纳秒。
①LocalDate(本地日期);LocalTime(本地时间);LocalDateTime(本地日期时间)
获取此刻信息 now();LocalDate.of() 指定日期生成对象
增 plusX() 增加几个月等;删 minusX();改 withX() 修改后返回新的日期对象;查 getX()
equals() 判断等不等;isAfter() 判断日期是否在之前;isBefore() 判断日期是否在之后
LocalDateTime 转换成 LocalDate 或 LocalTime:toLocalDate();toLocalTime();
②ZoneID(时区);ZonedDateTime(带时区的时间)
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId.getId());
ZoneId.getAvailableZoneIds();
ZoneId zoneId1 = ZoneId.of("UTC");
ZonedDateTime now = ZonedDateTime.now(zoneId1);
ZonedDateTime now2 = ZonedDateTime.now(Clock.systemUTC());
ZonedDateTime now3 = ZonedDateTime.now();
Instant now = Instant.now();
long second = now.getEpochSecond();
int nano = now.getNano();
DateTimeFormatter(日期时间格式化器) 线程安全的
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("");
LocalDateTime now = LocalDateTime.now();
String s1 = formatter.format(now);
String s2 = now.format(formatter);
LocalDateTime time = LocalDateTime.parse(s1, formatter);
①Period(计算 LocalDate 日期间隔)
LocalDate start = LocalDate.of(2029, 8, 10);
LocalDate end = LocalDate.of(2029, 8, 15);
Period period = Period.between(start, end);
period.getMonths();
②Duration(计算 LocalTime、LocalDateTime、Instant 时间间隔)