Java关于反射的用法
一. 首先是准备一个需要反射的类
public class Person {
private String name;
private int age;
public String sex;
public int tel;
private Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
public Person(String name, int age, String sex, int tel) {
this.name = name;
this.age = age;
this.sex = sex;
this.tel = tel;
}
public String showInfo() {
return "name:" + name + "-age:" + age + "-sex:" + sex + "-tel" + tel;
}
private String getName() {
return name;
}
}
二.现在开始使用反射
/**
* 获取一个类的Class对象方法
*
* @param view
* @throws Exception
*/
public void getClassMethod(View view) throws Exception {
//获取class对象有三种方法 Person person = new Person();
//第一种
Class class1 = person.getClass();
//第二种
Class class2 = Person.class;
//第三种
Class class3 = Class.forName("com.adminhj.httpexercise.reflect.Person"); Log.i(TAG, "class1==class2-->" + (class1 == class2));
Log.i(TAG, "class2==class3-->" + (class2 == class3)); }
打印的结果是:
com.adminhj.httpexercise.reflect.ReflectActivity: class1==class2-->true
com.adminhj.httpexercise.reflect.ReflectActivity: class2==class3-->true
/**
* 通过反射获取Person类的共有构造方法
*
* @param view
*/
public void getConstruct(View view) throws Exception {
//加载person类的class对象
Class class1 = Class.forName("com.adminhj.httpexercise.reflect.Person");
//获取指定的构造方法 public Person(String name, int age, String sex, int tel)
// ,如果构造方法中没有参数可不要写如例如 Constructor constructor = class1.getConstructor();
Constructor constructor = class1.getConstructor(String.class, int.class, String.class, int.class);
//new出指定构造方法的对象
Object obj = constructor.newInstance("张三", , "男", );
//获取反射类中的公共属性
Field sex = class1.getField("sex");
Field tel = class1.getField("tel");
Log.i(TAG, "sex:" + sex.get(obj) + "-------tel:" + tel.get(obj));
//获取反射类中指定的的公共方法
Method showInfo = class1.getMethod("showInfo");
//执行方法
String info = (String) showInfo.invoke(obj);
Log.i(TAG, "info" + "-------" + info); }
打印结果:
com.adminhj.httpexercise.reflect.ReflectActivity: sex:男-------tel:
com.adminhj.httpexercise.reflect.ReflectActivity: info-------name:张三-age:-sex:男-tel110
/**
* 通过反射获取Person类的私有构造方法
*
* @param view
* @throws Exception
*/
public void getDeclaredConstruct(View view) throws Exception {
//加载person类的class对象
Class class1 = Class.forName("com.adminhj.httpexercise.reflect.Person");
//获取指定的构造方法 private Person(String name, int age)
Constructor constructor = class1.getDeclaredConstructor(String.class, int.class);
//设置这个私有的构造方法是可进入的,不设置则会报错
constructor.setAccessible(true);
//创建实例对象
Object obj = constructor.newInstance("里斯", ); //获取所有属性包括私有,class1.getDeclaredField() 此方法是获取所有属性不包括私有
//
Field[] declaredFields = class1.getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true); //注释掉的是在使用私有熟悉的时候需要注意的
//field.setAccessible(true); 设置属性可见
//field.set(obj, "张飞"); 给属性赋值 Log.i(TAG, field.getName() + "-------" + field.get(obj));
}
//获取反射类中指定的的私有方法
Method getNameAndAge = class1.getDeclaredMethod("getNameAndAge");
//设置私有方法可执行
getNameAndAge.setAccessible(true);
//执行方法
String result = (String) getNameAndAge.invoke(obj); Log.i(TAG, result);
}
打印结果:
com.adminhj.httpexercise.reflect.ReflectActivity: age-------
com.adminhj.httpexercise.reflect.ReflectActivity: name-------里斯
com.adminhj.httpexercise.reflect.ReflectActivity: sex-------null
com.adminhj.httpexercise.reflect.ReflectActivity: tel-------
com.adminhj.httpexercise.reflect.ReflectActivity: name=里斯----------age=
学无止尽 小伙伴们加油哦
Java关于反射的用法的更多相关文章
- Java之反射 — 用法及原理
Java之反射 - 用法及原理 定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象 ...
- Java反射的用法
Class类 在Java中,每个class都有一个相应的Class对象.也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息. 反射 ...
- Java 递归 反射 正则表达式
一 递归 1. 就是函数自身调用自身 (就是在栈内存中不断的加载同一个函数) 2. 什么时候用递归呢? 当一个功能被重复使用 而每一次使用该功能时的参数不确定 都由上次的功能元素结果来确定 简单说: ...
- Java的反射机制和动态代理
介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大的功能,可以原 ...
- java的反射机制(重要)
1,反射的概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...
- Java学习——反射
Java学习——反射 摘要:本文主要讲述了什么是反射,使用反射有什么好处,以及如何使用反射. 部分内容来自以下博客: https://www.cnblogs.com/tech-bird/p/35253 ...
- JAVA的反射理解
1----------------------------反射的概念----------------------------------------------- JAVA的反射机制是在运行状态中,对 ...
- java的反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...
- iOS运行时编程(Runtime Programming)和Java的反射机制对比
运行时进行编程,类似Java的反射.运行时编程和Java反射的对比如下: 1.相同点 都可以实现的功能:获取类信息.属性设置获取.类的动态加载(NSClassFromString(@“clas ...
随机推荐
- Git:分支的创建、合并、管理和删除
了解分支 如果想实现多人协作.划出Bug区.Feature区等功能,就需要分支功能.(确实很强大的地方) 每次commit时,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条 ...
- 【codeforces 527B】Error Correct System
[题目链接]:http://codeforces.com/contest/527/problem/B [题意] 给你两个字符串; 允许你交换一个字符串的两个字符一次: 问你这两个字符串最少会有多少个位 ...
- ACDream - Xor pairs
先上题目: Xor pairs Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Sub ...
- springCloud学习-断路器(Hystrix)
1.问题分析 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高 ...
- vjudge B - Design T-Shirt
B - Design T-Shirt 思路:水题,模拟即可. #include<cstdio> #include<cstring> #include<iostream&g ...
- Spring MVC-集成(Integration)-生成PDF示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_pdf.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示如何 ...
- 《MySQL 5.7 Replication新特性》分享之互动问题解答
原创 2016-07-21 宋利兵 MySQL中文网 分享主题 <MySQL 5.7 Replication新特性> 嘉宾介绍 宋利兵,MySQL研发工程师.2009年加入MySQL全球研 ...
- [IOS/翻译]Core Services Layer
本文是本人自己辛苦翻译的,请转载的朋友注明,翻译于Z.MJun的CSDN的博客 http://blog.csdn.net/Zheng_Paul,感谢. 翻译于2015年10月4日 Core Servi ...
- 【Linux】Linux下配置apache
一.获取软件: http://httpd.apache.org/ httpd-2.4.10.tar.gz 二.安装步骤: 解压源文件: 1) tar zvxf httpd-2.4.10.tar. ...
- luogu1514 引水入城
题目大意 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个NN 行\times M×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市 ...