Java 反射 调用 demo
基础类.供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的更多相关文章
- Java反射机制demo(五)—获得并调用一个类中的方法
Java反射机制demo(五)—获得并调用一个类中的方法 这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和 ...
- Java反射机制demo(七)—反射机制与工厂模式
Java反射机制demo(七)—反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...
- Java反射机制demo(三)—获取类中的构造函数
Java反射机制demo(三)—获取类中的构造函数 1,获取类中所有的构造函数 如下面的代码中所示,这个类中显式的构造函数有五个. 空构造: public UserInfo() 带参构造有四个: pu ...
- Java反射机制demo(二)—通过Class实例化任意类的对象
Java反射机制demo(二)—通过Class实例化任意类的对象 上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例. 任意一个类 ...
- Java 反射 调用私有域和方法(setAccessible)
Java 反射 调用私有域和方法(setAccessible) @author ixenos AccessibleObject类 Method.Field和Constructor类共同继承了Acces ...
- Java反射机制demo(六)—获得并操作一个类的属性
Java反射机制demo(六)—获得并操作一个类的属性 获得并操作一个类的属性?! 不可思议啊,一个类的属性一般都是私有成员变量啊,private修饰符啊! 但是毫无疑问,这些东西在Java的反射机制 ...
- Java反射机制demo(四)—获取一个类的父类和实现的接口
Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 ...
- Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型
Java反射机制demo(一)——实例化Class对象,通过对象获得包名和类型 使用Java中的 本地类作为实验对象,避免自定义的类带来的一些不便. public static void main(S ...
- 利用java反射调用类的的私有方法--转
原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...
随机推荐
- Gitlab+Jenkins学习之路(十三)之发布Java项目到tomcat
一.新建一台虚拟机安装tomcat ()安装JDK 官网下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl ...
- 一个java程序员该具备的工具
http://itindex.net/detail/37115-java-%E7%A8%8B%E5%BA%8F%E5%91%98-%E5%B7%A5%E5%85%B7 文章很详细.
- COGS1871 [国家集训队2011]排队(魏铭)
bzoj:http://www.lydsy.com/JudgeOnline/problem.php?id=2141 cogs:http://cogs.pro:8080/cogs/problem/pro ...
- Maven+spring+springMVC+mybatis+Junit+Log4j配置个人总结
首先粘贴上项目引用地址:http://doc.okbase.net/fengshizty/archive/126397.html 这里对创建步骤不做过多解释,只是针对案例创建demo的一些 ...
- springboot 前后端分离开发 从零到整(四、更改密码操作)
前端发送更改密码请求,头部携带token,服务端拦截器拦截头部token并解析,根据token中的信息来查询用户信息.需要登录才能进行的操作是由自己定的,有些操作可以直接放行.具体实现是: 上一章写到 ...
- linux常用命令总结(含选项参数)
• 用户切换 su 切换到root用户并不切换环境 su - root 切换到root用户并切换环境 su redhat 切换到redhat不切换环境 • cd切换目 ...
- gitlab+jenkins持续集成--http方式连接gitlab
http://v.youku.com/v_show/id_XMjk3NTYyMDUxMg==.html?spm=a2h3j.8428770.3416059.1
- Linux系统下搭建FTP/SFTP服务器
传输文件经常使用ftp和sftp服务器.Windows下有多种可视化工具,使用快捷.Linux经常需要自行搭建这两种服务器,当然搭建熟练的话,会更加快捷. 1.检查Linux系统是否安装了vsftp和 ...
- go 运行项目
此时运行项目,不能像之前简单的使用go run main.go,因为包main包含main.go和router.go的文件,因此需要运行go run *.go命令编译运行.如果是最终编译二进制项目,则 ...
- spring boot+mybatis+swagger搭建
环境概述 使用的开发工具:idea 2018 3.4 环境:jdk1.8 数据库:MariaDB (10.2.21) 包管理:Maven 3.5 Web容器:Tomcat 8.0 开发机系统:Wind ...