- 浏览: 458743 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (272)
- java基础 (59)
- struts (8)
- spring (8)
- 数据库 (8)
- java 网络编程 (29)
- hibernate (3)
- JavaScript (10)
- 日志管理 (2)
- jsp (4)
- servlet (7)
- xml (4)
- ajax (2)
- web service (4)
- 算法与数据结构 (13)
- java 反射机制 (11)
- java 泛型 (3)
- java I/O (8)
- java 线程 (12)
- JavaEE (6)
- java解惑 (33)
- 工具 (5)
- MyEclipse编程实践 (1)
- OSGI (2)
- 设计模式 (9)
- 正则表达式 (0)
- EJB (3)
- Ubuntu linux (6)
- Android (1)
- web前端 (2)
- 找工作 (1)
- SCA (1)
- maven (1)
- 缓存 (1)
- json (1)
- javamail (1)
- 工作笔记 (2)
最新评论
-
霜花似雪:
博主可以分享一下源码吗?
使用maven构建web项目实例 -
王庆波-行:
很好的demo!
memcache使用实例 -
surpassno:
大写的牛逼
java可视化显示内存使用情况 -
zhulin0504:
怎么访问NetEcho.html页面呀???
applet与servlet的网络通信 -
springdata:
java多线程实例demo源代码下载:http://www.z ...
java多线程例子
谜题41:域和流
下面的方法实现将一个文件拷贝到另一个文件,但它并非总是能够做到这一点,为什么不能呢?如何修改?
问题在于finally自身,close方法也可能抛出IOException异常。如果正好发生在in.close()调用之时,就会阻止out.close 的调用,从而使输出流保持在开放状态。注意,该程序违反了谜题36的建议:对close的调用可能会导致finally语句块意外结束。解决方式 是将每一个close都包含在一个嵌套的try语句块中。
谜题42:异常为循环而抛
打印出0
这个程序犯了两个错误,第1个错误是该程序使用了一种可怕的循环惯用法。不要使用异常控制循环;应该只为异常条件而使用异常。
为纠正这个错误,将整个try-finally语句块替换为循环遍历数组的标准惯用法:
for(int i = 0;i<tests.length;i++){
if(thirdElemIsThree(tests[i]))count++;
}
再次运行,会出现java.lang.ArrayIndexOutOfBoundsException异常,因为&运算符要计算两个操作数,改用短路的&&运算符。return a.length>=3 && a[2] ==3;
谜题43:异常的危险
在jdk1.2中,Thread.stop、Thread.suspend以及其他许多线程相关的方法都因为不安全而不推荐使用了。
谜题44:删除类
要想编写一个能够探测类丢失的程序,请使用反射来引用类而不是使用通常的语言结构。如下程序展示了这种技巧:
总之,不要对捕捉NoClassDefFoundError形成依赖。更一般地讲,捕获Error及其子类型几乎是完全不恰当的。
本谜题测试你对递归的了解程度,下面的程序将做些什么呢?
要不是有try-finally语句,行为非常明显:workhard递归调用自身,直到程序抛出StackOverflowError异常。但这个程序一直的在循环。因为一般VM将栈的深度限制为1024,因此,调用的数量就是1+2+4+。。。=2^1025-1,而抛出异常的数量是2^1024,没人能看到这个程序终止的时刻。
下面的方法实现将一个文件拷贝到另一个文件,但它并非总是能够做到这一点,为什么不能呢?如何修改?
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); } } finally{ if(in!=null) in.close(); if(out!=null)out.close(); } }
问题在于finally自身,close方法也可能抛出IOException异常。如果正好发生在in.close()调用之时,就会阻止out.close 的调用,从而使输出流保持在开放状态。注意,该程序违反了谜题36的建议:对close的调用可能会导致finally语句块意外结束。解决方式 是将每一个close都包含在一个嵌套的try语句块中。
谜题42:异常为循环而抛
public class Loop { public static void main(String[] args) { int[][] tests = {{6,5,4,3,2,1},{1,2},{1,2,3},{1,2,3,4},{1}}; int count = 0; try{ int i =0; while(true){ if(thirdElemIsThree(tests[i++])) count ++; } }catch(ArrayIndexOutOfBoundsException e){ } System.out.println(count); } private static boolean thirdElemIsThree(int[] a) { return a.length>=3 & a[2] ==3; } }
打印出0
这个程序犯了两个错误,第1个错误是该程序使用了一种可怕的循环惯用法。不要使用异常控制循环;应该只为异常条件而使用异常。
为纠正这个错误,将整个try-finally语句块替换为循环遍历数组的标准惯用法:
for(int i = 0;i<tests.length;i++){
if(thirdElemIsThree(tests[i]))count++;
}
再次运行,会出现java.lang.ArrayIndexOutOfBoundsException异常,因为&运算符要计算两个操作数,改用短路的&&运算符。return a.length>=3 && a[2] ==3;
谜题43:异常的危险
在jdk1.2中,Thread.stop、Thread.suspend以及其他许多线程相关的方法都因为不安全而不推荐使用了。
谜题44:删除类
要想编写一个能够探测类丢失的程序,请使用反射来引用类而不是使用通常的语言结构。如下程序展示了这种技巧:
try{ Object m = Class.forName("Missing").newInstance(); }catch(NoClassDefFoundError ex){ System.err.println("got it!"); }
总之,不要对捕捉NoClassDefFoundError形成依赖。更一般地讲,捕获Error及其子类型几乎是完全不恰当的。
谜题45:令人疲惫不堪的测试
本谜题测试你对递归的了解程度,下面的程序将做些什么呢?
public class Workout { public static void main(String[] args) { workhard(); System.out.println("It's nap time"); } private static void workhard() { try{ workhard(); }finally{ workhard(); } } }
要不是有try-finally语句,行为非常明显:workhard递归调用自身,直到程序抛出StackOverflowError异常。但这个程序一直的在循环。因为一般VM将栈的深度限制为1024,因此,调用的数量就是1+2+4+。。。=2^1025-1,而抛出异常的数量是2^1024,没人能看到这个程序终止的时刻。
发表评论
-
数据库及struts面试题
2011-06-22 11:07 1026数据库部分 Q: What is SQL? ... -
EJB面试题
2011-06-22 10:54 1095Q: What are the different kinds ... -
java中的servlet面试题
2011-06-22 10:43 1077Q: Explain the life cycle metho ... -
java中JSP的面试题
2011-06-22 10:22 1506Q: What is a output comment? (可 ... -
java中的集合面试题
2011-06-22 10:12 689Q: What is the Collections API? ... -
彻底搞清楚java的内部类
2011-06-15 10:47 1454内部类允许在一个类中 ... -
细说java(java中的浮点数十六进制表示)
2011-06-12 16:48 3509java中浮点数不能用八进制表示,但可以用十六进制表示,只能用 ... -
SCJP试题
2011-06-09 16:14 1143package scjp; public class T ... -
java面试题解惑 之 继承、多态、重载、重写
2011-06-03 09:36 1270继承、多态、重载、重写 继承 java中有三种类:类,抽象类, ... -
java面试题解惑 之 多线程
2011-06-02 17:24 9501,多线程 线程或者说 ... -
java面试题解惑 之变量初始顺序,变量覆盖,字符串池,final,finally区别
2011-06-02 16:26 7621,变量初始化顺序 package com.qdu.sun; ... -
java解惑(Map的使用,静态导入方法,线程中断interrupted与线程死锁)
2011-05-17 12:38 1363Map的使用 package other; import ... -
java 继承的一个问题(想不明白)
2011-04-13 17:03 884java中的继承问题,以为是学会了java,结果最简单的一个j ... -
java解惑(谜题76。。)
2011-03-09 11:22 1178谜题76:乒乓public class PingPong { ... -
java解惑(谜题60,65)
2011-03-08 15:52 886一行以毙之 1,编写一个 ... -
java解惑(谜题66。。。)
2011-02-28 20:54 912谜题66:一件私事 class Base{ public ... -
java解惑(谜题61。。。)
2011-02-28 20:17 885谜题61:日期游戏 import java.util.Cal ... -
java解惑(谜题56到。。库之谜)
2011-02-28 19:41 828谜题56:大问题 import jav ... -
java解惑(谜题49。。)
2011-02-27 10:52 924谜题49:比生命更大 import java.util.Cal ... -
谜题36-谜题
2011-02-25 10:55 860谜题36:优柔寡断 public ...
相关推荐
java 表达式谜题 java 字符谜题 java 循环谜题 java 异常谜题 java 高级谜题 ......
我整理出来的Java解惑/谜题的CHM版本,包括目录、全文搜索和收藏夹。比目前Word/PDF版本的多个目录,比TXT版本的多一些格式。-- 如果不能打开CHM,请按下面方法解决:-- 右键点击chm文档,查看属性,可以看到...
java解惑(java谜题)中文版的. 值得一看的JAVA资料. Java puzzlers
Java解惑,是一本以大量java实例,讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java...
java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑
在每个谜题之后都有详细的解惑方案,这些方案在给出那些实际行为与表面上迥异的程序行为的简单解释的同时,更向读者展示了如何一劳永逸地避免底层的陷阱与缺陷。 本书以轻松诙谐的语言,寓教于乐的方式,由浅入深、...
谜题41:域和流 谜题42:异常为循环而抛 谜题43:异常地危险 谜题44:切掉类 谜题45:令人疲惫不堪的测验 Java谜题5——类谜题 谜题46:令人混淆的构造器案例 谜题47:啊呀!我的猫变成狗了 谜题48:我所...
Java谜题—对java的95个谜题进行讲解
该书特写了95个有关Java或其类库的陷阱和缺陷的谜题,其中大多数谜题都采用了短程序的方式,这些程序的行为与其看似的大相径庭。在每个谜题之后都给出了详细的解惑方案,这些解惑方案超越了对程序行为的简单解释,向...
95个谜题,即95个java开发者常见错误,经常混淆的地方,希望对大家有所帮助,这个pdf文档超清晰
本书特写了95个有关Java或其类库的陷阱和缺陷的谜题,其中大多数谜题都采用了短程序的方式,这些程序的行为与其看似的大相径庭。在每个谜题之后都给出了详细的解惑方案,这些解惑方案超越了对程序行为的简单解释,向...
java解惑,揭示了上百个程序容易犯错且理解不清楚的问题
java谜题解惑This Fifth Edition is completely revised and expanded to cover JavaScript as it is used in today's Web 2.0 applications. This book is both an example-driven programmer's guide and a keep-...
Java谜题1——表达式谜题 谜题1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数。这个方法能够正确运转吗? public static boolean isOdd(int i){ return i % 2 == 1; } 奇数可以被定义为被2整除余数为...
本系列内容来源于《JAVA解惑》一书,不是本人所独创,此系列内容应该说是该书的一个精简版,但内容含盖90%左右,本人看完之后是大有收获! 第1章 绪论 第2章 表达式之谜 谜题1:奇数性 谜题2:找零时刻 谜题3:长...
Java Puzzlers 中文版(Java解惑) Java 谜题 1——表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数。这个方法能够正确运转 吗? public static boolean isOdd(int i){ return i % 2 == 1...
java谜题解惑 解决谜题最佳方案
Java 谜题解惑。如:奇数性、找零时刻、长整除、十六进制等相关疑惑。
Java解惑,是一本以大量java实例,讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java...
JAVA解惑_布洛赫.扫描版.(无保护,可修改) 《Java解惑》是由Joshua Bloch(美)、Neal Gafter(美)编著,陈昊鹏翻译的计算机语言类丛书,该书由人民邮电出版社2006年发行出版。该书特写了95个有关Java或其类库的陷阱和...