java反射测试代码!枚举测试,beanUtils测试等....挺有用的。。。

java反射测试代码!枚举测试,beanUtils测试等....挺有用的。。。

完整通过反射自定义框架请看别一个博客:http://blog.csdn.net/liangrui1988/article/details/9348299

jjava加强课程测试代码 反射、 代理 、泛型、beanUtils等 项目源码下载:http://download.csdn.net/detail/liangrui1988/6568169

部分代码:

package com.zhang.test;

import java.lang.reflect.Method;

public class MethodTest {
	public static void main(String[] args) throws Exception {
		
		System.out.println("hello....");
		//参数,类完整路径
		String startClassName=args[0];	
		//startClassName="com.zhang.test.TestReflect";
		//获得startClassName方法 main
		Method method=Class.forName(startClassName).
				getMethod("main",String[].class);
	
	//调用方法
	method.invoke(null, new Object[]{new String[]{"123","3333"}});
	}


}


//
class TestReflect{
	public static void main(String[] args){
		for(String a:args){
			System.out.println(a);
		}
		
	}
}	


package com.zhang.test;

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class GenericityTest {
	
	public static void main(String[] args) throws SecurityException, NoSuchMethodException {
		Beans be=new Beans();
		
		List<Beans> list=new ArrayList<Beans>();
		//能过反射获原方法,
		Method m=GenericityTest.class.getMethod("getGenricType", List.class,Date.class);
		//获取方法泛型内型
		Type[] t=m.getGenericParameterTypes();
		//获取第一个参数 内型
		 ParameterizedType  p =(ParameterizedType) t[0];
		//获取方法参数原生内型  (集合)
		 System.out.println(p.getRawType());
		//获取集合泛型的内型 
		 System.out.println(p.getActualTypeArguments()[0]);
		 //得到参数内型中的泛型内型
		 Type type= p.getActualTypeArguments()[0];
		
		  System.out.println(be.getClass()); 
		 
		  //通过反射获取的集合泛集内型和对象内型比较,是一样的
		 if(be.getClass()==type){
			 System.out.println("======");
		 }
		 
		
	}
	
	public void getGenricType(List<Beans> list,Date d){
		
		
		
	}
	
	public void getGenricType2(Date d){
			
			
			
		}

}

package com.zhang.test;

public class HashCodeTest {
	
	String x="aq";
	String y="bb";
	
	int xx;
	int yy;
	
	
	
	
	public static void main(String[] args) {
		
		
	}


	public HashCodeTest(int xx, int yy) {
		this.xx = xx;
		this.yy = yy;
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((x == null) ? 0 : x.hashCode());
		result = prime * result + xx;
		
		System.out.println("result:"+result);
		return result;
	}


	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		HashCodeTest other = (HashCodeTest) obj;
		if (x == null) {
			if (other.x != null)
				return false;
		} else if (!x.equals(other.x))
			return false;
		if (xx != other.xx)
			return false;
		return true;
	}


	public String getX() {
		return x;
	}


	public void setX(String x) {
		this.x = x;
	}


	public String getY() {
		return y;
	}


	public void setY(String y) {
		this.y = y;
	}


	public int getXx() {
		return xx;
	}


	public void setXx(int xx) {
		this.xx = xx;
	}


	public int getYy() {
		return yy;
	}


	public void setYy(int yy) {
		this.yy = yy;
	}

	
	
	
	
	

}

package com.zhang.test;

import java.util.Collection;
import java.util.HashSet;

public class HashMian {
	public static void main(String[] args) {
	
		HashCodeTest h1=new HashCodeTest(2,3);
		HashCodeTest h3=new HashCodeTest(6,7);
		HashCodeTest h4=new HashCodeTest(6,7);
		
		Collection c=new HashSet();
		c.add(h1);
		c.add(h3);
		c.add(h4);
	    c.add(h1);
	    
		//没有实现hashCode就等于3 因为他把HashSet分了若干个区
		//当值去做比较时,他是相据hashCode算出区找值比较,发现没有就存下来了
		
		System.out.println(c.size());
	    
		//实现hashCode 当值发生改变时,集合不会删掉
	    //因为在删除时它去找hashCode的值,发现没有了(h1已改变)
	    //会造成内存泄露
	    h1.xx=100;	    
	    c.remove(h1);
	    
	
		System.out.println(c.size());
		
		
	}

}

package com.zhang.test;

import java.beans.PropertyDescriptor;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Map.Entry;
import java.util.Properties;

public class LoadProperties {
	
public static void main(String [] args) throws Exception {
	// TODO Auto-generated method stub

	InputStream is=new FileInputStream("config.properties");
    //k=v 集合
	Properties pt=new Properties();
	//加载文件 得到集合中
	pt.load(is);
	is.close();
	for(Entry e:pt.entrySet()){
		System.out.println(e.getKey()+": "+e.getValue());
		
	}
	
    System.out.println("key1: ="+pt.get("key1"));
    
    //加载文件 到流中 在class目录下 查找你要加载的文件
   // InputStream  ips= LoadProperties.class.getClassLoader().getResourceAsStream("com/zhang/test/config.properties");
  
    //相对路径中查找文件
    InputStream  ips= LoadProperties.class.getResourceAsStream("config.properties");
	Properties pt2=new Properties();
	//加载文件 得到集合中
	pt2.load(ips);
    System.out.println("key2: ="+pt2.get("key2"));

    //内省 获取属性的方法 读取值
    HashCodeTest hct=new HashCodeTest(5,6);
    
    
    String field="xx";
    //字段 》 对象字节码
    PropertyDescriptor pd=new PropertyDescriptor(field,hct.getClass());
    
    Method m=pd.getReadMethod();//只读方法
    Object reflctValue=m.invoke(hct);//调用 对象中的方法
    //获得方法返回结果
    System.out.println(reflctValue);
    
    //获取xx写的方法
    Method m2=pd.getWriteMethod();
    m2.invoke(hct, 88);
    
   System.out.println(hct.getXx());
    
}

}


//枚举测试


package com.emun.test;

public abstract class WeekDay {
	
	private WeekDay(){}
	
	//内部类实现
	public final static  WeekDay SUN=new WeekDay(){
		//重写父类的方法
		@Override
		public WeekDay nextWeekDay() {
			
			return MON;
		}
		
	};
    public final static WeekDay  MON=new WeekDay(){
    	//重写父类的方法
		@Override
		public WeekDay nextWeekDay() {
			// TODO Auto-generated method stub
			return SUN;
		}
    	
    };
    
    
    
    //抽象方法
    public abstract WeekDay  nextWeekDay();
    /*
    public WeekDay  nextWeekDay(){
      if(this==SUN){
    	  return MON;
      } else if(this==MON){
    	  return SUN;
      }else{
    	  return null;
      }   	
    }*/
    
    
    //覆盖toString
    public String toString(){ 
    	//如果对象为sun 就转换为字符串
    	return this==SUN?"SUN":"MON";
    }
    
    
    // 内部类  枚举,红,绿,黄,灯
    public  enum  TrafficLamp{
    	RED{
           //内部类重写父类的抽像方法
			@Override
			public TrafficLamp nextLamp() {
				//红灯下一个是绿灯
				return GREEN;
			}
    		
    	},
    	GREEN{
			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return YELLOW;
			}
    		
    	},
    	YELLOW{
			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return RED;
			}
    		
    	};
    	
        //下一个灯
        public abstract TrafficLamp nextLamp();
    	
    }
    

    
}


package com.emun.test;

public class WeekdayTest {

	
	public static void main(String [] args) {
		
		System.out.println("下一个是:"+WeekDay.MON.nextWeekDay());
		
		
		System.out.println("绿灯下一个是:"+WeekDay.TrafficLamp.GREEN.nextLamp());

	}
}

beanUtils测试:

beanUtils jar下载地址:http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi

package com.beanUtilsTest;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;


import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;

import com.zhang.test.Beans;



public class BeanUtilsTest {
	
	public static void main(String[] args) throws Exception{
		Beans bean=new Beans();
		
		bean.setName("dd");
		System.out.println(bean.getClass());
		
		//BeanUtils获得对象的值 
		String s=BeanUtils.getProperty(bean, "name");
		System.out.println(s);
		
		//BeanUtils设值对象的值     都 以String内型
		BeanUtils.setProperty(bean, "id",88);
		System.out.println("id:"+bean.getId());
		//必须是原始内型
		PropertyUtils.setProperty(bean, "id","99");
		System.out.println("id:"+bean.getId());
		
		//设置map值
		Beans beanMap=new Beans();
		Map<String,String> map=new HashMap<String,String>();
		/*map.put("id", "66");
		map.put("name","hello");*/
		
		BeanUtils.setProperty(map, "id", "55");
		BeanUtils.setProperty(map, "name", "hello");
		//读取map
		Iterator i=map.keySet().iterator();		
		while(i.hasNext()){			
			System.out.println("i:"+map.get(i.next()));
		}
		
		//方式二
		for(Entry<String,String> e:map.entrySet()){
			System.out.println("方式二k:"+e.getKey());
			System.out.println("方式二v:"+e.getValue());
			
		}
		
		
		
		//把map转为bean
		BeanUtils.populate(beanMap, map);
		System.out.println("beanMap:"+beanMap.getId()+"\t"+beanMap.getName());
		//把bean转为map
		//Map m=BeanUtils.describe(bean);
	
		
		
//=================================================================	
	/**
	 * 基本内型
	 *  double,float,int,short,boolean,byte,char,long
	 * 
	 */
		//获得对象
	    Object obj=bean.getClass().newInstance();
	   //反射得到字段
	   Field s2=bean.getClass().getDeclaredField("name");
	   s2.setAccessible(true);
	   //设值
	   Object value="小明";
	   
	   //获得字段的内型
	   String fType=s2.getType().getSimpleName();
	   System.out.println("fType:"+fType);
	   
	   //如是都 是String
	   if(fType.equals("String")){
		   if(value instanceof String){
			   s2.set(obj, value);
		   }
		   //如是其它的这样需转换
		   if(value instanceof Long){
			   s2.set(obj, value.toString());
		   }
		   
	   }
	   //其它类型都需这样判断。。。。。。。。
	   
	   Beans reBeans=(Beans) obj;
	 System.out.println("通过反射对对象成功设值: "+reBeans.getName());
	 
	
	}

}


//代理测试


package com.proxyTest;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;

public class ProxyTest {
	
	public static void main(String[] args) {
		
		//获取代理字节码
		Class clazzProxy=Proxy.getProxyClass(Connection.class.getClassLoader(),Connection.class);
		
		System.out.println(clazzProxy.getName());
		System.out.println("-----------Proxy构造方法列表------------");
		Constructor[] constructor=clazzProxy.getConstructors();
		
		for(Constructor con:constructor){
			//get名称
			String conName=con.getName();
			
			//接接参数
			StringBuilder sb=new StringBuilder(conName);//单线程 快 
			sb.append('(');
			//get 获得参数类型的字节码
			Class[] paraClass=con.getParameterTypes();
			for(Class c:paraClass){
				//获取参数
				sb.append(c.getName()).append(',');
			}
			
			if(paraClass!=null&¶Class.length!=0)
			sb.deleteCharAt(sb.length()-1);
			
			sb.append(')');
			
			System.out.println(sb.toString());
		}
		
		
System.out.println("\n================Proxy方法列表=============================");
				
		Method[] methods=clazzProxy.getMethods();
		
		for(Method me:methods){
			//get名称
		String conName=me.getName();
		
		//接接参数
		StringBuilder sb=new StringBuilder(conName);//单线程 快 
		sb.append('(');
		//get 获得参数类型的字节码
		Class[] paraClass=me.getParameterTypes();
		for(Class c:paraClass){
			//获取参数
			sb.append(c.getName()).append(',');
		}
		
		if(paraClass!=null&¶Class.length!=0)
		sb.deleteCharAt(sb.length()-1);
		
		sb.append(')');
			
			System.out.println(sb.toString());
		}
				
			}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值