今天主要内容:反射及代理
//能过类名来动态加载一个类
Class cls = Class.forName("");
//调用类的缺少构造方法创建一个实例
Object str = cls.newInstance();
Monthod method = cls.getMethod("lenth",null);
//像PAKEAGE,FIELD,MOTHOD这些都是
如:
add(int x);
add(int x,int y);
add(String x,String y);
//Class.getMethod方法的时候接受哪些参数,方法名,同名的方法有多个,怎么识别出哪一个呢?靠参数类型和个数,参数类型用什么表示
如:INT.CLASS 表示INT类型的CLASS,(INT[]).CLASS 注意这样是错误的:int [] ints = new int[0]; ints.getClass();
Method method = cls.getMethod("add",String.class,String.class);
Object obj = method.invoke(cls.newInstance(),"abc","def");
//如果方法没有返回值,则OBJ=NULL如果传入的对象为空,
//第一个参数是这个类的一个对象;第二个对象是这个类型的一个具体的变量值
框架:
框架是一个应用程序的半成品,它提供了可以应用程序之间共享的可复用的公共结构.
框架和工具包的不同之处在于:框架提供了一致的程序结构,而不仅仅是一级工具类
Proxy.getProxyClass方法自动生成一人类的字节码,这个自动生成的类实现若干接口
自己模仿书上写的一个很傻的小例子:(共四个文件)
JoinHandler.java
=======================================================================================
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.logging.Logger;
public class JoinHandler implements InvocationHandler{
Object objJoin;
public JoinHandler(Object objJoin){
this.objJoin=objJoin;
}
public Object invoke(Object proxy,Method method,Object [] args)throws Throwable{
Object obj = null;
try{
System.out.println("字符串正在生成.....");
objJoin = method.invoke(objJoin,args);
System.out.println("字符串生成完毕!!");
}catch(Exception e){
System.out.println(e);
}
return objJoin;
}
}
JoinInterface.java
========================================================================================
public interface JoinInterface{
public void joinString(int []arrTemp);
}
JoinObj.java
========================================================================================
import java.util.*;
public class JoinObj implements JoinInterface{
public void joinString(int[]arrTemp){
int[] arr ={1,3,4};
String temp="";
for(int i=0;i<arrTemp.length;i++){
temp = temp+","+ arrTemp[i];
}
System.out.println (temp);
}
}
JoinTest.java
=========================================================================================
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class JoinTest{
public static void main(String args[]){
int [] abc ={2,2,2};
JoinObj objTemp = new JoinObj();
JoinHandler handler = new JoinHandler(objTemp);
JoinInterface interObj = (JoinInterface)Proxy.newProxyInstance(JoinInterface.class.getClassLoader
(),objTemp.getClass().getInterfaces(),handler);
interObj.joinString(abc);
}
}