又见"神奇"的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..,,我们来看运行结果。




描述一下它的运行过程。也许不正确,也不想坑人,请读者自己甄别。
  1. JVM调用main方法;
  2. 进入if,检测传入的参数是否为null(无输入,传给main方法的参数为空,,记住空不是null,也不是”“,什么都没有),发现args==null 不成立,为false;
  3. 继续 ||(逻辑或)运算,检测new HelloWorld(){{HelloWorld.main(null);}}==null是否为true,调用HellWorld类的无参构造器,接着再调用块,块中为HelloWorld类的静态方法main(null),这时传入了一个为null的参数,进入if,检测传入的参数,会发现args==null成立,条件短路,不再继续判断条件,这时完成第一次打印”Hello “;
  4. 完了吗?没有,第三步只是在检测 || 右边的代码结果是否为true,当然new 的结果会是一个HelloWorld类的实例,不是null,所以结果为false, || 的结果也就为false,运行else之后的代码,打印出"World";
  5. 最后我们就看到了一个"神奇"的"Hello World";
总结出几点:
  1. 一个class中的main方法可以运行多次,声明为 public static只是为了提供给JVM调用,剩下的跟普通的方法几乎一样,也可为其重载为签名不同的main()方法;
  2. || 短路的逻辑或运算,当其左边的条件为true时,不再继续判断,否则继续判断右边;





原创粉丝点击