黑马程序员技术交流社区

标题: 新版开张,说明一个误区 [打印本页]

作者: 贾文泽    时间: 2013-3-1 16:01
标题: 新版开张,说明一个误区
本帖最后由 贾文泽 于 2013-3-11 12:01 编辑

首先,请看这段代码
  1. import java.io.*;
  2. class  text
  3. {
  4.      public static void main(String[] args)
  5.      {
  6.                  // 文件路径 D:\ja\unix\002.java
  7.          File f = new File("D:\\ja\\unix\\002.java");
  8.                  String s=f.getName();
  9.                  System.out.println(s);
  10.      }
  11. }
复制代码
一个简单的文件操作,指定文件路径获取文件名(其他的暂不考虑),你会不会认为这段代码一定会输出 002.java
要这么想就错了,这段代码根本编译不通过。。。

作者: 黄玉昆    时间: 2013-3-1 16:08
恕我愚钝,没理解
作者: 贾文泽    时间: 2013-3-1 16:10
黄玉昆 发表于 2013-3-1 16:08
恕我愚钝,没理解

这段代码在你电脑上能成功编译?
额,这段代码在任何平台上都无法编译的。。。
作者: 张豪杰    时间: 2013-3-1 16:41
真没看出哪里错了
然后用myeclipse试了一下
真的出了个002.java
求解释
作者: 贾文泽    时间: 2013-3-1 16:50
张豪杰 发表于 2013-3-1 16:41
真没看出哪里错了
然后用myeclipse试了一下
真的出了个002.java

提示信息说明问题明显在 第6行,也就是这段代码仅有的那一行注释信息,奇了个怪了,呵呵,想想注释行里的东西不是可以随便写的么?这里出问题了,注意看注释行里的   \u    ,这样的会出问题的,在写文件操作的代码中,尽量要避免文件名或者文件夹名是以u开头的,要么就不要把文件路径写在注释行了。

作者: 曹春贵    时间: 2013-3-1 17:37
  1.         public static void main(String[] args) {
  2.         // 文件路径 D:\ja\ubacanix\002.java
  3.         File f = new File("D:\\ja\\unix\\002.java");
  4.                 String s=f.getName();
  5.                 System.out.println(s);
  6.         }
复制代码
求解,为什么我这样时能编译并输出的,这也是\u开头的啊!
作者: 贾文泽    时间: 2013-3-1 18:22
曹春贵 发表于 2013-3-1 17:37
求解,为什么我这样时能编译并输出的,这也是\u开头的啊!

你很不巧的写了个  \ubaca   可能成为了一个Unicode的良构    猜的,因为直接输出 是 ?
编译器在抛弃空格和注释之前会将这些特殊字符进行转换,编译器不接受Unicode的病构形式
作者: 曹春贵    时间: 2013-3-1 18:44
不是很理解··不理解了
作者: BitmapFactory    时间: 2013-3-2 14:39
怎么会这样呢,看来注释也不会完全被忽略掉,不能和系统起冲突
作者: 黄玉昆    时间: 2013-3-2 19:54
看来这个涉及到了编码表的知识了。有待我研究研究了。




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