赞
踩
一、基本概念
1、JAVA反射机制:指在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
二、开发环境
Windows+Eclipse(Eclipse Java EE IDE for Web DevelopersVersion: Neon.2 Release (4.6.2))+JDK1.8
三、项目创建
1、新建一个Java Project项目(自行百度)。
2、创建要调取的类AnalyticPulsator.java(放src文件夹下的com.edu.ouc.library包下)
package com.edu.ouc.library;
/**
* @author 作者 : jhc
* @version 创建时间:2019年1月25日 上午10:04:12
* 类说明
*/
public class AnalyticPulsator {
public static String GetData(String param1,String param2){
return param1+"@@@@@@@"+param2;
}
}
3、调取设备类主函数MainControl.java(放src文件夹下的com.edu.ouc.main包下)(执行流程是:首先判断是否有AnalyticPulsator类,若没有,则调取jar包,最后将调取的类利用java反射机制调取其方法,并传递参数)
package com.edu.ouc.main; import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; /** * @author 作者 : jhc * @version 创建时间:2019年1月25日 上午9:53:59 类说明 */ public class MainControl { public static void main(String[] args) throws UnsupportedEncodingException { //设备解析类是否存在 boolean ifLibrary =false; Class analyticClass=null; try { analyticClass=Class.forName("com.edu.ouc.library."+"AnalyticPulsator"); ifLibrary=true; } catch (ClassNotFoundException e) { }catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { URLClassLoader urlClassLoader =null; if(!ifLibrary){ //获取数据采集程序所在目录 URL urlPath=MainControl.class.getProtectionDomain().getCodeSource().getLocation(); System.out.println(urlPath.getPath()); //包路径定义 URL url = new URL("file:"+urlPath.getPath()+"/AnalyticPulsator.jar"); //设置类加载器 urlClassLoader = new URLClassLoader(new URL[] { url }); //加载设备数据解析类 analyticClass = urlClassLoader.loadClass("com.edu.ouc.library.AnalyticPulsator"); }else{ //加载设备数据解析类 analyticClass = Class.forName("com.edu.ouc.library."+"AnalyticRoller"); } // 设置需要传递的参数 Object[] parameters = new Object[2]; parameters[0] = "1212"; parameters[1] = "----"; // 设置需要传递的参数类型 Class[] parameterTypes = new Class[2]; parameterTypes[0] = String.class; parameterTypes[1] = String.class; //获取数据解析GetData方法 Method method = analyticClass.getMethod("GetData", parameterTypes); String data; try { //传递参数并执行方法 data = method.invoke(analyticClass.newInstance(), parameters).toString(); System.out.println(data); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
4、运行MainControl.java,结果如下:
备注:
Eclipse导出Jar包方式可自行百度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。