Java反射机制详解:从classLoader到反射机制再到抽象工厂设计模式
来源:互联网 发布:多益网络发展 编辑:程序博客网 时间:2024/06/06 09:35
一 classLoader类装载机制
参考:http://www.zuidaima.com/share/1774052029516800.htm
classLoader 的层次关系:每一个classLoader都有一个parent的引用指向其"parentClassLoader" ,这是对象的关系,而不是继承(类的关系)
1.Bootstrap ClassLoader/启动类加载器主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作。
2.Extension ClassLoader/扩展类加载器 主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作
3.System ClassLoader/系统类加载器 主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作。
4.User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类) 在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性。
package com.ClassLoader;public class ClassLoaderTest { public static void main(String args[]){ ClassLoader loader = ClassLoaderTest.class.getClassLoader(); while(loader!=null){ System.out.println(loader.getClass().getName()); loader = loader.getParent(); } }}output:
sun.misc.Launcher$AppClassLoadersun.misc.Launcher$ExtClassLoader
appClassLoader的"ParentClassLoader" 为extentionClassLoader,而extentionClassLoader的则为BootStratClassLoader
一般的采用双亲委托模式,多线程中的,线程上下文模式。
主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作。
主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作。
主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作。
在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性。
二反射机制
Java反射机制可以动态的获取一个类中的域,方法名,动态的调用该方法
package com.yb;public class Factory {private int age;private String name;Factory(){}public void info(int a,String n){age=a;name = n;System.out.println("Hello,I am Factory :"+name+"My age is "+age);}Factory(int a,String n){age=a;name = n;System.out.println("Hello,I am Factory :"+name+"My age is "+age);}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}package com.yb;import java.lang.reflect.*;public class Test {public static void main(String[] args) {try {Class c = Class.forName("com.yb.Factory");Object o = c.newInstance();Method methods[] =c.getMethods();for(Method m : methods){System.out.println(m.getName()); if(m.getName()=="info"){ m.invoke(o,1,"yubin"); System.out.println(m.getReturnType().getName()); for(Class al : m.getParameterTypes()) System.out.println(al.getName()); }}}catch (ClassNotFoundException e) {e.printStackTrace(); }catch (InstantiationException e) {e.printStackTrace();}catch (IllegalAccessException e) {e.printStackTrace();}catch (IllegalArgumentException e) {e.printStackTrace();}catch ( InvocationTargetException e) {e.printStackTrace();}finally{System.exit(0);} }}
0 0
- Java反射机制详解:从classLoader到反射机制再到抽象工厂设计模式
- 从代理模式到Java反射机制
- 从代理模式到Java反射机制
- Java反射机制 -工厂设计模式
- java反射机制-工厂设计模式
- java中的反射三(反射机制深入---工厂设计模式)
- 设计模式之用反射机制改进的抽象工厂
- Java实现抽象工厂模式+java的反射的机制
- java中的设计模式(三)--抽象工厂模式 反射机制
- 16---java反射机制06(工厂设计模式)
- 简单工厂设计模式-反射机制
- JAVA反射机制之ClassLoader
- [转] Java的反射机制+工厂模式
- java反射机制及简单工厂模式
- java反射机制工厂模式的应用
- Java 文件反射机制 工厂模式
- Java反射机制与工厂模式
- 从C++函数指针到Java反射机制
- 无监督特征学习——Unsupervised feature learning and deep learning
- 移除一个数组中第一个负数后的所有负数
- Linux/Ubuntu上使用Qt Creator创建非Qt项目
- opencv 人脸识别 (一)训练样本的处理
- OpenGL导入DeepExploration文件的若干问题
- Java反射机制详解:从classLoader到反射机制再到抽象工厂设计模式
- java设计模式
- HDU2553 N皇后问题(回溯+打表)
- opencv 人脸识别 (二)训练和识别
- 决策树Decision Tree 及实现
- LeetCode230 Kth Smallest Element in a BST
- Linux信号实践(3) --信号内核表示
- oc新手学习细节之点语法连用理解
- (maven)Missing artifact