今天之后,我相信java注释会被编译器执行了:
java代码会被编译器执行吗?
对于这个问题,我相信很多人都会说上一句:
当然不会被执行呀
之前的我也是这么坚定地相信着,因为老师这么说,书上也是这么说的,我坚信任何代码只要加上//就可以完全不管不顾,但是今天遇见的一个bug让我彻底相信,java注释也是会被编译器执行的
bug代码:
if(file.isDirectory()){
loadOne(file);
}else{
//D:\IdeaJava\untitled1\out\production\MySpringIOCProject\com\wql\daoImpl\userDaoImpl.class
String oldpath = file.getAbsolutePath().substring(filepath.length()-1,file.getAbsolutePath().length());
String newpath = oldpath.replaceAll("\\\\",".").replace(".class","");
System.out.println(newpath);
}
可以看到
D:\IdeaJava\untitled1\out\production\MySpringIOCProject\com\wql\daoImpl\userDaoImpl.class
被我添上注释,当我运行包含此注释的代码
idea报错
报错已经很清楚的提示,72行存在错误信息,且是非法的Unicode转义错误
纳尼?我明明将其注释了呀,怎么会这样呢
当我把注释彻底删除掉,再次执行
代码又奇迹般的正常运行,可以肯定,注释中的某些东西绝对影响了编译过程
那么到底是什么东西在持续的产生影响呢?
这是的我准备换个环境运行代码,我将在Eclipse环境下运行代码时,惊奇的发现
在Eclipse的环境下运行可以清楚的发现错误,看到\u报错的时候可能许多朋友已经明白了,\u不是表示16进制的unicode码吗
让我们再进一步,把鼠标移到报错上看看究竟是什么原因
可以看到,真相大白了
本被注释的\untitled中的\u在编译过程被错误的当做unicode码进行了处理,所以产生了报错
原来编译器会在编译其他代码之前先解析 Unicode 字符,而我们的注释中的字符意外的包含了编译器认为应该被解析的Unicode 字符,真是大水冲了龙王庙,一家人不认一家人了
所以,注释也有可能被编译器执行,今天之后,我相信java注释会被编译器执行了,希望大家在编写代码的过程中能够小心一点