- 浏览: 1060507 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- C++ (39)
- Java (74)
- Java界面开发学习笔记 (4)
- Java用户的c++之旅 (0)
- 自言自语 (12)
- DSP (1)
- MCU (0)
- CG (0)
- Jabber (0)
- Gloox (0)
- Linux (11)
- Windows (19)
- Networks (4)
- Jobs (0)
- PHP (1)
- JSP (2)
- 生活 (35)
- C (2)
- Qt4 (2)
- C# (50)
- WPF (5)
- ASP (2)
- FLEX (47)
- SQL (20)
- JavaScript (12)
- SharePoint (6)
- GWT (1)
- Dojo (9)
- HTML (11)
- Others (7)
- 如何安装配置系列 (7)
- UML (2)
- Android (3)
- alibaba (1)
最新评论
-
zxjlwt:
学习了http://surenpi.com
Firefox插件开发: Hello World! -
ylldzz:
楼主知道MVEL怎么调试么
MVEL简介及快速使用 -
blueman2012:
您好,可否提供源码下载,我把您的代码贴过来后,好多报错的,谢谢 ...
Log4J日志解析 -
svygh123:
你的游标都没有关闭呢!
MYSQL游标嵌套循环示例 -
dizh:
写的很好啊
MVEL简介及快速使用
--表达式谜题
谜题7:
在单个的表达式中不要对相同的变量赋值两次。
谜题8:
如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。如果一个操作数的类型是 T,T 表示 byte、short 或 char,而另一个操作数是一个 int 类型的常量表达式,它的值是可以用类型 T 表示的,那么条件表达式的类型就是 T。否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型。
谜题9:
复合赋值表达式自动地将它们所执行的计算的结果转型为其左侧变量的类型。 如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原始类型转换。
谜题10:
复合赋值操作符要求两个操作数都是原始类型的,例如 int,或包装了的原始类型,例如 Integer,但是有一个例外:如果在+=操作符左侧的操作数是 String类型的,那么它允许右侧的操作数是任意类型,在这种情况下,该操作符执行的是字符串连接操作。
--字符谜题
谜题11:
编译器在计算常量表达式'H'+'a'时,是通过我们熟知的拓宽原始类型转换将两个具有字符型数值的操作数('H'和'a')提升为 int 数值而实现的。从 char 到int 的拓宽原始类型转换是将 16 位的 char 数值零扩展到 32 位的 int。所以:
System.out.print('H'+'a'); 打印出的是169.
谜题12:
·那在一个非空 char 数组上面调用 toString 方法会产生什么样的行为呢?数组是从 Object 那里继承的 toString 方法[JLS 10.7],规范中描述到:“返回一个字符串,它包含了该对象所属类的名字,'@'符号,以及表示对象散列码的一个无符号十六进制整数”[Java-API]。有关 Class.getName 的规范描述到:在char[]类型的类对象上调用该方法的结果为字符串"[C"。
·总之,char 数组不是字符串。要想将一个 char 数组转换成一个字符串,就要调用 String.valueOf(char[])方法。
谜题13:
字符串连接[+]的优先级不应该和加法一样。
+ 操作符,不论是用作加法还是字符串连接操作,它都比 == 操作符的优先级高.
e.g. System.out. println("Animals are equal: " + pig == dog);
谜题14:
在字符串和字符字面常量中要优先选择的是转义字符序列,而不是Unicode 转义字符。Unicode 转义字符可能会因为它们在编译序列中被处理得过早而引起混乱。不要使用 Unicode 转义字符来表示 ASCII 字符。在字符串和字符字面常量中,应该使用转义字符序列;对于除这些字面常量之外的情况,应该直接将 ASCII 字符插入到源文件中。
谜题15:
要确保字符\u 不出现在一个合法的 Unicode 转义字符上下文之外,即使是在注释中也是如此。在机器生成的代码中要特别注意此问题。
谜题17:
Unicode 转义字符只有在你要向程序中插入用其他任何方式都无法表示的字符时才是必需的,除此之外的任何情况都不应该避免使用它们。Unicode 转义字符降低了程序的清晰度,并且增加了产生 bug 的可能性。
谜题18:
String(byte[])构造器,有关它的规范描述道:“在通过解码使用平台缺省字符集的指定 byte 数组来构造一个新的 String 时,该新String 的长度是字符集的一个函数,因此,它可能不等于 byte 数组的长度。当给定的所有字节在缺省字符集中并非全部有效时,这个构造器的行为是不确定的”[Java-API]。
幸运的是,你没有被强制要求必须去容忍各种稀奇古怪的缺省字符集。当你在char 序列和 byte 序列之间做转换时,你可以且通常是应该显式地指定字符集。除了接受 byte 数字之外,还可以接受一个字符集名称的 String 构造器就是专为此目的而设计的。如果你用下面的构造器去替换在最初的程序中的 String 构造器,那么不管缺省的字符集是什么,该程序都保证能够按照顺序打印从 0 到 255的整数:
String str = new String(bytes, "ISO-8859-1");
这个谜题的教训是:每当你要将一个 byte 序列转换成一个 String 时,你都在使用某一个字符集,不管你是否显式地指定了它。如果你想让你的程序的行为是可预知的,那么就请你在每次使用字符集时都明确地指定。
谜题19:
块注释不能可靠地注释掉代码段,应该用单行的注释序列来代替。
谜题20:
正则表达式“.”可以匹配任何单个的字符。要想只匹配句点符号,在正则表达式中的句点必须在其前面添加一个反斜杠(\)进行转义。因为反斜杠字符在字面含义的字符串中具有特殊的含义——它标识转义字符序列的开始——因此反斜杠自身必须用另一个反斜杠来转义,这样就可以产生一个转义字符序列,它可以在字面含义的字符串中生成一个反斜杠。
e.g. Me.class.getName().replaceAll("\\.","/")
谜题23:
栅栏柱错误(fencepost error)。这个名字来源于对下面这个问题最常见的但却是错误的答案,如果你要建造一个100 英尺长的栅栏,其栅栏柱间隔为 10 英尺,那么你需要多少根栅栏柱呢?11根或 9 根都是正确答案,这取决于是否要在栅栏的两端树立栅栏柱,但是 10 根却是错误的。要当心栅栏柱错误,每当你在处理长度、范围或模数的时候,都要仔细确定其端点是否应该被包括在内,并且要确保你的代码的行为要与其相对应。
你可能对 StringBuffer(char)构造器并不熟悉,这很容易解释:它压根就不存在。StringBuffer 有一个无参数的构造器,一个接受一个 String 作为字符串缓冲区初始内容的构造器,以及一个接受一个 int 作为缓冲区初始容量的构造器。在本例中,编译器会选择接受 int 的构造器,通过拓宽原始类型转换把字符数值'M'转换为一个 int 数值 77[JLS 5.1.2]。换句话说,new StringBuffer('M')返回的是一个具有初始容量 77 的空的字符串缓
冲区。
总结一下:首先,要当心栅栏柱错误。其次,牢记在 switch 语句的每一个case 中都放置一条 break 语句。第三,要使用常用的惯用法和 API,并且当你在离开老路子的时候,一定要参考相关的文档。第四,一个 char 不是一个 String,而是更像一个 int。
--循环谜题
谜题26:
如果你需要的循环会迭代到 int 数值的边界附近时,你最好是使用一个 long 变量作为循环索引。只需将循环索引的类型从 int 改变为 long 就可以解决该问题。
谜题27:
·问题在于(-1 << 32)等于-1 而不是 0,因为移位操作符之使用其右操作数的5 位作为移位长度。或者是低 6 位,如果其左操作数是一个 long 类数值[JLS15.19]。
·这条规则作用于全部的三个移位操作符:<<、>>和>>>。移位长度总是介于 0 到31 之间,如果左操作数是 long 类型的,则介于 0 到 63 之间。这个长度是对 32取余的,如果左操作数是 long 类型的,则对 64 取余。如果试图对一个 int 数值移位 32 位,或者是对一个 long 数值移位 64 位,都只能返回这个数值自身的值。没有任何移位长度可以让一个 int 数值丢弃其所有的 32 位,或者是让一个 long数值丢弃其所有的 64 位。
--异常谜题
谜题36:
在一个 try-finally 语句中,finally 语句块总是在控制权离开 try 语句块时执行的[JLS 14.20.2]。无论 try 语句块是正常结束的,还是意外结束的,情况都是如此。一条语句或一个语句块在它抛出了一个异常,或者对某个封闭型语句执行了一个 break 或 continue,或是象这个程序一样在方法中执行了一个return 时,将发生意外结束。它们之所以被称为意外结束,是因为它们阻止程序去按顺序执行下面的语句。
e.g.
返回false
谜题7:
在单个的表达式中不要对相同的变量赋值两次。
谜题8:
如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。如果一个操作数的类型是 T,T 表示 byte、short 或 char,而另一个操作数是一个 int 类型的常量表达式,它的值是可以用类型 T 表示的,那么条件表达式的类型就是 T。否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型。
谜题9:
复合赋值表达式自动地将它们所执行的计算的结果转型为其左侧变量的类型。 如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原始类型转换。
谜题10:
复合赋值操作符要求两个操作数都是原始类型的,例如 int,或包装了的原始类型,例如 Integer,但是有一个例外:如果在+=操作符左侧的操作数是 String类型的,那么它允许右侧的操作数是任意类型,在这种情况下,该操作符执行的是字符串连接操作。
--字符谜题
谜题11:
编译器在计算常量表达式'H'+'a'时,是通过我们熟知的拓宽原始类型转换将两个具有字符型数值的操作数('H'和'a')提升为 int 数值而实现的。从 char 到int 的拓宽原始类型转换是将 16 位的 char 数值零扩展到 32 位的 int。所以:
System.out.print('H'+'a'); 打印出的是169.
谜题12:
·那在一个非空 char 数组上面调用 toString 方法会产生什么样的行为呢?数组是从 Object 那里继承的 toString 方法[JLS 10.7],规范中描述到:“返回一个字符串,它包含了该对象所属类的名字,'@'符号,以及表示对象散列码的一个无符号十六进制整数”[Java-API]。有关 Class.getName 的规范描述到:在char[]类型的类对象上调用该方法的结果为字符串"[C"。
·总之,char 数组不是字符串。要想将一个 char 数组转换成一个字符串,就要调用 String.valueOf(char[])方法。
谜题13:
字符串连接[+]的优先级不应该和加法一样。
+ 操作符,不论是用作加法还是字符串连接操作,它都比 == 操作符的优先级高.
e.g. System.out. println("Animals are equal: " + pig == dog);
谜题14:
在字符串和字符字面常量中要优先选择的是转义字符序列,而不是Unicode 转义字符。Unicode 转义字符可能会因为它们在编译序列中被处理得过早而引起混乱。不要使用 Unicode 转义字符来表示 ASCII 字符。在字符串和字符字面常量中,应该使用转义字符序列;对于除这些字面常量之外的情况,应该直接将 ASCII 字符插入到源文件中。
谜题15:
要确保字符\u 不出现在一个合法的 Unicode 转义字符上下文之外,即使是在注释中也是如此。在机器生成的代码中要特别注意此问题。
谜题17:
Unicode 转义字符只有在你要向程序中插入用其他任何方式都无法表示的字符时才是必需的,除此之外的任何情况都不应该避免使用它们。Unicode 转义字符降低了程序的清晰度,并且增加了产生 bug 的可能性。
谜题18:
String(byte[])构造器,有关它的规范描述道:“在通过解码使用平台缺省字符集的指定 byte 数组来构造一个新的 String 时,该新String 的长度是字符集的一个函数,因此,它可能不等于 byte 数组的长度。当给定的所有字节在缺省字符集中并非全部有效时,这个构造器的行为是不确定的”[Java-API]。
幸运的是,你没有被强制要求必须去容忍各种稀奇古怪的缺省字符集。当你在char 序列和 byte 序列之间做转换时,你可以且通常是应该显式地指定字符集。除了接受 byte 数字之外,还可以接受一个字符集名称的 String 构造器就是专为此目的而设计的。如果你用下面的构造器去替换在最初的程序中的 String 构造器,那么不管缺省的字符集是什么,该程序都保证能够按照顺序打印从 0 到 255的整数:
String str = new String(bytes, "ISO-8859-1");
这个谜题的教训是:每当你要将一个 byte 序列转换成一个 String 时,你都在使用某一个字符集,不管你是否显式地指定了它。如果你想让你的程序的行为是可预知的,那么就请你在每次使用字符集时都明确地指定。
谜题19:
块注释不能可靠地注释掉代码段,应该用单行的注释序列来代替。
谜题20:
正则表达式“.”可以匹配任何单个的字符。要想只匹配句点符号,在正则表达式中的句点必须在其前面添加一个反斜杠(\)进行转义。因为反斜杠字符在字面含义的字符串中具有特殊的含义——它标识转义字符序列的开始——因此反斜杠自身必须用另一个反斜杠来转义,这样就可以产生一个转义字符序列,它可以在字面含义的字符串中生成一个反斜杠。
e.g. Me.class.getName().replaceAll("\\.","/")
谜题23:
栅栏柱错误(fencepost error)。这个名字来源于对下面这个问题最常见的但却是错误的答案,如果你要建造一个100 英尺长的栅栏,其栅栏柱间隔为 10 英尺,那么你需要多少根栅栏柱呢?11根或 9 根都是正确答案,这取决于是否要在栅栏的两端树立栅栏柱,但是 10 根却是错误的。要当心栅栏柱错误,每当你在处理长度、范围或模数的时候,都要仔细确定其端点是否应该被包括在内,并且要确保你的代码的行为要与其相对应。
你可能对 StringBuffer(char)构造器并不熟悉,这很容易解释:它压根就不存在。StringBuffer 有一个无参数的构造器,一个接受一个 String 作为字符串缓冲区初始内容的构造器,以及一个接受一个 int 作为缓冲区初始容量的构造器。在本例中,编译器会选择接受 int 的构造器,通过拓宽原始类型转换把字符数值'M'转换为一个 int 数值 77[JLS 5.1.2]。换句话说,new StringBuffer('M')返回的是一个具有初始容量 77 的空的字符串缓
冲区。
总结一下:首先,要当心栅栏柱错误。其次,牢记在 switch 语句的每一个case 中都放置一条 break 语句。第三,要使用常用的惯用法和 API,并且当你在离开老路子的时候,一定要参考相关的文档。第四,一个 char 不是一个 String,而是更像一个 int。
--循环谜题
谜题26:
如果你需要的循环会迭代到 int 数值的边界附近时,你最好是使用一个 long 变量作为循环索引。只需将循环索引的类型从 int 改变为 long 就可以解决该问题。
谜题27:
·问题在于(-1 << 32)等于-1 而不是 0,因为移位操作符之使用其右操作数的5 位作为移位长度。或者是低 6 位,如果其左操作数是一个 long 类数值[JLS15.19]。
·这条规则作用于全部的三个移位操作符:<<、>>和>>>。移位长度总是介于 0 到31 之间,如果左操作数是 long 类型的,则介于 0 到 63 之间。这个长度是对 32取余的,如果左操作数是 long 类型的,则对 64 取余。如果试图对一个 int 数值移位 32 位,或者是对一个 long 数值移位 64 位,都只能返回这个数值自身的值。没有任何移位长度可以让一个 int 数值丢弃其所有的 32 位,或者是让一个 long数值丢弃其所有的 64 位。
--异常谜题
谜题36:
在一个 try-finally 语句中,finally 语句块总是在控制权离开 try 语句块时执行的[JLS 14.20.2]。无论 try 语句块是正常结束的,还是意外结束的,情况都是如此。一条语句或一个语句块在它抛出了一个异常,或者对某个封闭型语句执行了一个 break 或 continue,或是象这个程序一样在方法中执行了一个return 时,将发生意外结束。它们之所以被称为意外结束,是因为它们阻止程序去按顺序执行下面的语句。
e.g.
static boolean decision() { try { return true; } finally { return false; } }
返回false
发表评论
-
Interesting interview question…
2011-06-23 19:10 1383Today I was asked this questi ... -
简单易用的Web框架:SummerCool介绍
2011-05-10 19:01 4691SummerCool是国内某大型电子商务平台的架构师自 ... -
[转]Eclipse插件:Java AST View
2011-05-06 16:03 4576转载:http://www.blogjava.net/life ... -
Eclipse之Debug技巧
2011-05-02 15:30 1520你认为你的eclipse debug技能都学会了吗?能够熟 ... -
AccessController.doPrivileged 小记
2011-04-29 20:29 2029原文:http://blog.csdn.net/tea ... -
推荐一个下载源码的网站
2011-04-29 20:26 1203http://olex.openlogic.com/ 这个网 ... -
Java解析xml禁止校验dtd
2011-04-27 21:34 8262今天在做log4j.xml解析的时候,指定了如下的dtd声明: ... -
区分getName、getCanonicalName与getSimpleName
2011-04-27 18:34 5736举例,现有一个类如下: package com.sha ... -
Log4J日志解析
2011-04-25 16:12 6970在有些场景下,需要解析Log4J的日志,以为己用。比如,根据 ... -
分享个不错的网站:看JSON字符串的利器
2011-04-20 20:09 1266分享个不错的网站:看JSON字符串的利器or胸器 http: ... -
Regex:密码验证
2011-04-13 18:45 19494.当且仅当含数字和字母的密码验证 如果密码当且仅当 ... -
JDBC操作数据库时切记关闭资源
2011-04-08 18:14 1811Error: No ManagedConnectio ... -
JDBC:如何将resultset的信息自动封装到pojo里面
2011-04-08 10:32 4264不多说了 直接上代码 Java代码 p ... -
Maven自动升级版本号并打包上传的脚本
2011-04-02 09:52 7437同事写的自动升级版本并打包上传的脚本: echo of ... -
在ibatis中使用$value$引入变量会引入SQLInjection漏洞
2011-04-01 16:26 2276(1)sql语法中的_关键字_.如果sql语句中出现存在用户输 ... -
EqualsBuilder和HashCodeBuilder
2011-03-31 19:30 2174自动化hashCode()和equals() 问题产生:当需 ... -
Eclipse中的Stack Trace Console的使用
2011-03-15 14:47 2978很多的Java程序员(特别是开发Web程序的时候),通常在 ... -
System.out.format的使用
2011-01-21 12:34 4728JDK5.0允许象C语言那样直接用printf()方法来格式化 ... -
jhat的简单使用
2011-01-18 19:41 2856leak一般会发生在容器类保存对象引用而不删除的时候,替代方法 ... -
关于变更eclipse中maven插件的repository路径
2011-01-10 10:02 16531.打开eclipse 2.window-->ref ...
相关推荐
2-96俄罗斯方块Block Puzzle - Brick Classic 1.12-96俄罗斯方块Block Puzzle - Brick Classic 1.12-96俄罗斯方块Block Puzzle - Brick Classic 1.12-96俄罗斯方块Block Puzzle - Brick Classic 1.12-96俄罗斯方块...
Rotate-N-Puzzle问题与N-Puzzle问题类似,问题空间也具有组合爆炸性质。经证明,Rotate-N-Puzzle的任何一个初始布局都是可解的。在此结论的基础上,给出了解长度的上界。提出了一种分治算法,在算法中的每一步,采用...
Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑
A python program solving an 8 puzzle game with BFS.
此程序为基于java的拼图游戏,大家可以直接从文档中复制到txt里就可以直接使用了,可以用于做大作业等
Knight-Java-2D-益智游戏这是一个简单的Java 2D Knight益智游戏。 使用的IDE是netbeans(我上传了所有项目工件),还上传了游戏可执行JAR文件。 如果您有任何疑问或想要继续这个项目,请随时:) 请访问我的网站。
Android实现拼图游戏
Senior-Design-1---Automonous-Puzzle-Solver
:atom_symbol: :puzzle_piece: 图片拼图组件。 支持 , 和 。 :rocket: 入门 使用 : yarn add react-native-picture-puzzle :writing_hand: 用法 import React from 'react' ; import { PicturePuzzle , ...
java打包源码mysterymaster-puzzle-java 该存储库包含com.mysterymaster.puzzle包的Java源代码。
labview开发的小游戏,俄罗斯方块,适合初学者阅读学习
NPuzzle求解研究报告.docx
Projekt SI GCHQ圣诞贺卡拼图
关于puzzle例题的原题资源,搭配文章使用更配噢 https://editor.csdn.net/md/?articleId=124139016
用JAVA编的小游戏 Nine Puzzle 里面含有源程序,编译好的文件(CMD 下打开) 使用说明文档,流程图和注释 以及游戏界面截图 适合JAVA 初学者 MiniProject
Hill代码人工智能-Java中的HillClimbing算法 8Puzzle和8Queens问题的爬山算法的实现 ##描述 这段代码包含4种类型的本地搜索算法实现: 最陡的登山攀岩 首选登山 随机重启爬山 模拟退火 此代码显示控制台中正在运行...
8-puzzle 是一款老游戏,主要用于测试新的启发式 AI 技术。 该软件使用“棋盘计数”解决任何 8 拼图组合(偶数和奇数)。 偶数组合将找到以下目标: 012 345 678 奇怪的组合会找到以下目标: 123 804 765 如何...
有许多名称,例如 8-puzzle、15-puzzle、滑动瓷砖拼图等。它是一种将n瓷砖放置在n+1个格子中,留下一个空格的拼图。 必须通过将瓷砖滑入空白区域来按顺序移动瓷砖。 某些变体使用必须未打乱的图像; 这里考虑的变化...
java 书籍的代码 内容广泛 第十章的内容。