枚举类
枚举enum属于一种特殊的类,只包含一组有限特定对象
枚举是一组常量的集合
(1)自定义类实现枚举
构造器私有化,本类创建一组固定对象,对外暴露对象,仅提供get方法;
java
class Season{
private String name;
private String desc;
//1.构造器私有化,防止直接new;
//2.去掉set方法防止属性被修改;
//3.在类内直接创建static+final固定的对象;
public static final Season SPRING = new Season("春天", "温暖");
public static final Season SUMMER = new Season("夏天", "炎热");
public static final Season AUTUMN = new Season("秋天", "凉爽");
public static final Season WINTER = new Season("冬天", "寒冷");
private Season(String name, String desc){
this.name = name;
this.desc = desc;
}
public String getDesc() { //只读
return desc;
}
public String getName() {
return name;
}
public String toString() {
return "Season{" + "name='" + name + '\'' +
", desc='" + desc + '\'' + '}';
}
//main中
System.out.println(Season.AUTUMN);
(2)enum关键字实现枚举
使用enum关键字替代class,使用多个常量名(实参)逗号间隔
定义枚举常量对象写在最前面
java
enum Season2{
SPRING("春天", "温暖"), SUMMER("夏天", "炎热"),
AUTUMN("秋天", "凉爽"), WINTER("冬天", "寒冷");
private String name;
private String desc;
private Season(String name, String desc){
this.name = name;
this.desc = desc;
}
public String getDesc() { //只读
return desc;
}
public String getName() {
return name;
}
public String toString() {
return "Season{" + "name='" + name + '\'' +
", desc='" + desc + '\'' + '}';
}
//main中
System.out.println(Season2.AUTUMN);
Season2.name();
默认继承Enum类,可以使用其方法:枚举对象名字name/枚举对象编号0开始orainal/返回数组所有枚举对象values/匹配枚举对象valueOf/比较枚举常量compareTo
如果是无参构造器,写常量对象WHAT(); 或者WHAT;
enum枚举类不能再继承其他类 enum A extends B 错误
enum枚举类可以实现接口 enum A implements C 正确
异常
空指针访问,网络连接中断等,分为运行时异常和编译时异常;
异常处理机制try-catch/throws解决程序抛出的异常,程序会继续执行;
选中部分代码,按ctrl + alt + t 选择try-catch;
java
//异常发生时系统将异常封装成对象e传递给catch
try{ //自动生成
int res = num1 / num2; //选中的代码(除0异常)
}catch(Exception e){ //输出异常信息
System.out.println("出现异常的原因" + e.getMessage());
}finally{
//异常是否发生都执行finally,可以没有finally
}
//throws(向上抛/try-catch处理)二选一,没处理默认throws
//最顶层JVM的异常处理-输出异常信息并退出程序
public void f2() throws Exception{} //可以是异常列表

异常体系图
Throwable类(继承自Object类实现Serializable接口)分为Error和Exception

编译时异常必须处理,运行时异常可以不做处理;
五大运行时异常
(1)空指针异常NullPointerException
(2)数学运算异常ArithmeticException
(3)数组下标越界异常ArrayIndexOutOfBoundsException
(4)类型转换异常ClassCastException
(5)数字格式不正确异常NumberFormatException
编译异常
操作数据库SQLException、操作文件IOException、不存在文件FileNotFound、类不存在、参数异常;
try-catch可以分别捕获不同异常分别处理,要求子类异常要写在前面
java
try{
Person p = new Person();
p = null;
System.out.println(p.getName());
int n1 = 10;
int n2 = 0;
int res = n1 / n2;
}catch (NullPointerException e){
System.out.println("空指针异常" + e.getMessage());
}catch (ArithmeticException e){
System.out.println("算术异常" + e.getMessage());
}
出现异常try块剩下语句不再执行,将执行catch语句,如有finally必须执行
子类重写父类方法时,抛出throws异常类型是相同的/子类型
可以自定义异常继承RuntimeException或Exception
throw new RuntimeException("制造异常");

常用类
包装类-针对八种基本数据类型相应的引用类型(黄色部分父类是Number)
引用类型都继承Object,都是类都是对象存的是地址

java
//装箱(基本类型->包装类型)和拆箱(包装类型->基本类型)
//jdk5之后自动装箱和拆箱
int n = 200;
Integer i = n; //底层使用Integer.valueOf(n);
int n2 = i; //底层使用integer.intValue(i);
包装类型与String相互转换
java
//包装类->String
Integer i = 100;
String str1 = i + ""; //方法1,i的数据类型不变
String str2 = i.toString(); //方法2
String str3 = String.valueOf(i); //方法3
//String->包装类
String s = "123";
Integer i1 = Integer.parseInt(s);
Integer i2 = new Integer(s);
String类
String类是Object类的子类,String对象保存字符串,一个字符占两个字节
String类是final类,有属性private final char value[]; 用于存放字符串内容
value的地址不可修改,单个字符内容可以变化;
java
//创建String对象的两种方式
String s = "hsp"; //直接是常量池地址
String s2 = new String("hsp"); //指向堆,先搜索常量池
//测试题
System.out.println(s.equals(s2)); //T 比较的是字符串内容
System.out.println(s == s2); //F 比较地址
System.out.println(s == s2.intern()); //T intern方法返回常量池地址

String的常用方法

toUpperCase、toLowerCase、concat、replace、split、toCharArray、conpareTo、format等方法
StringBuffer类
String的增强,是可变长度的,直接父类是AbstractStringBuffer有属性char[] value 不是final,用于存放字符串内容(堆中)
StringBuffer对象可以串行化,StringBuffer是final类不能被继承
java
StringBuffer s = new StringBuffer("hello"); //有多种构造器
//可以与String相互转换
String str = "hi";
StringBuffer str1 = new StringBuffer(str);
String str2 = str1.toString(); //转成String
//StringBuffer方法
s.append("user");
s.reverse(); //原地字符串反转
与String关键区别是 里面的字符可以改,不用每次更新地址效率较高
StringBuilder类
String的增强,是可变长度的,推荐单线程使用,是final类不能被继承,StringBuilder对象可以串行化;
与StringBuffer的方法相同;
| 类 | 核心定性 | 线程安全 | 性能与场景 |
|---|---|---|---|
| String | 不可变。每次拼接或修改,底层都会直接创建一个全新的对象,老对象变成垃圾。 | 安全 (因为不可变) | 最慢。只用于少量字符串声明或作为 Map 的 Key。 |
| StringBuffer | 可变字符序列。在原对象底层的数组上直接修改。所有方法加了 synchronized 锁。 | 安全 | 较慢。多线程下的字符串修改(大数据实战基本不用)。 |
| StringBuilder | 可变字符序列。在原对象上修改,没有任何锁的包袱。 | 不安全 | 最快 。单线程海量数据的拼接(大数据清洗 ETL 唯一标配)。 |
Math类
静态方法直接调用,abs、pow、ceil、floor、round、sqrt等
java
int a = Math.abs(-9);
for (int i = 0; i < 10; i++) {
System.out.println(Math.random()); //返回[0,1)随机小数
}
Arrays类
数组操作工具,静态方法直接调用
java
int[] nums = {1, 2, 3};
System.out.println(Arrays.toString(nums)); //打印数组的字符串格式
Arrays.sort(nums); //排序-自然排序和定制排序
List<Integer> a = Arrays.alist(2, 3, 4, 5, 6, 1);
System.out.println(a); //一组值转成List集合
System类
java
System.exit(0); //退出当前程序
System.arraycopy(); //复制数组元素
System.currentTimeMillis(); //返回距今时间毫秒数
System.gc(); //运行垃圾回收机制
BigInteger类保存特别大的整数,使用对应方法可以加减乘除;
BigDecimal类保存精度很高的数,使用对应方法可以加减乘除;
日期类
第一代Date、二代Calendar和SimpleDateFormat、三代time.* 包
java
LocalDate today = LocalDate.now(); //获取当前时间 年月日
LocalDateTime now = LocalDateTime.now(); //获取当前时间 包含时分秒
DateTimeFormatter d = DateTimeFormatter.ofPattern("yyyyMMdd");
String s = today.format(d); //把时间对象格式化
//字符串按格式还原时间对象
String logTimeStr = "2026-02-20 12:26:45";
DateTimeFormatter d1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime logTimeObj = LocalDateTime.parse(logTimeStr, d1);