有人可以解释类加载和实例化类之间的区别.当我们使用Static变量加载一个类时,它是否也在Class加载的同时实例化?毕竟静态代码是类的一部分而不是它的个别实例.如果有人提供了一个例子来帮助我更好地理解这一点,那将会很有帮助.
Sur*_*tta 10
这是一个很好的解释(有一个例子和观察)
在Java中加载Class时
类加载由Java中的ClassLoaders完成,只要另一个类引用它或者延迟加载类直到需要进行类初始化,就可以实现类加载类.如果Class在实际使用之前加载,它可以在初始化之前就位于内部.我相信这可能会有所不同,从JVM到JVM.虽然JLS保证在需要静态初始化时会加载一个类.
在Java中初始化类时
在Java中初始化类之后在类加载之后,会发生类的初始化,这意味着初始化类的所有静态成员.在以下情况下,Java在Java中初始化:
1)使用new()关键字或使用class.forName()的反射创建类的实例,这可能会在Java中抛出ClassNotFoundException.
2)调用Class的静态方法.
3)分配类的静态字段.
4)使用类的静态字段,它不是常量变量.
5)如果Class是顶级类,则执行词法嵌套在类中的断言语句.
希望有所帮助.
Integer.toString(123);
Run Code Online (Sandbox Code Playgroud)
对于上面的静态方法调用,必须加载Integer类.
Integer i = new Integer(123);
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我创建了一个Integer类的实例(对象)(显然也必须加载它才能使其工作).
某些类不是要实例化的(例如,Math类,它只有静态方法).
| 归档时间: |
|
| 查看次数: |
6894 次 |
| 最近记录: |