Java复习总结三
java复习一:Java复习总结一
java复习二:Java复习总结二
202402150378 许景程
一、异常
1. 异常概述
Java是采用面向对象的方式处理异常的。当程序出现问题时,就会创建异常类对象并抛出相关的信息(如异常出现的位置、原因等),从而能够更迅速地定位到问题原因。
1.2 异常产生的原因
在Java中异常产生,主要是有三种原因:
(1)编写程序代码中的错误产生的异常,比如数组越界、空指针异常等,这种异常叫做未检查的异常,一般需要在类中处理这些异常
(2)Java内部错误发生的异常,Java虚拟机产生异常
(3)通过throw(抛出异常)语句手动生成的异常,这种异常叫做检查的异常,一般是用来给方法调用者一些必要的信息
1.3 异常体系

(1)Throwable:是异常体系的顶层类,其派生出两个重要的子类, Error 和 Exception
而 Error 和 Exception 两子类分别表示错误和异常。
区别就是不检查异常(Unchecked Exception)和检查异常(Checked Exception)。
(2)Exception 类用于用户程序可能出现的异常情况,它也是用来创建自定义异常类型类的类。
(3)Error 定义了在通常环境下不希望被程序捕获的异常。Error 类型的异常用于 Java 运行时由系统显示与运行时系统本身有关的错误。堆栈溢出是这种错误的一例。
1.4 Exception
Exception是所有异常的父类,其本身是编译时异常,而它的一个子类RuntimeException则是运行时异常。
RuntimeException和它的所有子类都是运行时异常,比如NullPointerException、ArrayIndexOutOfBoundsException等,这些异常在程序编译时不能被检查出,往往是由逻辑错误引起的,因此在编写程序时,应该从逻辑的角度尽可能避免这种异常情况。
2. 异常处理
2.1 抛出异常
Java中提供了一个throw关键字,该关键字用于抛出异常。Java中的异常本质上也是类,抛出异常时,实际上是抛出一个异常的对象,并提供异常文本给调用者,最后结束该方法的运行。
抛出异常语法如下:
throw new 异常名称(参数列表);
2.2 声明异常
程序仅仅抛出异常,而不对异常进行处理,是没有任何意义的,但处理异常之前,需要知道调用的方法可能会抛出哪些异常,从而有针对性地处理。因此,需要将异常声明到方法上,让调用者知道这个方法可能会抛出什么异常。
声明异常使用throws关键字,语法格式如下:
修饰符 返回值类型 方法名(参数列表) throws 异常名1,异常名2,… {}
2.3 捕捉异常
如果程序出现了异常,自己又解决不了,就需要将异常声明出来,交给调用者处理。在上面已经将异常进行了声明,此时调用者如果已经知道被调用方法可能出现哪些异常,就可以针对这些异常进行不同的处理。
处理异常使用 try…catch…finally 结构,try用于包裹住可能出现异常的代码块,在catch中进行异常捕获,并处理异常,finally则是在抛出异常或者异常处理后执行。当异常不进行处理时,发生异常的方法就会立即结束运行,而如果使用try…catch来处理,程序就会继续运行下去。
二、Java常用类
1. 包装类
包装类与基本数据类型的对应关系
| 包装类 | 基础数据类型 | 包装类 | 基础数据类型 |
|---|---|---|---|
| Boolean | boolean | Integer | int |
| Character | char | Long | long |
| Byte | byte | Float | float |
| Short | short | Double | double |
包装类的作用如下:
(1)让基本数据类型可以像对象一样进行操作,提供了更多方便的方法。
(2)提供了 null 值,让基本数据类型可以表示“未填写”的状态。
1.1 基础数据类型与包装类
Integer中提供了大量让字符串-包装类-基本类型之间进行转换的方法,如下表所示:

1. 2 大数字运算
1.BigInteger
BigInteger是Java中表示大整型的类,它可以用来计算远大于long类型的数值。注意,BigInteger参与算术运算时,并不是用传统的加、减、乘、除符号,而是调用它的方法。
BigInteger类中的常见方法如下表所示。
| 方法签名 | 方法描述 |
|---|---|
| BigInteger add(BigInteger num) | 加法运算 |
| BigInteger subtract(BigInteger num) | 减法运算 |
| BigInteger multiply(BigInteger num) | 乘法运算 |
| BigInteger devide(BigInteger num) | 除法运算 |
| BigInteger[ ] devideAndRemainder(BigInteger num) | 求余运算 |
| int intValue() | 将BigInteger 转换成 int 类型 |
2.BigDecimal
BigDecimal在使用时与BigInteger类似,它是用于表示大浮点数的类。BigDecimal常用于解决浮点数运算过程中的痛点,比如下面的代码在运行时结果可能会出乎意料。
System.out.println(0.1+0.2);
程序运行后,计算结果却不是0.3,因此在开发中不要使用double和float类型,以及它们对应的包装类型进行算术运算。为了解决这个痛点,Java提供了BigDecimal类。
BigDecimal保留小数位使用的是setScale()方法,指定保留小数位个数以及保留方式,保留方式都是以BigDecima中静态常量的方式定义的,如下表所示。
| 保留方式 | 描述 |
|---|---|
| ROUND_CEILING | 向正无穷方向舍入,即向上取整 |
| ROUND_DOWN | 向0方向舍入,对于正数向下取整,对于负数向上取整 |
| ROUND_FLOOR | 向负无穷方向舍入,即向下取整 |
| ROUND_HALF_DOWN | 对商进行四舍五入操作,如果商最后一位小于等于5,则做舍弃操作;若最后一位大于5,则做进位操作,如7.5≈7 |
| ROUND_HALF_EVEN | 如果商的倒数第二位为奇数,则按照ROUND_HALF_UP处理;如果商的倒数第二位为偶数,则按照ROUND_HALF_DOWN处理;如7.5≈8, 8.5≈8 |
| ROUND_HALF_UP | 对商进行四舍五入操作,如果商最后一位小于5,则做舍弃操作;若最后一位大于等于5,则做进位操作,如7.5≈8 |
| ROUND_UP | 向远离0方向舍入,对于正数向上取整,对于负数向下取整 |
2. String类
1、String的构造方法
Java为了方便起见,在使用字符串时也可以像基本数据类型一样直接对其进行赋值,但依然需要了解String的构造方法,如下表所示。
| 方法签名 | 方法描述 |
|---|---|
| String() | 创建一个空字符串 |
| String(String s) | 创建一个字符串对象,该字符串的内容与s相同 |
| String(char [ ] value) | 创建一个字符串对象,使用字符数组作为该字符串的内容 |
| String(byte[ ] bytes) | 创建一个字符串对象, 使用默认编码将字节数组转换成字符串 |
2、String类查找方法
| 方法签名 | 方法描述 |
|---|---|
| int length() | 获取字符串长度 |
| char charAt(int i) | 获取字符串指定索引位置的字符 |
| int indexnOf(int ch) | 查找指定字符在字符串中的索引位置 |
| boolean startsWith(String s) | 判断字符串是否以指定字符串开头 |
| boolean endsWith(String s) | 判断字符串是否以指定字符串结尾 |
| boolean contains(String s) | 判断字符串是否包含指定字符串 |
3、String类转换方法
| 方法签名 | 方法描述 |
|---|---|
| String[ ] split(String regex) | 将一个字符串按照某些字符分隔成字符串数组 |
| char[ ] toCharArray() | 将字符串转换成字符数组 |
| byte[ ] getBytes() | 将字符串按照默认编码转换成字节数组 |
| String trim() | 去除字符串前后的所有空格 |
| String toUpperCase() | 字符串中所有小写字母转换成大写 |
| String toLowerCase() | 字符串中所有大写字母转换成小写 |
| String substring(int index) | 从index 开始截取字符串,直到字符串末尾结束 |
| String substring(int beginIndex,int endIndex) | 从beginIndex 开始截取字符串,从索引endIndex-1结束 |
| String replace(String target,String value) | 价格字符串中的target替换成value |
4、String类转换方法
| 方法签名 | 方法描述 |
|---|---|
| boolean isEmpty() | 判断一个字符串是否为空字符串 |
| boolean equals(String s) | 判断两个字符串内容是否相同 |
| boolean equalsIgnoreCase(String s) | 判断两个字符内容是否相同,忽略大小写 |
| int compareTo(String s) | 按照字典顺序比较两个字符串的前后顺序 |
3. StringBuffer类与StringBuilder类
1、StringBuffer类
StringBuffer并没有像String一样提供了简单的赋值方式,必须创建它的构造方法才可以。StringBuffer类中的主要方法如下表所示。
| 方法签名 | 方法描述 |
|---|---|
| StringBuffer() | 创建一个没有字符的StringBuffer对象 |
| StringBuffer(String s) | 创建一个字符串为s的StringBuffer对象 |
| StringBuffer append(Type t) | 将指定内容添加到字符串末尾 |
| StringBuffer delete(int start,int end) | 删除从start开始到end-1结束的字符串 |
| int indexOf(String s) | 获取指定字符串在该StringBuffer 中第一次出现的索引位置 |
| StringBuffer relpace(int start,int value,String value) | 将 start 到 end-1 位置的字符串替换成value |
| StringBuffer reverse() | 反转当前字符串 |
| void setLength(int length) | 设置字符串长度,超出长度的内容会被舍弃 |
2、StringBuilder类
StringBuffer类和StringBuilder类非常类似,都是继承自抽象类AbstractStringBuilder类,均代表可变的Unicode字符序列。StringBuilder类和StringBuffer类方法一模一样。
不过StringBuilder不是线程安全的,这是与StringBuffer的主要区别:
- StringBuffer做线程同步检查,因此线程安全,效率较低。
- StringBuilder不做线程同步检查,因此线程不安全,效率较高。
因此在开发中如果不涉及字符串的改变,建议使用String,如果涉及并发问题,建议使用StringBuffer,如果不涉及并发问题,建议使用StringBuilder。
3、区别对比
| StringBuffer | StringBuilder | |
|---|---|---|
| 执行速度 | 效率不如StringBuilder,但远比String要高 | 快 |
| 线程安全 | 线程安全 | 线程不安全 |
4. 时间和日期相关类
1、时间戳
以1970 年1月1日 00:00:00为基准时间,定义为0刻度,时间向前为负值,向后为正值,每一个刻度为1毫秒,称为时间戳。因为时间戳可能会非常长,因此Java中使用long类型来记录时间戳,用long类型的变量来表示时间,从基准时间往前几亿年,往后几亿年都能表示。
获取当前时间的“时刻数值”的方式非常简单,可以使用:
long now=System.currentTimeMillis();
2、Date类
Date类主要方法如下表所示。

3、SimpleDateFormat类
SimpleDateFormat类是Java中的时间格式化类,通过该类可以将时间转换成用户想要的格式。
SimpleDateFormat对象在创建时需要指定时间格式,时间的格式通过一些特定的字符表示,当格式化时间遇到这些格式字符时,就会转换成对应的时间。
时间格式字符如下表所示。

4、Calendar类
Date类一般用于表示时间,如果想计算时间,虽然通过时间戳也可以实现,但比较麻烦。Calendar是Java中的日历类,提供了日期时间的计算方式,通过Calendar类,可以准确地对年、月、日、时、分、秒进行计算。
Calendar类中的主要方法如下表所示。

Calendar中定义了很多静态常量,用这些静态常量可定义时间字段,如下表所示。

5. 其他常用类
1、Math类
Math类是Java中与数学相关的类,提供了大量数学计算相关的方法,如开平方、三角函数、随机数等。Math类中的常用方法如下表所示。

2、Random类
Random类比Math类的random()方法提供了更多的方式来生成各种伪随机数,可以生成浮点类型的伪随机数,也可以生成整数类型的伪随机数,还可以指定生成随机数的范围。当创建一个Random类之后,就可以使用它的方法获取随机数了。
Random类中的主要方法如下表所示。

总结
本文主要介绍了 Java 中的异常处理和常用类。在异常方面,阐述了异常产生原因、体系,包括 Throwable 及其子类 Error 和 Exception,还介绍了 Exception 与 RuntimeException 的区别,以及抛出异常(throw)、声明异常(throws)和捕捉异常(try…catch…finally)的方法。对于常用类,涵盖了包装类(如 Integer、BigInteger、BigDecimal 等),其可让基本数据类型像对象操作并提供更多方法;String 类及其构造、查找、转换方法;StringBuffer 和 StringBuilder 类,前者线程安全但效率低,后者反之;时间和日期相关类,如时间戳、Date、SimpleDateFormat 和 Calendar 类;还有 Math 类(提供数学计算方法)和 Random 类(生成伪随机数)。开发中应根据具体场景选择合适的类和异常处理方式,以提高程序的健壮性和性能。
1626

被折叠的 条评论
为什么被折叠?



