Java枚举类、异常、常用类

枚举类

枚举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);
相关推荐
xiaohe071 小时前
Spring Boot 各种事务操作实战(自动回滚、手动回滚、部分回滚)
java·数据库·spring boot
代码飞天2 小时前
wireshark的高级使用
android·java·wireshark
add45a2 小时前
C++编译期数据结构
开发语言·c++·算法
gechunlian882 小时前
Spring Boot中的404错误:原因、影响及处理策略
java·spring boot·后端
岁岁种桃花儿2 小时前
AI超级智能开发系列从入门到上天第四篇:AI应用方案设计
java·服务器·开发语言
Amnesia0_02 小时前
C++中的IO流
开发语言·c++
2401_891482172 小时前
C++模块化编程指南
开发语言·c++·算法
暮冬-  Gentle°2 小时前
自定义类型转换机制
开发语言·c++·算法
2301_816651222 小时前
嵌入式C++低功耗设计
开发语言·c++·算法