什么是陷阱?
简洁的定义:
陷阱,是指那些能够正常编译,但是在执行时却产生事与愿违的,有时候甚至是灾难性后果的程序代码。
广义的定义:
任何可能导致程序员把大量的时间浪费在开发工具的使用上而不是最终软件的进展上的语言特性、API或系统,都可以称呼为陷阱。
陷阱的分类?
分析陷阱三重奏?
症状或者问题:
首先找到是哪一个代码造成的问题,陷阱的类型是什么。
问题的根源:
这个是揭示陷阱最重要的一个部分,我们要深入底层,了解可能导致程序员绊脚的详细内部工作过程、无效的假设或者API的缺陷。
解决方案:
这个是分析陷阱的最后一个步骤,最终给出一个程序实现和运行结果。
NO.1 找奇数
public class OddTest {
public static boolean isOdd(int i){
return i % 2 == 1;
}
public static void main(String[] args) {
System.out.println(isOdd(1));
System.out.println(isOdd(2));
System.out.println(isOdd(3));
}
}
陷阱等级:★★★☆☆
NO.2 浮点数相减
public class DoubleMinus {
public static void main(String[] args) {
System.out.printf(2.0-1.1);
}
}
陷阱等级:★★★★★
NO.3 长整除
public class LongDivision {
public static void main(String[] args) {
final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000; //微秒
final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000; //毫秒
System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY);
}
}
陷阱等级:★★★★★
NO.4 互换内容
public class Swap {
public static void main(String[] args) {
int x = 1984;
int y = 2001;
x^= y^= x^=y;
System.out.println("x= " + x + "; y= " + y);
}
}
陷阱等级:★★☆☆☆
NO.5 字符串和字符
public class CharAndString {
public static void main(String[] args) {
System.out.println("H" + "a");
System.out.println('H' + 'a');
}
}
陷阱等级:★★★★★
NO.6 字符数组
public class CharArray {
public static void main(String[] args) {
String letters = "ABC";
char[] numbers = {'1', '2', '3'};
System.out.print(numbers);
System.out.print(letters + " easy as "+numbers);
}
}
陷阱等级:★★★★☆
NO.7 转义字符
public class UnicodeTest {
public static void main(String[] args) {
System.out.println("a\u0022.length() +\u0022b".length());
}
}
陷阱等级:★★☆☆☆
NO.8 打印输出类名
public class MyClass {
public static void main(String[] args) {
System.out.println(MyClass.class.getName().replaceAll(".","/") + ".class");
}
}
陷阱等级:★★☆☆☆
NO.9 随机数的问题
import java.util.Random;
public class RandomTest {
private static Random rnd = new Random();
public static void main(String[] args) {
StringBuffer word = null;
switch(rnd.nextInt(2)) {
case 1: word = new StringBuffer("P");
case 2: word = new StringBuffer("G");
default: word = new StringBuffer("M");
}
word.append('a');
word.append('i');
word.append('n');
System.out.println(word);
}
}
陷阱等级:★★★★☆
NO.10 无情的增量操作
public class ForTest {
public static void main(String[] args) {
int j = 0;
for (int i = 0; i < 100; i++){
j = j++;
}
System.out.println(j);
}
}
陷阱等级:★★★★★
NO.11 整数边界的问题
public class WhileTest {
public static final int END = Integer.MAX_VALUE;
public static final int START = END - 100;
public static void main(String[] args) {
int count = 0;
for (int i = START; i <= END; i++)
count++;
System.out.println(count);
}
}
陷阱等级:★★★★☆
NO.12 计数器的问题
public class Clock {
public static void main(String[] args) {
int minutes = 0;
for (int ms = 0; ms < 60*60*1000; ms++)
if (ms % 60*1000 == 0)
minutes++;
System.out.println(minutes);
}
}
陷阱等级:★★★★☆
NO.13 优柔寡断的返回值
public class ReturnValue {
public static void main(String[] args) {
System.out.println(decision());
}
public static boolean decision() {
try {
return true;
} finally {
return false;
}
}
}
陷阱等级:★★★★☆
NO.14 你好,再见
public class GoodBye {
public static void main(String[] args) {
try {
System.out.println("Hello world");
System.exit(0);
} finally {
System.out.println("Goodbye world");
}
}
}
陷阱等级:★★★★☆
NO.15 到底关闭了吗
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class IOTest {
public static void main(String[] args) {
}
public static void copy(String src, String dest) throws IOException {
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(src);
out = new FileOutputStream(dest);
byte[] buf = new byte[1024];
int n;
while ((n = in.read(buf)) > 0)
out.write(buf, 0, n);
} finally {
if (in != null) in.close();
if (out != null) out.close();
}
}
}
陷阱等级:★★★★★
整理自 www.ibeifeng.com
- 大小: 39 KB
分享到:
相关推荐
Java语言在实际应用中充满了各种陷阱,这些陷阱可能在...通过深入理解和实践这些Java陷阱,不仅可以避免在编程中犯错,也能在面试中展现出专业技能,为你的职业生涯加分。不断学习和探索,使你在Java的世界里游刃有余。
Java作为一门广泛使用的编程语言,其基础知识的...通过深入学习和实践,可以有效地避免这些陷阱,提升Java编程技能。本资源的"01第一讲:Java基础方面陷阱"应包含了对这些知识点的详细讲解,值得Java程序员学习参考。
该文档讲述了java程序员常见的编程陷阱和一些面试指导
Java的基础是学习任何Java相关技术的基石,对于面试准备尤为重要。本文将深入探讨Java SE(标准版)的基础知识,帮助你巩固核心概念并为面试做好准备。 1. **基本语法与数据类型** - Java中的数据类型分为两大类:...
在Java面试过程中,面试官往往会通过一些问题来考察应聘者对Java基础知识的理解深度以及在实际编程中解决问题的能力。本文将根据提供的标题、描述及部分内容,整理并归纳出一系列常见的Java面试陷阱,帮助求职者更好...
"j.doc"和"Java陷阱一箩筐----面试题集.doc"很可能包含了面试中常见的陷阱问题,比如Java内存模型、垃圾回收机制、并发编程中的同步与锁,以及优化技巧等。这些问题旨在测试求职者在实际开发中解决问题的能力。 ...
Java面试是每位求职者在寻找Java相关工作时必须经历的一关,而“陷阱题”则是面试官们常常用来考察候选人深度和广度的一种方式。这些题目往往涉及到一些易被忽视的细节,或者是容易混淆的概念。以下是一些重要的Java...
Java程序员在面试和笔试过程中经常会遇到一些看似简单实则暗藏陷阱的问题。这些题目旨在测试开发者对语言规范、面向对象编程原则以及最佳实践的理解。以下是对这些陷阱题的详细解析: 1. `abstract class Name { .....
9. **接口与抽象类**:理解接口和抽象类之间的区别,以及何时使用它们,是Java编程的基础。面试官可能会问及单个接口与多个接口继承、default方法等概念。 10. **并发工具类与并发API**:如ConcurrentHashMap、...
在Java面试中,面试官常常会设置一些陷阱,考察候选人的基础知识、理解深度以及问题解决能力。以下是对这些常见面试问题的详细解释: 1. **final, finally, finalize的区别**: - `final`:用于声明类、方法或变量...
在Java面试中,面试官常常会设置一些陷阱问题,考察候选人的基础知识和理解深度。以下是一些常见的陷阱问题及其解析: 1. **final, finally, finalize的区别** - `final`:这是一个修饰符,用于声明常量、类或方法...
Java笔试题大全主要涵盖了几大核心领域,包括Java基础知识、EJB、代码与编程实践、线程编程以及针对各大公司的具体面试题目。这些文件旨在帮助准备Java相关职位的求职者全面复习并提升自己的技能。 首先,Java基础...
这个面试试题集合涵盖了软件工程领域的多个关键知识点,包括但不限于基础语法、面向对象编程、多线程、集合框架、JVM原理、设计模式、数据库操作、网络编程以及项目经验等。 首先,基础语法是Java工程师的基石,...
Java程序员在面试过程中可能会遇到各种陷阱,这些陷阱可能源于对技术理解的深度、广度,或是面试技巧的不足。这份48页的PDF文档“Java程序员面试陷阱”旨在揭示这些问题,帮助求职者避免在关键面试时刻掉入这些误区...
《JAVA笔试题及面试题》是华为针对Java工程师所出的一系列试题,旨在评估和筛选出具有优秀编程技能和深入理解Java技术的候选人。这些题目覆盖了Java的基础知识、高级特性、多线程、集合框架、JVM内存管理、异常处理...
在Java面试中,面试官可能会提出一系列陷阱问题来测试候选人的理解深度和广度。以下是对这些陷阱问题的详细解释: 1. **final, finally, finalize**:final用于声明不可变的类、变量或方法;finally是异常处理中的...
### Java程序员面试陷阱大全 在Java编程领域,面试不仅是对技术...以上知识点不仅涵盖了Java编程的基础概念,还深入到了一些容易忽视的细节和潜在的面试陷阱,对于提升Java程序员的综合技能和面试表现具有重要意义。
最后,《Java解惑(中文版)》可能是针对Java编程中常见的疑问和陷阱进行的详细解释,旨在帮助开发者避免常见的编程错误,提升代码质量。这本书可能涵盖了一些容易误解的概念,如字符串的不可变性、equals()与...