Java基础知识回顾--反射机制
2016-09-04 08:23
357 查看
Reflection
ClassLoader的类加载机制
并非一次性加载。
需要的时候加载(运行期间动态加载)。
java-verbose:class可以观察类的具体加载过程。
static语句块在加载后执行一次。
dynamic语句块每次new新的对象都会执行,等同于构造方法中语句,用得也比较少。
首先bootstrap class loader把其他的Class loader给load进来,然后不同的class loader去load不同的class。
这里解释一下getParent这个方法不是得到父类,因为他们之间没有继承关系,只是得到加载的顺序,是层次关系。
classloader在load class的时候首先找上一层loader是不是load过了,如果已经load过了就不会再load了,安全性非常好。这样自己写的String.class永远没有机会执行。
ClassLoader的类加载机制
并非一次性加载。
需要的时候加载(运行期间动态加载)。
java-verbose:class可以观察类的具体加载过程。
static语句块在加载后执行一次。
dynamic语句块每次new新的对象都会执行,等同于构造方法中语句,用得也比较少。
首先bootstrap class loader把其他的Class loader给load进来,然后不同的class loader去load不同的class。
public class TestClassLoader { public static void main(String[] args) { ClassLoader cl = TestClassLoader.class.getClassLoader(); while (cl != null) { System.out.println(cl.getClass().getName()); cl = cl.getParent(); } } }
这里解释一下getParent这个方法不是得到父类,因为他们之间没有继承关系,只是得到加载的顺序,是层次关系。
classloader在load class的时候首先找上一层loader是不是load过了,如果已经load过了就不会再load了,安全性非常好。这样自己写的String.class永远没有机会执行。
package yn; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Reflection { /** * @param args * @throws ClassNotFoundException * @throws IllegalAccessException * @throws InstantiationException * @throws InvocationTargetException * @throws IllegalArgumentException */ public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { String str = "yn.T"; Class c = Class.forName(str); Object o = c.newInstance(); Method[] methods = c.getMethods(); for (Method m : methods) { if (m.getName().equals("m")) { m.invoke(o, 1, 2); // 参数是变长的 Class returnType = m.getReturnType(); System.out.println(returnType); for (Class paramType : m.getParameterTypes()) { System.out.println(paramType.getName()); } } } } } class T { static { System.out.println("T loaded.."); } T() { System.out.println("T constructed.."); } public void mm() { System.out.println("mm invoke.."); } public int m(int a, int b) { System.out.println(a + b); return a + b; } }
相关文章推荐
- Java基础回顾 : 反射机制相关知识
- java基础知识—Java中的反射机制
- Java基础知识——反射机制
- java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)
- java基础知识(二)--反射机制
- Java基础知识整理三(反射机制详解…
- java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)
- 吃透Java的反射机制——基础知识总结
- java基础知识巩固-----类加载机制与反射机制
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- java基础知识-反射机制
- java零基础知识回顾(反射)
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- Java基础知识――类装载器与反射机制
- 黑马程序员——java语言基础知识回顾(一)
- java基础知识回顾
- Java基础知识回顾-6
- 黑马程序员——java语言基础知识回顾(二)
- 黑马程序员——java语言基础知识回顾(三)
- JAVA基础--JAVA中的反射机制详解(转)