了解Java的类装载器(static什么时候初始化)
2017-08-09 17:58
148 查看
我们本篇先了解类装载器的基础,重点说的是:static什么时候初始化**
下一篇我们就可以深入Java的类装载器,我们先看看有几种方法载入类。
一.想必大家都知道用new这个关键字:
B.java文件:class B { static{ System.out.println("--B--"); } public void start() { System.out.println("--start--"); } }
a.java文件:
public class a { public static void main(String [] args) { System.out.println("--a--"); B b=new B(); B c=new B(); } }
我们执行的结果:
强调内容
1.先 javac a.java
2.在 java -verbose a
3.出现了上图,接下来的执行结果也是按这步骤来的
如上图得知:
1.B类new了2个对象,但是只载入一次 2.static区也只初始化一次
2.大家应该也从JDBC中得知用class.forName();
forNama()函数有一个参数的。还有3个参数的,重点就在这里:
1.一个参数的:
a.java文件:
public class a { public static void main(String [] args) throws Exception { System.out.println("--a--"); class.forName("B"); } }
使用class.forNmae要throws 异常
结果:
分析:
1.结果跟上面一样
2.使用forName(“B”,true,a.class.getClassLoader());也跟上面一样
3.使用forName(“B”,false,a.class.getClassLoader());
a.java代码:
public class a { public static void main(String [] args) throws Exception { System.out.println("--a--"); Class.forName("B",false,a.class.getClass.Loader()); } }
结果:
分析:
1.a类,B类载入了,但是st
4000
atic没有初始化???
我们把a.java代码换一下:
public class a { public static void main(String [] args) throws Exception { System.out.println("--a--"); Class c= Class.forName("B",false,a.class.getClassLoader()); B d=(B) c.newInstance();//时例化一个对象 } }
结果:
分析:
1.static的结果出来了,难道static的初始化是第一次实例化的时候吗?? 我们接下来看第3种载入方法,看看是不是这个结果
三.Classloader的loadClass()
a,java的代码:public class a { public static void main(String [] args) throws Exception { System.out.println("--a--"); a.class.getClassLoader().loadClass("B"); } }
结果:
分析:
1.a,B类都载入了,但是static没有初始化,我们现在创建一个对象看看
a.java的代码:
public class a { public static void main(String [] args) throws Exception { System.out.println("--a--"); Class b= a.class.getClassLoader().loadClass("B"); B c=(B) b.newInstance(); } }
结果:
分析:
1.static初始化了
总结:
相关文章推荐
- java--面向对象(static关键字、main、静态什么时候使用、静态代码块、对象的初始化过程)
- [转]java static final 初始化
- Java 中的 static 使用之静态初始化块
- Java static变量初始化顺序引发的bug
- 一个程序带你了解java初始化
- JAVA当中变量什么时候需要初始化?
- Java什么时候用static,public,private,protected?
- JAVA基础学习(六)---面向对象二---static,类的初始化和调用顺序、单例模式
- java什么时候声明static方法
- JAVA当中变量什么时候需要初始化
- Java 中被static 修饰的属性,方法和代码块在什么时候加载
- JAVA当中变量什么时候需要初始化?
- 【java基础】17.10.7:static什么时候使用?有关静态变量(类变量)和静态方法(类方法)的解析
- Java static 变量、方法的什么时候分配内存
- java static final 初始化
- Java Static代码块与构造方法初始化顺序
- JAVA当中变量什么时候需要初始化?
- static 及java初始化顺序
- java学习笔记 类初始化 调用static变量是否会初始化
- Java 什么时候该用static