Java复习总结三

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. 包装类

包装类与基本数据类型的对应关系

包装类基础数据类型包装类基础数据类型
BooleanbooleanIntegerint
CharactercharLonglong
BytebyteFloatfloat
ShortshortDoubledouble

包装类的作用如下:

(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、区别对比

StringBufferStringBuilder
执行速度效率不如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 类(生成伪随机数)。开发中应根据具体场景选择合适的类和异常处理方式,以提高程序的健壮性和性能。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值