package 泛型; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.junit.Test; public class Generic泛型出现原因 { @Test public void test() { // 程序员编写代码,忘记所转换的类型,但项目编码时并不报错 /*ArrayList al = new ArrayList(); al.add("123"); Integer num = (Integer)al.get(0); //编码时不出错 System.out.println(num);*/ List<String> list1 = new ArrayList<String>();//声明该集合只能处理String类数据 list1.add("1"); list1.add("2"); list1.add("3"); Iterator<String> it = list1.iterator(); while(it.hasNext()){ String value = it.next(); System.out.println(value); } for(String num : list1){ System.out.println(num); } } @Test public void test2(){ //HashMap可能会导致取的顺序和存入时的顺序不一致,我们可以选择采用LinkedHashMap //购物车用到 // Map<Integer , String> map = new LinkedHashMap<Integer, String>(); Map<Integer , String> map = new HashMap<Integer, String>(); map.put(1, "aa"); map.put(2, "bb"); map.put(3, "cc"); map.put(4, "dd"); map.put(5, "ee"); map.put(6, "ff"); //set具体取出步奏 Set<Entry<Integer, String>> set = map.entrySet(); Iterator<Entry<Integer, String>> it = set.iterator(); while(it.hasNext()){ Entry<Integer,String> e = it.next(); Integer key = e.getKey(); String value = e.getValue(); System.out.println("key:"+key+" value:"+ value); } //增强for循环取出元素 for(Entry<Integer,String> e : map.entrySet()){ Integer key = e.getKey(); String value = e.getValue(); System.out.println("key:"+key+" value:"+ value); } } }
package 泛型; import org.junit.Test; //自定义泛型方法(自定义泛型类支持单元测试) public class 自定义泛型<T> {//类上面声明的泛型作用在整个类上,但是不作用在STATIC方法上 @Test public void testa(){ //String b = a("aaa"); //System.out.println(b); } //先声明,再使用 public <E,K> T a(T t, E e,K k){ //泛型的本质就是将数据类型也参数化 System.out.println(t); return t; } //先声明,再使用 public T a(T t){ //泛型的本质就是将数据类型也参数化 System.out.println(t); return t; } //编写一个泛型方法实现指定数组元素的交换 public static <T> void change(T[] arr1 ,int m , int n ){ T temp = arr1[m]; arr1[m] = arr1[n]; arr1[n] = temp; } //编写一个泛型方法,颠倒数组元素 public void changAll(T[] arr){ int start = 0; int end = arr.length-1; for(int i=end , j = start ;i > j ; i--,j++ ){ T temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } @Test public void testChange(){ 自定义泛型<String> zdy = new 自定义泛型<String>(); String[] arr = {"1","2","3","4","5"}; zdy.changAll(arr); for(String s : arr) System.out.println(s); } }
package 泛型; import org.junit.Test; public class 泛型类 <T,E>{//自定义泛型类,参数在整个类内有效 public T getT(T t){ return t; } @Test public void test(){ 泛型类<String,Integer> fxl = new 泛型类<String, Integer>(); System.out.println(fxl.getT("adasd")); } }
package 反射reflect; import java.io.InputStream; import java.util.List; public class Person { public String address; public static String Sdept; private int age; private String name; private List list; public Person() { System.out.println("Person无参构造函数被执行"); } private Person(List list) { this.list = list; System.out.println("list私有构造函数"); } public Person(int age, String name) { this.age = age; this.name = name; System.out.println("age:" + age + ",name:" + name); } // --------------------------------------------- public void eat() { System.out.println("eat"); } public void run(String name) { System.out.println("name:" + name); System.out.println("run"); } public Class[] execute(String name, List list) { System.out.println("执行了Excute方法"); return new Class[]{String.class}; } private void excute2(InputStream in){ System.out.println("执行了Excute2方法"); System.out.println(in); } public static void excute3(int num){ System.out.println("执行了Excute3方法"); System.out.println(num); } public static void main(String[] args){ System.out.println("main"); } public void intArr(int[] arr){ for(int i : arr){ System.out.print(i+" "); } } public void StringArr(String[] arr){ for(String s : arr){ System.out.print(s + " "); } } }
package 反射reflect; import org.junit.Test; /* * 加载类 * 反射: * 0.创建xml配置文件 * 1.读取配置文件的配置信息(通常为XML) * 2.加载配置文件中类 * 3.解剖出加载类的属性(封装数据),构造方法(创建对象),方法(执行某一功能) */ public class Demo { @Test public void test() throws ClassNotFoundException{ //加载类 //方法一: Class clazz = Class.forName("myday01.src.反射reflect.Person"); //方法二 Class clazz1 = new Person().getClass(); //方法三 Class clazz2 = Person.class; } }
package 反射reflect; import java.util.List; import java.lang.reflect.Constructor; import java.util.ArrayList; import org.junit.Test; /* * 反射类的构造函数,创建类的对象 */ public class Demo2 { @Test public void test() throws Exception { // 反射无参构造函数,pulic Person(){} // 加载 Class clazz = Class.forName("反射reflect.Person"); // 得到构造函数 Constructor c = clazz.getConstructor(null);// 指定的无参构造函数 // 通过构造函数创建对象 Person p = (Person) c.newInstance(null); } // 反射有参的构造函数 @Test public void test1() throws Exception { Class clazz = Class.forName("反射reflect.Person"); Constructor c = clazz.getConstructor(int.class, String.class); Person p = (Person) c.newInstance(20, "li"); } // 反射私有的构造函数,反射能够做到外部访问私有的构造函数 @Test public void test2() throws Exception { Class clazz = Class.forName("反射reflect.Person"); // getConstructor只能得到public类型的构造方法Constructor c = // clazz.getConstructor(List.class); Constructor c = clazz.getDeclaredConstructor(List.class); c.setAccessible(true);//暴力反射 ,使私有的构造函数能够外部访问 Person p = (Person) c.newInstance(new ArrayList()); } //创建对象的最简单途径(和第一中方法是一样的,默认调用无参构造函数) @Test public void test3() throws Exception{ Class clazz = Class.forName("反射reflect.Person"); Person p = (Person) clazz.newInstance(); } }
package 反射reflect; import java.util.List; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Method; import java.util.ArrayList; import org.junit.Test; //反射类的方法 public class Demo5反射Method { @Test public void test() throws Exception{ Person p = new Person(); Class clazz = Class.forName("反射reflect.Person"); Method m = clazz.getMethod("eat",null); //得到方法名称为eat的方法,指定其参数为null m.invoke(p, null); //对象p的方法执行,参数为空 //反射普通类型 Method m2 = clazz.getMethod("run", String.class);//得到方法名称为run的方法,指定其参数类型为String类型 m2.invoke(p, "lj");//p对象执行此方法,参数名称为"lj" //反射String和List类型 Method m3 = clazz.getMethod("execute", String.class , List.class); m3.invoke(p, "lj",new ArrayList()); //反射InputStream类型 Method m4 = clazz.getDeclaredMethod("excute2", InputStream.class); m4.setAccessible(true); m4.invoke(p, new FileInputStream("d://a.txt")); //反射静态方法的类 Method m5 = clazz.getMethod("excute3", int.class); m5.invoke(null, 10);//静态对象在调用时候不需要对象,其他参数和反射普通方法并没有啥区别 //反射main方法 Method mm = clazz.getMethod("main", String[].class); mm.invoke(null,(Object)new String[]{"123"}); //JDK1.4并不存在可变参数(传递多个参数都是采用数组的形式来实现), //JDK1.5为了兼容1.4版本,把数组类参数在反射时都会拆成数组元素个数的参数来传递, //反射数组类型数据时,都可以先强制转换为Object类型来做 //反射整型数组 Method marr = clazz.getMethod("intArr",int[].class); marr.invoke(p, (Object) new int[]{1,2,3,4,5});//int数组类型测试过,不强转也是可以的 //反射字符数组 Method intrr = clazz.getMethod("StringArr", String[].class); intrr.invoke(p, (Object)new String[]{"1","2"});//String数组类型必须强转 } }
package 反射reflect; import java.util.List; import java.lang.reflect.Field; import java.util.ArrayList; import org.junit.Test; public class Demo6反射字段 { @Test public void test() throws Exception{ Person p = new Person(); Class clazz = Class.forName("反射reflect.Person"); //反射普通字段 Field f = clazz.getField("address"); Object fv = f.get(p); //获取到p对象的address字段的值 if(f.getType().equals(String.class)){ f.set(p, "重庆"); String address = (String) f.get(p); System.out.println(address); } //反射private字段 Field ff = clazz.getDeclaredField("age"); ff.setAccessible(true); if(ff.getType().equals(int.class)){ ff.set(p, 20); int ffvalue = (Integer) ff.get(p); System.out.println(ffvalue); } //反射List Field fl = clazz.getDeclaredField("list"); fl.setAccessible(true); if(fl.getType().equals(List.class)){ List alist = new ArrayList(); alist.add(1); alist.add(2); alist.add(3); alist.add(4); fl.set(p, alist); List list = (List) fl.get(p); for(Object i:alist) System.out.print((Integer)i + " "); } //反射静态字段 Field fs = clazz.getField("Sdept"); if(fs.getType().equals(String.class)){ fs.set(null, "\n计算机工程试验中心"); String fsv = (String) fs.get(null); System.out.println(fsv); } } }
package 内省introspector; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import org.junit.Test; //使用内省API操作Bean的属性 public class Demo { //获取bean内的所有属性 @Test public void test1() throws Exception{ ///在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件。 BeanInfo bin = Introspector.getBeanInfo(Person.class , Object.class);//获取Person属性,方法和事件,不包括Object父类以上类继承来的属性和方法以及事件 //得到Person类的属性描述器 PropertyDescriptor[] pros = bin.getPropertyDescriptors(); //显示Person—Object继承链内的所有属性 for(PropertyDescriptor pro : pros){ System.out.println(pro.getName()); } //会输出a,age,class,name,password五个属性,class属性来源于继承的父类Object,其他属性的判断根据get方法(必须带返回值) } //操作bean的指定属性:age @Test public void test2() throws Exception{ Person p = new Person(); //获取属性描述器 PropertyDescriptor pd = new PropertyDescriptor("age",Person.class); //给age属性赋值 Method mpd = pd.getWriteMethod(); mpd.invoke(p, 20); //方法执行 //获取age属性的值 Method mpd2 = pd.getReadMethod(); int mpd2v = (Integer) mpd2.invoke(p, null); System.out.println(mpd2v); } //获取当前操作的属性的类型 @Test public void test3() throws Exception{ PropertyDescriptor pd = new PropertyDescriptor("age", Person.class); //获取到属性描述器对该属性类型的描述 if(pd.getPropertyType().equals(int.class)){ System.out.println(pd.getPropertyType()); } } }
package 内省introspector; //内省:什么是javaBean(以下形式称为javabean) public class Person { private String name; // 没有get/set方法称为字段,有get/set方法的称为属性 private String password; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } // 未声明字段,但是存在set/get方法,此时也是一个属性 // 以下也是一个属性 public void setA() { } //共有5个属性,从Object集成一个getClass属性方法 public String getA() { return "aa"; } }
package BeanUtils; import java.lang.reflect.InvocationTargetException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConversionException; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.Converter; import org.apache.commons.beanutils.locale.converters.DateLocaleConverter; import org.junit.Test; //BeanUtil操作bean属性(第三方jar包) public class BeanUtils操作bean属性 { //使用BeanUtils操作Bean属性 @Test public void test() throws IllegalAccessException, InvocationTargetException{ Person p = new Person(); BeanUtils.setProperty(p, "name", "lj"); System.out.println(p.getName()); } //BeanUtils的便利体现 @Test public void test2() throws IllegalAccessException, InvocationTargetException{ //表单提交的数据都是String类型 String age="23"; String name="lijun"; String password = "sdasd"; Person p = new Person(); BeanUtils.setProperty(p, "age", age); //类型自动转换(只支持8种基本类型) BeanUtils.setProperty(p, "name", name); BeanUtils.setProperty(p, "password", password); System.out.println(p.getAge()+","+p.getName()+","+p.getPassword()); } //转换器的注册和使用(String转换为Date类型) @Test public void test3() throws IllegalAccessException, InvocationTargetException{ String birthday="1990-07-09"; //Date类型转换 /* ConvertUtils.register(new Converter(){ public Object convert(Class type, Object value) { if(value==null) return null; if(!(value instanceof String)){ throw new ConversionException("只支持String类型的转换"); } String str=(String)value; if(str.trim().equals("")) return null; SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd",Locale.US); try { return df.parse(str); } catch (ParseException e) { throw new RuntimeException(e); //异常链,e不能丢 //有异常一定要抛出,通知上一层程序。否则,上一层程序无法获知此程序是否出错,而继续向下执行 } } }, Date.class);*/ ConvertUtils.register(new DateLocaleConverter(), Date.class); Person p = new Person(); BeanUtils.setProperty(p, "birthday", birthday);//注册Date类型转换器 System.out.println(p.getBirthday().toLocaleString()); } //BeanUtils自动填充数据 @Test public void test4() throws IllegalAccessException, InvocationTargetException{ //客户端提交的数据 Map map = new HashMap(); map.put("name", "李军"); map.put("birthday", "1999-09-09"); map.put("password", "sadaqwe"); map.put("age", "123456"); //注册Date数据类型转换 ConvertUtils.register(new Converter() { @Override public Object convert(Class type, Object value) { // TODO Auto-generated method stub if(!(value instanceof String)) throw new ConversionException("只能转换String类型数据"); String str = (String) value; if("".equals(str.trim())) return null; if(value==null) return null; //转换函数 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); try { return df.parse(str); } catch (ParseException e) { // TODO Auto-generated catch block throw new RuntimeException(e); }// df.format(date)从Date转到String,parse从String转到Date } }, Date.class); //BeanUtils自动填充数据 Person p = new Person(); BeanUtils.populate(p, map); System.out.println(p.getName()+p.getPassword()+p.getAge()+p.getBirthday().toLocaleString()); } }
package BeanUtils; import java.util.Date; //内省:什么是javaBean(以下形式称为javabean) public class Person { private String name; // 没有get/set方法称为字段,有get/set方法的称为属性 private String password; private int age; private Date birthday; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } // 未声明字段,但是存在set/get方法,此时也是一个属性 // 以下也是一个属性 public void setA() { } //共有5个属性,从Object集成一个getClass属性方法 public String getA() { return "aa"; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
原文地址:http://blog.csdn.net/u010218226/article/details/42779675