java点错误_Java中最常见的错误盘点

Java中最常见的错误盘点

你可以决定在诸如文件处理器中使用finalize方法来释放资源,但是这种用法是很糟糕的。由于它是在垃圾回收期间被调用的,而 GC 的时间并不确定,因此finalize被调用的时间将无法保证。

5、使用原始类型而不是参数化的

根据 Java 文档描述:原始类型要么是非参数化的,要么是类 R 的(同时也是非继承 R 父类或者父接口的)非静态成员。在 Java 泛型被引入之前,并没有原始类型的替代类型。Java 从1.5版本开始支持泛型编程,毫无疑问这是一个重要的功能提升。然而,由于向后兼容的原因,这里存在一个陷阱可能会破坏整个类型系统。着眼下例:

List listOfNumbers = new ArrayList();

listOfNumbers.add(10);

listOfNumbers.add("Twenty");

listOfNumbers.forEach(n -> System.out.println((int) n * 2));

这是一个由数字组成的列表被定义为原始的 ArrayList。由于它并没有指定类型参数,因此可以给它添加任何对象。但是最后一行将其包含的元素映射为 int 类型并乘以 2,打印出翻倍之后的数据到标准输出。

此代码编译时不会出错,但是一旦运行就会抛出运行时错误,因为这里试图将字符类型映射为整形。很显然,如果隐藏了必要信息,类型系统将不能帮助写出安全代码。

为了解决这个问题,需要为存入集合中的对象指定具体类型:

ListlistOfNumbers = new ArrayList<>();

listOfNumbers.add(10);

listOfNumbers.add("Twenty");

listOfNumbers.forEach(n -> System.out.println((int) n * 2));

与之前代码的唯一差别即是定义集合的那一行:

ListlistOfNumbers = new ArrayList<>();

修改之后的代码编译不可能被通过,因为这里试图向只期望存储整形的集合中添加字符串。编译器将会显示错误信息,并指向试图向列表中添加Twenty字符的那一行。参数化泛型类型是个不错的主意。这样的话,编译器就能够检查所有可能的类型,从而由于类型不一致而导致的运行时异常几率将大大降低。

【Java中最常见的错误盘点】相关文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值