java反射学习
来源:互联网 发布:php生成二维码 编辑:程序博客网 时间:2024/06/16 06:25
package cn.rrl.baseTest;import java.lang.reflect.Modifier;import java.lang.reflect.Constructor;import java.lang.reflect.Field; public class Employee { /** * getFields()获得某个类的所有的公共(public)的字段,包括父类。 getDeclaredFields()获得某个类的所有申明的字段,即包括public、private和proteced, * @param args */ public static void fieldTest(){ try { //第一种方式: Class c1 = Class.forName("cn.rrl.baseTest.Person"); //第二种方式: //java中每个类型都有class 属性. Class c2 = Person.class; //第三种方式: //java语言中任何一个java对象都有getClass 方法 Employee e= new Employee(); Class c3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee) Class c= Class.forName("cn.rrl.baseTest.Person"); //创建此Class 对象所表示的类的一个新实例 Object o = c.newInstance(); //调用了Employee的无参数构造方法. //获取所有的属性? Field[] fs = c.getDeclaredFields(); //定义可变长的字符串,用来存储属性 StringBuffer sb = new StringBuffer(); //通过追加的方法,将每个属性拼接到此字符串中 //最外边的public定义 sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n"); //空格 //里边的每一个属性 for(Field field:fs){ sb.append("\t");//换行 sb.append(Modifier.toString(field.getModifiers())+" ");//获得属性的修饰符,例如public,static等等 sb.append(field.getType().getSimpleName() + " ");//属性的类型的名字 sb.append(field.getName()+";\n");//属性的名字+回车 } sb.append("}"); System.out.println(sb); //获取整个类 Class c4 = Class.forName("java.lang.Integer"); } catch (Exception e1) { e1.printStackTrace(); } } /** * 获取特定的属性 */ public static void getSpecialField(){ try { Class cp = Class.forName("cn.rrl.baseTest.Person"); Field f = cp.getDeclaredField("age");//获取age属性 Person<Student> p = (Person<Student>) cp.newInstance(); System.out.println(p.chifan()); //打破封装 f.setAccessible(true); //使用反射机制可以打破封装性,导致了java对象的属性不安全。 //给o对象的id属性赋值"110" f.set(p, 24); //set System.out.println(f.get(p)); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { //fieldTest(); getSpecialField(); }}
package cn.rrl.baseTest;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;public class Student extends Person<Student> { /** * @param args */ public static void main(String[] args) { Student st =new Student(); Class clazz =st.getClass(); //getSuperclass 获得该类的父类 System.out.println(clazz.getSuperclass()); //getGenericSuperclass()获得带有泛型的父类 Type type = clazz.getGenericSuperclass(); System.out.println(type); //ParameterizedType参数化类型,即泛型 ParameterizedType pa = (ParameterizedType) type; Class c = (Class) pa.getActualTypeArguments()[0]; System.err.println(c); }}/***获取类的属性*/class hello{ public static void main(String[] args) { Class<?> demo=null; try{ demo=Class.forName("Reflect.Person"); }catch (Exception e) { e.printStackTrace(); } Method method[]=demo.getMethods(); for(int i=0;i<method.length;++i){ Class<?> returnType=method[i].getReturnType(); Class<?> para[]=method[i].getParameterTypes(); int temp=method[i].getModifiers(); System.out.print(Modifier.toString(temp)+" "); System.out.print(returnType.getName()+" "); System.out.print(method[i].getName()+" "); System.out.print("("); for(int j=0;j<para.length;++j){ System.out.print(para[j].getName()+" "+"arg"+j); if(j<para.length-1){ System.out.print(","); } } Class<?> exce[]=method[i].getExceptionTypes(); if(exce.length>0){ System.out.print(") throws "); for(int k=0;k<exce.length;++k){ System.out.print(exce[k].getName()+" "); if(k<exce.length-1){ System.out.print(","); } } }else{ System.out.print(")"); } System.out.println(); } }
0 0
- java学习-反射
- Java反射学习
- Java反射学习
- java反射机制学习
- Java反射学习
- Java反射学习
- JAVA反射机制学习
- Java 反射 视频学习
- java反射的学习
- Java学习日志-反射
- java 反射基础学习
- Java反射学习
- java 反射学习
- JAVA 反射学习总结
- java 的反射学习
- Java反射学习
- Java反射机制学习
- JAVA反射机制学习
- 单元测试/集成测试/系统测试的区别
- httpclient 4.3及以上版本,发送和接收https
- 打包AAC码流到FLV文件
- qt 声音
- [Androd初级]解决Listview的子项Item的高度无法设置的情节
- java反射学习
- Netflix计划进入中国,与监管部门的谈判正取得进展(来源:腾讯科技)
- 超全!整理常用的iOS第三方资源
- 带图标和箭头、文字的垂直居中
- listview适配器的编写
- 比较快得Maven镜像
- 百度地图定位导航错误总结
- CC2541之SimpleBLEPeripheral程序流程分析 -- 03.App层事务处理
- ViewPager和Tabhost(tabhostfragment)结合