黑马程序员技术交流社区

标题: 我用/**/注释的部分为什么还报错? [打印本页]

作者: 吴光新    时间: 2013-7-5 22:41
标题: 我用/**/注释的部分为什么还报错?
  1. /*
  2. \uhhhh 带有十六进制值 0x 的字符 hhhh
  3. */
复制代码
RegexDemo.java:2: 错误: 非法的 Unicode 转义
\uhhhh 带有十六进制值 0x 的字符 hhhh
  ^
1 个错误


这样都报错,是怎么回事?
作者: 宋旭东    时间: 2013-7-5 22:53
是这个的问题:\uhhhh

首先,"\" 是转义字符,这个知道吧。字符串"\r\t"表示回车换行,虽然是字符串的形式,但是是打印不出来的,如果想打印出来需要再转义:"\\r\\t"可以打印出:\r\t。

解释:
"\\" 中的前一个斜线表示转义字符,把第二个斜线转义成了普通的斜线这样就可以打印出来了,自然的r就不存在被转义了。分解之后相当于:"\\"+"r"+"\\"+"t"   。

这样解释还能明白吧!应该是可以的,这差不多就是最详细的解释了。希望对你有帮助!

作者: 宋旭东    时间: 2013-7-5 22:54
本帖最后由 宋旭东 于 2013-7-5 22:57 编辑

补充:
转义字符在注释里面也是可以被读取的,会把这个当做一个代码语句来解释,应该写成 :\\uhhhh




作者: lanbuohan    时间: 2013-7-6 00:26
我觉你这里如果是在java文件中是没有错误,你这个注释是不时不再java文件,而是在Html等类文件呢?\u转意符,就像是我们在写一个注册表单\u5846,加四个数字就代表一个文字。不同的类型的文件其注释是不相同的
作者: longlangcx    时间: 2013-7-6 00:59
首先,\uhhhh是非法的转义字符,\u后面跟四位十六进制数,最大值应该是\uffff,你这个hhhh肯定是不合法的。

而这个\uhhhh被java编译器解析到了,所以会报错。

java编译器看到“ /* ”这个开头,就会从这个开头开始往下每个字符每个字符的寻找'*' '/'这个字符组合,这个结尾也就是两个字符的组合吧。而转义字符也代表字符,所以在从前到后的解析过程中,也会解析转义字符。

比如说,你前面写个/*,然后再后面写个\u002a\u002f,那么从/*开始到\u002a\u002f结束的中间内容就会被编译器确定为注释部分。因为\u002a相当于 '*', \u002f相当于'/'。

所以说,不是你这个转义字符放在注释里还报错,而是在java编译器寻找注释结尾的过程中(还不知道哪个部分是注释呢)发现了这个非法的\uhhhh,所以报错。

作者: 吴光新    时间: 2013-7-6 19:33
lanbuohan 发表于 2013-7-6 00:26
我觉你这里如果是在java文件中是没有错误,你这个注释是不时不再java文件,而是在Html等类文件呢?\u转意符 ...

是java文件
作者: 吴光新    时间: 2013-7-6 19:38
longlangcx 发表于 2013-7-6 00:59
首先,\uhhhh是非法的转义字符,\u后面跟四位十六进制数,最大值应该是\uffff,你这个hhhh肯定是不合法的。 ...

从来没注意这个注释部分,一直以为只要加个/**/就能在里面写任何字符~我也考虑到会不会是转义符引起的,我也在前面多加个\,但因为是学正则表达式,我把一些资料复制到笔记中,当然我的笔记目前都是记录在java文件中,就是老师每讲解一个例子,我都把笔记暂时记录在java文件里,所以如果想在前面加\,怕到时候误解,看来该换“笔记本”了。
作者: lanbuohan    时间: 2013-7-6 20:13
longlangcx 发表于 2013-7-6 00:59
首先,\uhhhh是非法的转义字符,\u后面跟四位十六进制数,最大值应该是\uffff,你这个hhhh肯定是不合法的。 ...

厉害啊,这个知识真的很冷,牛




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2