JDK1.7之前的Bug之静态代码块

Posted lwl80

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK1.7之前的Bug之静态代码块相关的知识,希望对你有一定的参考价值。

程序的主入口是main方法,但是在jdk1.7之前,可以没有main方法也一样能运行,很是不可思议,到底是什么原因呢?,大家都知道在类中定义了静态代码块的话,是首先执行代码块里的语句的,如果把静态代码块放到了主类中,到底是先执行静待代码块呢还是先执行main方法呢?不用纠结,我来做个试验。

1  static {
2         System.out.println("运行的比main方法还要早");
3     }
4 
5     public static void main(String[] args) {
6         System.out.println("main方法输出语句");
7     }

技术图片

 运行结果是静态代码块比main方法运行的还要提前,既然是这样那把所有要执行的程序直接放到静态代码块里不就可以了吗,就不需要main方法了吧,说实话,比如下面程序在JDK1.7版本之前确实是可以运行的,无需main方法。这个bug在JDK1.7之前都是存在的,但是在JDK1.7之后的版本却无法运行了,这是由于版本升级所解决的问题,这个Bug从1995年开始一直到2012年都是存在的!

技术图片

 

以上是关于JDK1.7之前的Bug之静态代码块的主要内容,如果未能解决你的问题,请参考以下文章

Java之静态代码块

代码静态解析PMD

pmd静态代码分析

jdk1.8新特性 : 接口中可以有普通方法(非静态方法)和静态方法 , 颠覆了之前我的理解 : 接口中只能有共有常量和抽象方法的概念,后面必须要加一句jdk1.7和1..7之前

Java之static静态代码块

面试趣闻之java 代码块 静态代码块 构造方法 执行顺序