基础类.供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);

Java 反射 调用 demo的更多相关文章

  1. Java反射机制demo(五)—获得并调用一个类中的方法

    Java反射机制demo(五)—获得并调用一个类中的方法 这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和 ...

  2. Java反射机制demo(七)—反射机制与工厂模式

    Java反射机制demo(七)—反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...

  3. Java反射机制demo(三)—获取类中的构造函数

    Java反射机制demo(三)—获取类中的构造函数 1,获取类中所有的构造函数 如下面的代码中所示,这个类中显式的构造函数有五个. 空构造: public UserInfo() 带参构造有四个: pu ...

  4. Java反射机制demo(二)—通过Class实例化任意类的对象

    Java反射机制demo(二)—通过Class实例化任意类的对象 上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例. 任意一个类 ...

  5. Java 反射 调用私有域和方法(setAccessible)

    Java 反射 调用私有域和方法(setAccessible) @author ixenos AccessibleObject类 Method.Field和Constructor类共同继承了Acces ...

  6. Java反射机制demo(六)—获得并操作一个类的属性

    Java反射机制demo(六)—获得并操作一个类的属性 获得并操作一个类的属性?! 不可思议啊,一个类的属性一般都是私有成员变量啊,private修饰符啊! 但是毫无疑问,这些东西在Java的反射机制 ...

  7. Java反射机制demo(四)—获取一个类的父类和实现的接口

    Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 ...

  8. Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型

    Java反射机制demo(一)——实例化Class对象,通过对象获得包名和类型 使用Java中的 本地类作为实验对象,避免自定义的类带来的一些不便. public static void main(S ...

  9. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

随机推荐

  1. cogs468 [NOI2010]超级钢琴

    http://cogs.pro:8080/cogs/problem/problem.php?pid=468 emmmmmm 今天考试爆炸顺便切了这题 这题我肯定不会啦然后看一sol.. 固定一个右端点 ...

  2. wget和curl方式下载JDK

    有时候我们需要在Linux服务器上安装Oracle JDK,这时候我们发现直接复制网页上面的地址是不能下载的 以下载jdk-8u101-linux-i586.tar.gz为例,右键查看到的地址为htt ...

  3. loadrunner11和https

    最近做了一个接口测试的项目,json格式,https协议,使用postman调试这个接口,在postman中写好三个表头Authorization.sessionIndex.Content-Type和 ...

  4. python图像处理(2)图像水印和PIL模式转化

    模式转化: PIL模式转化:将图片转化成其他模式 # 我们将image图像转化为灰度图像(python) from PIL import Image img = Image.open('c:\\1.J ...

  5. TPO-22 C2 Revise a music history paper

    第 1 段 1.Listen to part of a conversation between a student and his music history professor. :听一段学生和音 ...

  6. vue处理循环列表动态数据问题

    调用方法:Vue.set( target, key, value ) target:要更改的数据源(可以是对象或者数组) key:要更改的具体数据 value :重新赋的值 <!DOCTYPE ...

  7. 4. 为HelloWorld添加日志

    回顾 通过上篇内容,我们已经使用flask编写了我们的第一个接口或者说是html页面.我们可以看到,使用flask来编写接口/页面是十分简单的.那么接下来,我们丰富一下上面的例子. 需求 现在的需求来 ...

  8. vue 使用ref获取DOM元素和组件引用

    在vue中可以通过ref获取dom元素,并操作它,还可以获取组件里面的数据和方法. HTML部分: <div id="app"> <input type=&quo ...

  9. k8s环境搭建--基于minik8s方法

    minik8s 安装 关闭selinux.开启ipv6 sudo bash selinux_ipv6.sh 下载kubectl和minikube 下载minikube,因为国外的源被墙了,所以只能用阿 ...

  10. VirtualBox共享文件夹 Windows 7 (宿主机) + Ubuntu 12.04

    1 安装增强功能包1.1 运行Ubuntu并登陆,菜单“设备”->“安装增强功能包(Install Guest Additions)”ubun1.2 桌面上会多出一个光盘图标,光盘默认自动加载到 ...