Java异常类+通用类+容器,泛型简介

在Java中,异常处理是程序设计中非常重要的一部分,它允许程序在运行时遇到问题时能够以一种有组织、可预测的方式处理这些问题,而不是直接崩溃。Java中的异常处理主要涉及两个方面:

抛出异常和捕获异常。

抛出异常

在Java中,当某个方法遇到问题时,它可以创建一个异常对象并“抛出”它。这可以通过使用throw关键字来完成。通常,这些问题可能是无法由该方法处理的错误情况,因此它将这些情况传递给调用它的代码。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误

如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出

的异常。

例如,假设我们有一个方法,它试图从一个文件中读取数据,但文件不存在。在这种情况下,该方法可能会抛出一个FileNotFoundException异常:

 

注意,throw关键字用于在方法签名中声明该方法可能抛出的异常。调用这个方法的代码需要处理这个异常,要么通过捕获它,要么通过在其自己的方法签名中声明它也抛出这个异常。

捕获异常

当一个方法抛出一个异常时,调用它的代码必须处理这个异常。这可以通过使用try-catch语句来完成。try块包含可能抛出异常的代码,而catch块包含处理该异常的代码。

以下是一个捕获的例子:

下面的例子中声明有两个元素的一个数组,当代码试图访问数组的第四个元素的时候就会抛出一个异常。

以上代码编译运行输出结果如下:

自定义异常类

在Java中,自定义异常类允许创建在特定于你的应用程序或库的异常类型。这有助于提供更清晰、更具体的错误信息,并使得代码更易于维护和调试。要创建自定义异常类,需要继承自Exception类或其子类(如RuntimeException)。自定义异常类通常包含描述错误情况的字段和方法。

  • 所有异常都必须是 Throwable 的子类。
  • 如果希望写一个检查性异常类,则需要继承 Exception 类。
  • 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

包装类(Wrapper Classes)

在Java中主要起到两个作用:将基本数据类型封装成对象,以便能使用对象所特有的方法;在集合类框架中作为基本数据类型和对象之间的桥梁,因为集合类框架只允许对象类型的元素。

当对字符串进行修改的时候,需要使用 StringBuffer StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

输出:

在上面的StringBuilderStringBuffer示例中,我们使用了append方法来连接字符串,append 是 StringBuffer 和 StringBuilder 类中的一个方法,用于在字符串缓冲区的末尾添加指定的内容。

BigDecimal 类

BigDecimal类是Java提供的一个用于高精度计算的类,它可以用来表示、比较以及执行数学运算的、不可变的、任意精度的有符号十进制数。

输出:

在上述代码中import java.math.BigDecimal;
这行代码导入了java.math包中的BigDecimal类。

泛型简介

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参列表,普通方法的形参列表中,每个形参的数据类型是确定的,而变量是一个参数。在调用普通方法时需要传入对应形参数据类型的变量(实参),若传入的实参与形参定义的数据类型不匹配,则会报错。

那参数化类型是什么?以方法的定义为例,在方法定义时,将方法签名中的形参的数据类型也设置为参数(也可称之为类型参数),在调用该方法时再从外部传入一个具体的数据类型和变量。

泛型的本质是为了将类型参数化, 也就是说在泛型使用过程中,数据类型被设置为一个参数,在使用时再从外部传入一个数据类型;而一旦传入了具体的数据类型后,传入变量(实参)的数据类型如果不匹配,编译器就会直接报错。这种参数化类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

——泛型简介来源于:Java 中的泛型(两万字超全详解)_java 泛型-CSDN博客

泛型的主要使用场景

  1. 集合类:如ListSetMap等,使用泛型可以避免运行时类型转换异常,并提高代码的可读性。
  2. 自定义泛型类:可以创建自己的泛型类,用于封装多种数据类型的对象。
  3. 泛型方法:可以在方法中定义类型参数,使得方法能够处理多种类型的参数。

列表

输出:允许存储重复值。

Set:

输出:

Set是一个无序的集合,不允许存储重复的元素。

Map:

是一个存储键值对的集合,键是唯一的,但值可以重复。

在键值对中:

  • (Key):是唯一的标识符,用于查找或定位特定的数据项。键必须是唯一的,不能有重复。
  • (Value):是与键相关联的数据。一个键只能对应一个值,但不同的键可以对应相同的值。

这里, Map.Entry<String,Integer>是 Map 接口中的一个内部接口,它表示一个键值对。在这个例子中,键的类型是 String ,值的类型是 Integer 。entry 是循环变量,在每次迭代中,它会被赋值为 map 中的一个键值对。

在循环体中,我们访问了entry对象的键和值,并打印出来。

  • entry.getKey():返回当前键值对的键。
  • entry.getValue():返回当前键值对的值。

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值