Java中的可执行注释

注释是一种不由编译器或解释器执行的语句,但在编译器中对程序进行词法转换之前,程序的内容被编码为ASCII,以便于处理。考虑这个项目:

null

class Main{
public static void main(String[] args) {
// The comment below is magic..
// u000d System.out.println("Geek Comment Executed!");
}
}


此代码将被成功执行和编译以生成输出。 输出

Geek Comment Executed!

这成功地产生了这个输出,因为java编译器在词法转换之前将Unicode字符u000d解析为新行,程序被转换为:

class Main{
public static void main(String[] args) {
// The comment below is magic
//
System.out.println( "Geek Comment Executed!" );
}
}


Unicode字符将print语句移到下一行,然后像普通java程序一样执行。因此,问题出现了,为什么Unicode转义的翻译会在任何其他源代码处理之前发生?

1.Java源代码可以用任何编码编写,这种编码允许字符串、文字和注释中的大量字符。 1.它使基于ASCII的工具更容易处理。 2.这保证了java平台依赖性,即独立于支持的字符集。 3.这有助于用非拉丁语记录代码。

能够在文件中的任意位置写入任何Unicode字符是一个不错的特性,但它可以以如此微妙的方式干扰语义,这只是一个副作用。

让我们考虑一下这个java程序:

u0070u0075u0062u006cu0069u0063u0020u0020u0020u0020
u0063u006cu0061u0073u0073u0020u0055u0067u006cu0079
u007bu0070u0075u0062u006cu0069u0063u0020u0020u0020
u0020u0020u0020u0020u0073u0074u0061u0074u0069u0063
u0076u006fu0069u0064u0020u006du0061u0069u006eu0028
u0053u0074u0072u0069u006eu0067u005bu005du0020u0020
u0020u0020u0020u0020u0061u0072u0067u0073u0029u007b
u0053u0079u0073u0074u0065u006du002eu006fu0075u0074
u002eu0070u0072u0069u006eu0074u006cu006eu0028u0020
u0022u0048u0065u006cu006cu006fu0020u0077u0022u002b
u0022u006fu0072u006cu0064u0022u0029u003bu007du007d


输出:

Hello World

此unicode程序将转换为其代表值,以生成“Hello World” 参考 https://stackoverflow.com/questions/30727515/why-is-executing-java-code-in-comments-with-certain-unicode-characters-allowed?newsletter=1&nlcode=222379%7C1266

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享