当前位置:   article > 正文

JAVA反射机制调用类或JAR包_java jar包运行后,调用另一个jar包中的类 反射

java jar包运行后,调用另一个jar包中的类 反射

一、基本概念
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;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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();
		}
	}
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88

4、运行MainControl.java,结果如下:
Java反射机制调用结果
备注:
Eclipse导出Jar包方式可自行百度。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号