静态代码块在类被初始化时加载

public class Ju06_clazz {
    public static void main(String[] args) {
        String name = "com.base.clazz.A";
        try {
            //- 会初始化,等同于Class.forName(name),加载静态代码块
            Class.forName(name, true, A.class.getClassLoader()); 
            //- 不初始化,不会加载动态代码块
            Class.forName(name, false, A.class.getClassLoader()); 
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

class A{
    static{
        System.out.println("A static block.");
    }
}

详见:http://www.cnblogs.com/ivanfu/archive/2012/02/12/2347817.html


当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载,连接,初始化三个步骤来对该类进行初始化,JVM将会连续完成这三个步骤,也把这三个步骤统称为类加载或类初始化。
类加载指的是将类Class文件读入内存,并为之创建一个java.lang.Class对象,也就是说程序使用任何类时,系统都会为之建立一个java.lang.Class对象
类是某一类对象的抽象,类是概念层次的东西,但类也是一种对象,每个类是一批具有相同特征的对象的抽象,而系统中所有类,它们实际上也是对象,都是java.lang.Class的实例
类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器,开发者也可以通过继承ClassLoader基类来创建自己的类加载器
通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来源:
1.从本地文件系统来加载Class文件,这是大部分实例程序的类加载方式
2从jar包中加载class文件,如JDBC编程时用到的数据库驱动类就是放在jar文件中,JVM可以从jar文件中直接加载该Class文件
3.通过网络加载class文件
4.把一个java源文件动态编译,并执行加载。

你可能感兴趣的:(Java基础)