基础类.供demo反射练习

 package fanshe;

 public class Person {
public String name;
private String age;
private int p;
public Person() {};
public Person(String name, String age) {
super();
this.name = name;
this.age = age;
}
private Person(String name, String age,int p) {
super();
this.name = name;
this.age = age;
this.p = p;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]" + "p -"+ p;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}

反射demo类

 package fanshe;

 import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; public class demo1 { public static void main(String[] args) {
// TODO Auto-generated method stub
try {
d_3();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} private static void d_1() {
Person p = new Person();
Class c = p.getClass(); } private static void d_2() {
Class c = Person.class;
System.out.println(c);
}
private static void d_3() throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
Class c = Class.forName("fanshe.Person"); //--------------------------//
Constructor con = c.getConstructor(); //获得 空参数的构造器 public
Object o= con.newInstance(); //运行获取到的构造方法
System.out.println(o.toString()); //--------------------------//
Constructor con2 = c.getConstructor(String.class,String.class); //获得带有参数的构造方法 public
Object o2 = (Person)con2.newInstance("a","22");
System.out.println(o2.toString()); //--------------------------// Constructor con3 = c.getDeclaredConstructor(String.class,String.class,int.class); //获得带有参数的构造方法 private
con3.setAccessible(true);
Object o3 = (Person)con3.newInstance("a","22",14);
System.out.println(o3.toString()); //--------------------------//
Object tmp_obj = c.newInstance();
Field f_name = c.getField("name");//获得成员变量 public
f_name.set(tmp_obj, "abc"); //设置变量
System.out.println(tmp_obj); //--------------------------//
Field f_age = c.getDeclaredField("age");//获得成员变量 public
System.out.println(f_age); //--------------------------//
Method m_getName = c.getMethod("getName"); //获得类函数无参数 public
Object o1 = m_getName.invoke(tmp_obj); //运行getName方法.返回值 反给obj
System.out.println(o1); //--------------------------//
Method m_setName = c.getMethod("setName",String.class);
m_setName.invoke(tmp_obj,"abcdqweqwe");
System.out.println(tmp_obj.toString());
}
}

通过反射.绕开泛型

 ArrayList<String> arr = new ArrayList<String>();
arr.add("a");
Class carr = arr.getClass();
Method arr_add = carr.getMethod("add",Object.class);
arr_add.invoke(arr, 1);
arr_add.invoke(arr, 2);
arr_add.invoke(arr, 3);
arr_add.invoke(arr, 4);
System.out.println(arr);

最新文章

  1. SOAPUI使用教程-创建MockResponse步骤
  2. 关于FPGA学习路线
  3. 【BZOJ-4524】伪光滑数 堆 + 贪心 (暴力) [可持久化可并堆 + DP]
  4. 横竖屏切换时Activity的生命周期
  5. 关于Objective-C 对象release操作的一个小问题探讨
  6. zz 李治国:地图大战本质是争抢O2O入口
  7. css 圆角效果
  8. 2.java.lang.NullPointerException(空指针异常)
  9. JavaScript 进阶(一)JS的&quot;多线程&quot;
  10. html checkbox样式美化
  11. Spring的声明式事务管理
  12. CF739E Gosha is hunting DP+wqs二分
  13. Unity编辑器扩展-Custom List, displaying data your way
  14. Spring的PropertyPlaceholderConfigurer
  15. canvas环形进度条
  16. linux环境下编译C++ 程序
  17. Android开发利用Volley框架下载和缓存网络图片
  18. android 模块化
  19. jmeter测试http请求使用csv参数
  20. Qt5.3.0的安装与测试

热门文章

  1. OpenStack入门篇(十九)之网络虚拟化基础
  2. pathon之多线程详解
  3. UWP 滚动条私人定制
  4. xaf.domain object new 在属性上的用法
  5. Docker创建数据卷
  6. SICP读书笔记 2.5
  7. JAVA之运算符优先级
  8. 如何掌握 Kubernetes ?系统学习 k8s 的大纲一份
  9. 基于Neutron的Kubernetes SDN实践经验之谈
  10. [朴孝敏][Sketch]