`
QI程序猿
  • 浏览: 17048 次
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java静态代码块加载说明

 
阅读更多

此文参考自:http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html

 

首先是几个静态概念的分析:

 

静态代码块:一般情况下,有些代码在项目启动时就要执行,需要使用静态代码块,这种代码是主动执行的。

 

静态方法:在项目启动的时候初始化,在不创建对象的情况下,其他程序来调用,被动执行,静态方法在类加载的时候,就已经加载。在静态方法中,不能直接访问其非静态成员,静态方法不能以任何方式引用this和super关键字。

 

静态变量:静态变量是属于整个类的变量而不是属于某个对象的变量,不能把任何方法内的变量声明为静态

 

类装载的步骤:

类装载器把一个Java类装入虚拟机中,需要三个步骤来完成:装载、链接和初始化,其中链接又可以拆分为检验、准备和解析三步,除了解析外,其他步骤都是严格按照顺序完成的,各个步骤的主要工作如下。

 

装载:查找和导入类或接口的二进制数据;

链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;

校验:检查导入类或接口的二进制数据的正确性;

准备:给类的静态变量分配并初始化存储空间;

解析:将符号引用转成直接引用;

初始化:激活类的静态变量的初始化Java代码和静态代码块。

初始化类中属性是静态代码块的常用用途之一,但只能使用一次。

 

对象的初始化顺序,首先执行父类静态的内容,父类静态的内容执行完毕后,接着执行子类静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行(父类比子类先执行),接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。

分享到:
评论

相关推荐

    java 静态代码块通过类加载器获取资源文件例子

    本案例是一个通过静态代码块获取资源属性文件的代码块,从而来提高应用性能。。

    java 代码块与静态代码块加载顺序

    主要介绍了java 代码块与静态代码块加载顺序的相关资料,需要的朋友可以参考下

    Java静态代码块加载驱动代码实例

    主要介绍了Java静态代码块加载驱动代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java:静态代码块和构造函数执行顺序

     1 静态变量,静态代码块(类加载时执行,类不加载不执行)  2 实例变量,实例代码块(创建对象时才执行,不创建对象不执行)  3 构造函数,(创建对象时执行完2后再执行构造函数,不管构造函数是public还是private...

    Java基础之代码块.docx

    块{} : 是一个作用域 {}写在方法中:普通语句块|局部代码块 执行时机:方法调用时候 {}写在类中方法外:构造块 执行时机:创建对象时 static{}写在类中方法外:静态块 执行时机:类加载

    java代码-日常练习33,代码块### 静态代码块 static{代码内容;} 随着类的加载就执行一次 构造器代码块 {代码内容;} 每创建对象就执行一次 局部代码块 {代码内容;} 方法执行一次执行一次

    java代码-日常练习33,代码块### 静态代码块 static{代码内容;} 随着类的加载就执行一次 构造器代码块 {代码内容;} 每创建对象就执行一次 局部代码块 {代码内容;} 方法执行一次执行一次

    Java加载properties文件实现方式详解

    主要介绍了Java加载properties文件实现方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java连接SqlServer完整代码,工具类,jdbc

    //Driver是静态代码块,类加载了就执行,用registerDriver会二次注册 //DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.**SQLServerDriver**()); ``` 3.使用properties配置文件 1.在src低下声明一...

    java三大特性说明

     对于由final static共同修饰的变量,赋值的机会有两个,一是在声明的时候,二是在静态代码块中,两次机会有且只能有一次被选择.   继承:  允许存在父子类的关系,一个子类有且只有一个直接的父类(Java中的继承...

    JVM类加载机制1

    1. 类的静态变量 2. 类的静态代码块 3. 类的静态变量 4. 类的静态代码块 5. 类的静态变量 6. 类的静态代码块 7. 类的构造法 8. 类的静态变

    杰普学习corejava总结笔记

    执行静态代码块 3.分配内存空间,同时初始化非静态的属性(赋默认值) 4.调用父类构造器(注意调用父类构造器之前已经给父类的非静态的属性显示赋值,如果有显示赋值的话) 5.父类构造器执行完后,如果自己声明属性的...

    DruidJDBCUtils.java

    //静态代码块加载配置文件 static { try { Properties prop = new Properties(); InputStream is = DruidJDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"); prop.load(is); ...

    JAVA编写飞机大战-千锋实训项目

    飞机大战的需求: ​ 1.游戏可以产生: 小敌机/大敌机/小蜜蜂 -> 随机(概率)产生 ​ 2.跟鼠标相关的操作: ​ a....加载(读取)图片 -> static{} -> 静态代码块,需要静态成员变量 b.获取父类中的成员变量

    链接器和加载器.PDF(链接器和加载器 Beta 2)

    ◆解释了Java链接模式,以及它是如何应用在网络小应用程序和可扩展Java代码中的。 ◆帮助你编写更优雅、更高效的代码,以及构建能够被更加高效地编译、加裁和运行的应用程序。 ◆包含了一个用Perl构建链接器的练习...

    JAVA基础课程讲义

    静态初始化块(经常用来初始化类,加载类信息时执行!) 67 package 68 JDK中的主要包 68 import 68 eclipse的使用 69 继承(extend, inheritance) 70 为什么需要继承?继承的作用? 70 继承介绍 70 如何实现继承? ...

    JAVA面试题最全集

    找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中需要处理HTML标记时,应做什么样的处理,要筛选那些字符(< > & “”) 3.在...

    JVM

    **注意:**类加载的时候,也就是new对象时,加载顺序是:静态代码块,构造块,构造方法。其中静态代码块只加载一次 – 类加载器: 负责加载class文件,将class文件字节码内容加载到内存中,并将这些内容转换成方法区...

    疯狂JAVA讲义

    1.5.1 编辑Java源代码 12 1.5.2 编译Java程序 13 学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢...

Global site tag (gtag.js) - Google Analytics