一. 首先是准备一个需要反射的类

 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关于反射的用法的更多相关文章

  1. Java之反射 — 用法及原理

    Java之反射 - 用法及原理 定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象 ...

  2. Java反射的用法

    Class类 在Java中,每个class都有一个相应的Class对象.也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息. 反射 ...

  3. Java 递归 反射 正则表达式

    一 递归 1. 就是函数自身调用自身 (就是在栈内存中不断的加载同一个函数) 2. 什么时候用递归呢? 当一个功能被重复使用 而每一次使用该功能时的参数不确定 都由上次的功能元素结果来确定 简单说: ...

  4. Java的反射机制和动态代理

    介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大的功能,可以原 ...

  5. java的反射机制(重要)

    1,反射的概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  6. Java学习——反射

    Java学习——反射 摘要:本文主要讲述了什么是反射,使用反射有什么好处,以及如何使用反射. 部分内容来自以下博客: https://www.cnblogs.com/tech-bird/p/35253 ...

  7. JAVA的反射理解

    1----------------------------反射的概念----------------------------------------------- JAVA的反射机制是在运行状态中,对 ...

  8. java的反射

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...

  9. iOS运行时编程(Runtime Programming)和Java的反射机制对比

    运行时进行编程,类似Java的反射.运行时编程和Java反射的对比如下:   1.相同点   都可以实现的功能:获取类信息.属性设置获取.类的动态加载(NSClassFromString(@“clas ...

随机推荐

  1. git连接github mac

    话不多说,终端里的代码直接复制过来 Last login: Fri May 17 21:45:31 on ttys000 liuduoduodeMacBook-Air:~ liuxiangyang$ ...

  2. java折半插入排序

    代码如下: public class BinaryInsertSort { public static void binaryInsertSort(DataWrap [] data) { System ...

  3. 简单的SpringBoot环境搭建

    开始搭建前请确认您的计算机中的Maven已正确配置 一:使用IDEA创建一个Maven项目,图中第一个指针请选择自己正在使用的JDK版本,指针二请打勾,选中指针三所指向的类型并点击Next 二:填写G ...

  4. python基础 条件和循环

    Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...

  5. M - Substrings

    You are given a number of case-sensitive strings of alphabetic characters, find the largest string X ...

  6. Hibernate 之QBC

    转自:http://blog.csdn.net/agromach/article/details/1932290 一.Hibernate 中聚合函数的使用 Criteria接口的Projections ...

  7. springmvc 处理lsit类型的请求參数映射成实体属性

    <table align="center" cellspacing="10"> <tr> <td> 母码数目:<inp ...

  8. linux下jdk的安装和配置

    一.首先依据自己的系统位数在网上下载对应的jdk安装包 下载地址例如以下:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-do ...

  9. 数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法

    此处共同拥有两段代码: 一. 这段代码比較全面,当中參考了github上的相关源代码. 能够说功能强大. //Dijkstra(迪杰斯特拉算法) #include <stdio.h> #i ...

  10. machine learning in coding(python):使用贪心搜索【进行特征选择】

    print "Performing greedy feature selection..." score_hist = [] N = 10 good_features = set( ...