Loading

Java反射机制

 
 
 
 
 
 
 
 
 
 
 
 
9.
 
 
 
 
 
 
 
 
 
 
 
 
 
8.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7.
 
 
 
 
 
 
 
 
 
 
 
6.
通过反射,可以在运行的时候,了解一个类的内部。
 
 
 
 
 
 
 
 
 
5.
可变参数    的方法 (可以 传零个,或多个)
 
 
 
 
 
 
 
 
 
 
4.
反射:

 

站在ClassLoader的角度来说,每个被load进来的class都是一个class对象。(类里的方法、参数、属性也都是)
 
java.lang.reflect
属性         Field        
方法         Method   
 
  • 反射:运行期间,动态地加载一个类,动态地new 一个对象,动态地调用类的方法。
  • (在配置文件里)
 
  • Class c = Class.forName(str):  名字叫str的类,load进来。返回一个Class对象。
  • Object o = c.newInstance();
  • Method[] methods = c.getMethods();
 
  • 如何调用str类里的方法?
    • getName
    • invoke(o)
 
 
 
 
3.

 

 
getParent()是指:指向内存里的  parent的   class loader 对象。
 
bootstrap, ext class loader , app class loader, otherw这些  对象  之间,
可以认为,对象内里有一个引用,指向上一层的class loader。
 
加载的过程:加载的时候,先找它的parent class loader,看parent有没有加载,parent加载了,它就不会再加载。
 
安全性好:
自己写的String.class永远没机会执行。
 
 
 
 
 
 
2.

 
1. JDK里的class loader不止一个。
2. bootstrap class loader(是对象)。最顶层的。用c/c++或汇编写的。无名。
            load String的核心类。
            其它class loader是java写的。
2.5. extension扩展类的loader。jre/lib/ext/*
3. SystemClassLoader就是application class loader
4.           other
5.过程:bootstrap class loader把 其它class loader载入。然后,其它的class loader 再把需要的  类 载入进来。
 
 
 
1.

 

 
1.  需要的时候加载
2.  static语句块在加载后执行次。  static { xxx }
3.  dynamic语句块 { xxx } 用的。无条件的加载在每个constructor的前面。
4.  java -verbose:class ***

 
 
 
 
 
 




posted @ 2013-10-27 09:53  asashadow  阅读(182)  评论(0)    收藏  举报