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

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

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

JDK1.7之前的Bug之静态代码块的更多相关文章

  1. Java的静态代码块是否会在类被加载时自动执行?

    JAVA静态代码块会在类被加载时自动执行? 一.先看Java静态方法,静态变量 http://www.cnblogs.com/winterfells/p/7906078.html 静态代码块 在类中, ...

  2. 【code block】局部代码块+构造代码块+静态代码块

    1.局部代码块 位置:位于类的方法中 表示方法:{} 作用:控制变量的生命周期,减少内存消耗 demo: public class LocalCode { public static void mai ...

  3. About 静态代码块,普通代码块,同步代码块,构造代码块和构造函数的纳闷

    构造函数用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种.特点:1:该函数的名称和所在类的名称相同.2:不需要定义返回值类型.3:该函数没有具体的返回值.记住:所有对象创 ...

  4. 10、代码块、构造代码块、静态代码块及main方法之间的关系

    1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...

  5. Java static 静态代码块执行分析

    假设有这样一个类: public class Utils { static { Log.i("static","isLoad!"); } public stat ...

  6. Java中普通代码块,构造代码块,静态代码块区别及代码示例

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 1 //普通代码块 ...

  7. Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序

    //据说这是一道阿里巴巴面试题,先以这道题为例分析下 public class Text { public static int k = 0; public static Text t1 = new ...

  8. Java中普通代码块,构造代码块,静态代码块执行顺序

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 1 //普通代码块 ...

  9. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...

随机推荐

  1. Vue 大量data及rules的data选项结构组织

    如果Vue文件需要很多的data成员及表单验证,建议使用类似结构 export default{ data(){ const model = { username: 'suzhen', passwor ...

  2. cocos-2d解决rapidjson的string参数转换

    解决方法 AddMember的传入的参数不是string, 所以会报错 本质就是把string类型转换成 参数的类型 username = "string"; rapidjson: ...

  3. 虚拟化技术之kvm管理工具virsh常用基础命令(一)

    在上一篇博客中,我们了解了KVM基础架构和部署以及图形管理工具virt-manager安装虚拟机的过程,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13499 ...

  4. 线段树(二)STEP

    线段树(二) 线段树例题整理 Part 1:题面 传送门:https://www.luogu.com.cn/problem/P6492(靠之前传送门放错了,暴露了我在机房逛B站的事实-- Part 2 ...

  5. MapReduce之MapJoin案例

    @ 目录 使用场景 优点 具体办法:采用DistributedCache 案例 需求分析 代码实现 使用场景 Map Join 适用于一张表十分小.一张表很大的场景. 优点 思考:在Reduce 端处 ...

  6. 机器学习 | 详解GBDT在分类场景中的应用原理与公式推导

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...

  7. mongodb在win10下的安装和配置

    一.准备 下载mongodb https://www.mongodb.com/download-center/community 该实例中使用的是:mongodb-win32-x86_64-2008p ...

  8. 【转】Ubuntu下解决Depends: xxx(< 1.2.1) but xxx is to be installed

    在ubuntu下由于更新package不成功,或者误删除了一些文件会出现Depends: xxx(< 1.2.1) but xxx is to be installed解决方法是先试着安装所缺的 ...

  9. 算法-搜索(5)m路搜索树

    动态m路搜索树即系统运行时可以动态调整保持较高搜索效率的最多m路的搜索树.以3路搜索树为例说明其关键码排序关系:   const int MaxValue=; template <class T ...

  10. SPSSAU数据分析思维培养系列2:方法选择篇

    大家好!在上篇文章中,我们一起学习了如何[掌握正确的数据处理思维].在完成数据准备和清理工作后,就要进入到正式分析阶段,而选择什么样的数据分析方法进行分析是关键. 想要进行科学和系统化的数据分析,分析 ...