博客
关于我
java中的一些陷阱
阅读量:532 次
发布时间:2019-03-09

本文共 1790 字,大约阅读时间需要 5 分钟。

Java编程技巧与常见问题解析

在Java编程中,开发者常会遇到各种小问题和细节,掌握正确的做法可以大大提高代码的质量和准确性。本文将分析一些常见的编程误区及解决方法。

判断数是否为奇数

检查一个数字是否为奇数时,直接使用 i % 2 != 0 更为合适。与传统的 i % 2 == 1 相比,后者存在问题,尤其在涉及负数时。例如,-1 % 2 结果是 1,因此正确的判断应避免直接比较余数等于1,并而用非零性来判断。

双精度浮点数精度问题

计算 2.0 - 1.1 时,由于双精度浮点数的精度限制,1.1 无法被精确表示为二进制小数。这可能导致微小的数值误差。虽然浮点数的代数精度受限制,但在大多数应用中,这不会造成实际问题。

长型变量与数据类型转换

对于较大的数值,使用 long 类型可以避免溢出问题。在定义变量时,明确标注 L 即可,如 long a = 24L * 60 * 60 * 1000 * 1000;。如果不这样标注,将导致编译错误,可能导致数值溢出或其他异常。

转义字符与字符类型

在字符串中使用 \" 作为转义字符,而不是双引号,可以确保代码正确执行。同时,避免单引号引起的隐含将字符转换为整数,以免导致逻辑性错误。

遍历集合与异常处理

在遍历集合时使用 Iterator 逐个元素访问,避免使用 for (Element e : collection) 这样的枚举语法可能带来的限制。例如,某些集合如 Iterator 不能被枚举,可能导致程序无法正常终止或面临异常。

变量自增问题

j = j++; 中,自增操作优先于赋值运算执行,因此 j 只能得到原值,而不会被增加。应当改为 j++; 写在前边,或者使用 ++j 来明确表达意图,避免意外结果。

运算符优先级与括号使用

运算符的优先级可能导致结果与预期不符。特别是在涉及 %* 时,a % 60 * 1000 可能得到错误结果。应当括号明确运算顺序,如 ()

finally 块执行条件

finally 块的执行并不是绝对的,当 System.exit(0) 调用时,finally 块不会执行。理解 System.exit() 的终止作用对于避免资源泄漏至关重要。

遍历集合与 enum

在使用集合遍历时,勿采用 for ( : ) 枚举,尤其是像 HashSet 这样的集合,枚举方式可能被拒绝,其最佳选择是使用 Iterator

两个响应流的互斥使用

确保 response.getWriter()response.getOutputStream() 不能同时开放,因为它们继续传输会导致orious资源冲突和数据丢失。

super() 与 this() 调用

super() 调用父类无参构造,this() 调用当前类无参构造。继承时理解两者的区别至关重要,以避免传递错误参数或混淆构造顺序。

方法重载与重写区别

overload 是按参数名和类型的多态,override 是按签名的多态。override 必须作用于超类中的方法,适用于更高层次的方法。

final 类的特性

final 类无法被继承,并允许其成员无法被重写。每个成员都是静态的,避免多态性问题,确保代码的稳定性。

获取 Class 的方法

使用 getClass(), Class.forName"How to get the class name of an object", 或在反射工具中获取类。这三种方法覆盖了大部分常见需求,根据具体情况选择最合适的方法。

char 类型与中文字处理

char 类型可以保存 Unicode 字符,涵盖汉字字符集。使用 Unicode 码点编码,如汉字字符,确保能正确显示和处理。

sleep() 与 wait() 的区别

sleep() 保持对象锁,等待完成后自动恢复并继续处理。与之相反的 wait() 放弃对象锁,催到 notify() 方法才能恢复。两者适用于不同情况下的多线程编程。

include 方式与包含类型区别

<%include %> 异步包含,依赖服务器配置。<jsp:include> 动态包含,更灵活和可扩展,适合需要动态生成功能的场景。

通过理解和掌握这些技巧,我们可以编写更高效、更安全的代码,避免纠结于细节错误,提升开发质量。

转载地址:http://eghiz.baihongyu.com/

你可能感兴趣的文章
如何使用ABP进行软件开发(1) 基础概览
查看>>
Spark学习之SparkStreaming
查看>>
AlwaysOn配置时在连接步骤时报错(35250)
查看>>
排序算法之总结
查看>>
微软云Linux服务器 Mysql、tomcat远程连接错误解决办法
查看>>
Python数据分析(二): Numpy技巧 (2/4)
查看>>
09 . Python3之常用模块
查看>>
Python学习笔记-StatsModels 统计回归(3)模型数据的准备
查看>>
Velocity.js初步
查看>>
yarn出现“There are no scenarios ; must have at least one"
查看>>
nginx上配置phpmyadmin
查看>>
HustOJ二次开发之修改数据库连接池
查看>>
redis集群报错:(error) CLUSTERDOWN Hash slot not served
查看>>
一个JAVA应用启动缓慢问题排查 --来自jdk securerandom 的问候
查看>>
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
查看>>
httprunner学习23-加解密
查看>>
有道云笔记 同步到我的博客园
查看>>
阿里云“网红&quot;运维工程师白金:做一个平凡的圆梦人
查看>>
李笑来必读书籍整理
查看>>
vue书籍整理
查看>>