基础类.供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. Gitlab+Jenkins学习之路(十三)之发布Java项目到tomcat

    一.新建一台虚拟机安装tomcat ()安装JDK 官网下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl ...

  2. 一个java程序员该具备的工具

    http://itindex.net/detail/37115-java-%E7%A8%8B%E5%BA%8F%E5%91%98-%E5%B7%A5%E5%85%B7 文章很详细.

  3. COGS1871 [国家集训队2011]排队(魏铭)

    bzoj:http://www.lydsy.com/JudgeOnline/problem.php?id=2141 cogs:http://cogs.pro:8080/cogs/problem/pro ...

  4. Maven+spring+springMVC+mybatis+Junit+Log4j配置个人总结

          首先粘贴上项目引用地址:http://doc.okbase.net/fengshizty/archive/126397.html 这里对创建步骤不做过多解释,只是针对案例创建demo的一些 ...

  5. springboot 前后端分离开发 从零到整(四、更改密码操作)

    前端发送更改密码请求,头部携带token,服务端拦截器拦截头部token并解析,根据token中的信息来查询用户信息.需要登录才能进行的操作是由自己定的,有些操作可以直接放行.具体实现是: 上一章写到 ...

  6. linux常用命令总结(含选项参数)

    • 用户切换 su              切换到root用户并不切换环境 su - root   切换到root用户并切换环境 su  redhat  切换到redhat不切换环境 • cd切换目 ...

  7. gitlab+jenkins持续集成--http方式连接gitlab

    http://v.youku.com/v_show/id_XMjk3NTYyMDUxMg==.html?spm=a2h3j.8428770.3416059.1

  8. Linux系统下搭建FTP/SFTP服务器

    传输文件经常使用ftp和sftp服务器.Windows下有多种可视化工具,使用快捷.Linux经常需要自行搭建这两种服务器,当然搭建熟练的话,会更加快捷. 1.检查Linux系统是否安装了vsftp和 ...

  9. go 运行项目

    此时运行项目,不能像之前简单的使用go run main.go,因为包main包含main.go和router.go的文件,因此需要运行go run *.go命令编译运行.如果是最终编译二进制项目,则 ...

  10. spring boot+mybatis+swagger搭建

    环境概述 使用的开发工具:idea 2018 3.4 环境:jdk1.8 数据库:MariaDB (10.2.21) 包管理:Maven 3.5 Web容器:Tomcat 8.0 开发机系统:Wind ...