又见"神奇"的Hello World
来源:互联网 发布:淘宝投诉不成立 申诉 编辑:程序博客网 时间:2024/06/13 22:17
看看这么一段代码。就会发现,Hello World也会如此古怪。
源代码
public class HelloWorld { public static void main(String[] args) { if(args == null || new HelloWorld(){{HelloWorld.main(null);}}==null){ System.out.print("Hello "); }else { System.out.print("World"); } } }
这段代码打印的结果将会是Hello World..,,我们来看运行结果。
![](http://img.my.csdn.net/uploads/201301/08/1357576064_2934.jpg)
描述一下它的运行过程。也许不正确,也不想坑人,请读者自己甄别。
- JVM调用main方法;
- 进入if,检测传入的参数是否为null(无输入,传给main方法的参数为空,,记住空不是null,也不是”“,什么都没有),发现args==null 不成立,为false;
- 继续 ||(逻辑或)运算,检测new HelloWorld(){{HelloWorld.main(null);}}==null是否为true,调用HellWorld类的无参构造器,接着再调用块,块中为HelloWorld类的静态方法main(null),这时传入了一个为null的参数,进入if,检测传入的参数,会发现args==null成立,条件短路,不再继续判断条件,这时完成第一次打印”Hello “;
- 完了吗?没有,第三步只是在检测 || 右边的代码结果是否为true,当然new 的结果会是一个HelloWorld类的实例,不是null,所以结果为false, || 的结果也就为false,运行else之后的代码,打印出"World";
- 最后我们就看到了一个"神奇"的"Hello World";
总结出几点:
- 一个class中的main方法可以运行多次,声明为 public static只是为了提供给JVM调用,剩下的跟普通的方法几乎一样,也可为其重载为签名不同的main()方法;
- || 短路的逻辑或运算,当其左边的条件为true时,不再继续判断,否则继续判断右边;
- 又见"神奇"的Hello World
- 神奇的hello world
- spring step 2 : 又见hello world!
- Android 开发之旅:又见Hello World!
- Android 开发之旅:又见Hello World!
- JMX的Hello World
- Hello World 的故事
- 汇编的HELLO WORLD!
- JAVA 的HELLO WORLD
- 汇编语言的Hello world
- Python 的Hello World
- 千奇百怪的Hello World
- Itouch 的Hello world
- 汇编的hello world
- C++ 的Hello World!!!
- 美丽的“Hello, World”
- hello world的秘密
- C++的Hello World
- Struts 2 学习笔记 - 5.Struts异常处理
- Java简单实现MD5加密
- PHP可变变量的应用思路
- 【李嘉诚】教五年内买车买房——理财篇
- 输出单链表的中间节点
- 又见"神奇"的Hello World
- String s=new String("abc")创建了几个对象?
- 字符指针变量与字符数组的区别
- sharepoint 2010 设置fast子站点母版页
- 搜索文件
- POJ2349 Arctic Network
- 课后总结:1.3_变量和常量
- This generally means that another instance of this process was already running or is hung in the deb
- unsafe指针