今天之后,我相信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报错

java注释自动出现时间作者 java注释会被编译吗_java


报错已经很清楚的提示,72行存在错误信息,且是非法的Unicode转义错误

纳尼?我明明将其注释了呀,怎么会这样呢

当我把注释彻底删除掉,再次执行

java注释自动出现时间作者 java注释会被编译吗_经验分享_02


代码又奇迹般的正常运行,可以肯定,注释中的某些东西绝对影响了编译过程

那么到底是什么东西在持续的产生影响呢?

这是的我准备换个环境运行代码,我将在Eclipse环境下运行代码时,惊奇的发现

java注释自动出现时间作者 java注释会被编译吗_编译器_03

在Eclipse的环境下运行可以清楚的发现错误,看到\u报错的时候可能许多朋友已经明白了,\u不是表示16进制的unicode码吗

让我们再进一步,把鼠标移到报错上看看究竟是什么原因

java注释自动出现时间作者 java注释会被编译吗_java_04

可以看到,真相大白了
本被注释的\untitled中的\u在编译过程被错误的当做unicode码进行了处理,所以产生了报错

原来编译器会在编译其他代码之前先解析 Unicode 字符,而我们的注释中的字符意外的包含了编译器认为应该被解析的Unicode 字符,真是大水冲了龙王庙,一家人不认一家人了

所以,注释也有可能被编译器执行,今天之后,我相信java注释会被编译器执行了,希望大家在编写代码的过程中能够小心一点