Android反射机制技术的使用示例

转:http://blog.csdn.net/lfdfhl/article/details/10311505

  1 package com.nthm.androidtestActivity;
  2
  3 import java.io.File;
  4 import java.lang.reflect.Constructor;
  5 import java.lang.reflect.Field;
  6 import java.lang.reflect.Method;
  7 import com.nthm.androidtest.R;
  8 import android.os.Bundle;
  9 import android.app.Activity;
 10 import android.content.ContextWrapper;
 11 /**
 12  * Demo描述:
 13  * Android中Java反射技术的使用示例
 14  * 在Java中描述字节码文件(xxx.class)的类叫Class
 15  * 反射的过程可视为剖析Class的过程
 16  */
 17 public class MainActivity extends Activity {
 18     @Override
 19     protected void onCreate(Bundle savedInstanceState) {
 20         super.onCreate(savedInstanceState);
 21         setContentView(R.layout.main);
 22         init();
 23     }
 24     private void init(){
 25         try {
 26             /**
 27              * 1 反射出无参的构造方法并得到对象
 28              * 注意:
 29              *      1 在Class.forName()中应该传入含有包名的类全名
 30              *      2 newInstance()方法的本质是调用类的无参Public构造方法
 31              */
 32             String className1="com.nthm.androidtestBean.Worker";
 33             Class clazz1=Class.forName(className1);
 34             Object object1=clazz1.newInstance();
 35             System.out.println("object1.toString()="+object1.toString());
 36             /**
 37              * 2 反射出带参数的构造方法并得到对象
 38              */
 39             String className2="com.nthm.androidtestBean.Worker";
 40             Class clazz2=Class.forName(className2);
 41             Constructor constructor1=clazz2.getConstructor(int.class,String.class);
 42             Object object2=constructor1.newInstance(18,"小明");
 43             System.out.println("object2.toString()="+object2.toString());
 44
 45             /**
 46              * 3 获取类的私有(private)字段
 47              * 注意:
 48              *      获取共有(public)字段应调用clazz3.getField(name)方法
 49              */
 50             String className3="com.nthm.androidtestBean.Worker";
 51             Class clazz3=Class.forName(className3);
 52             Field ageField1=clazz3.getDeclaredField("age");
 53             System.out.println("ageField1="+ageField1);
 54
 55             /**
 56              * 4 获取和更改某个对象的私有字段
 57              *   即模拟get()和set()方法
 58              */
 59             String className4="com.nthm.androidtestBean.Worker";
 60             Class clazz4=Class.forName(className4);
 61             Field ageField2=clazz4.getDeclaredField("age");
 62             Object object4=constructor1.newInstance(18,"小明");
 63             //取消访问私有字段的合法性检查
 64             ageField2.setAccessible(true);
 65             //获取对象的私有字段
 66             Object ageObject4=ageField2.get(object4);
 67             System.out.println("ageObject4="+ageObject4.getClass().getName());
 68             System.out.println("ageObject4="+ageObject4);
 69
 70             //再更改对象的私有字段的值
 71             ageField2.set(object4, 9527);
 72             //重新获得
 73             Object ageObject5=ageField2.get(object4);
 74             System.out.println("ageObject5="+ageObject5);
 75
 76             /**
 77              * 5 调用对象的带参数的方法
 78              */
 79             String className5="com.nthm.androidtestBean.Worker";
 80             Class clazz5=Class.forName(className5);
 81             Method method=clazz5.getMethod("printMessage", String.class,int.class,int.class);
 82             Object object5=clazz5.newInstance();
 83             method.invoke(object5, "周星星",50,9527);
 84
 85             //获取ContextWrapper对象中的mBase对象,该变量保存了ContextImpl对象
 86             Field field=ContextWrapper.class.getDeclaredField("mBase");
 87             //跳过属性的修饰(public private protect)检查
 88             field.setAccessible(true);
 89             //获取对象的指定属性的值
 90             Object obj=field.get(this);
 91             //根据获取的值所属的类来获取该类中的其他属性
 92             field=obj.getClass().getDeclaredField("mPreferencesDir");
 93             //跳过属性的修饰(public private protect)检查
 94             field.setAccessible(true);
 95             File file=new File("/sacard");
 96             //对该属性重新赋值
 97             field.set(obj, file);
 98         } catch (Exception e) {
 99             System.out.println(e.toString());
100         }
101
102     }
103
104 }
 1 package com.nthm.androidtestBean;
 2
 3 public class Worker {
 4     private int age;
 5     private String name;
 6     public Worker() {
 7         super();
 8         System.out.println("---> public Worker(){ }");
 9     }
10     public Worker(int age, String name) {
11         super();
12         this.age = age;
13         this.name = name;
14         System.out.println("---> public Worker(int age, String name){ }");
15     }
16     public int getAge() {
17         return age;
18     }
19     public void setAge(int age) {
20         this.age = age;
21     }
22     public String getName() {
23         return name;
24     }
25     public void setName(String name) {
26         this.name = name;
27     }
28     @Override
29     public String toString() {
30         return "Worker [age=" + age + ", name=" + name + "]";
31     }
32
33     public void printMessage(String name,int age,int salary){
34         System.out.println("name="+name+",age="+age+",salary="+salary);
35     }
36
37 }
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     >
 6
 7     <TextView
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:text="Android中Java反射技术的使用"
11         android:layout_centerInParent="true"/>
12
13 </RelativeLayout>
时间: 2024-10-09 00:49:19

Android反射机制技术的使用示例的相关文章

Android反射机制实现与原理

本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 在Java中的反射机制,被称为Reflection(大家看到这个单词,第一个想法应该就是去开发文档中

android中反射机制

本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 在Java中的反射机制,被称为Reflection(大家看到这个单词,第一个想法应该就是去开发文档中

Java反射机制的原理及在Android下的简单应用

花了几天时间,研究了一下Java的反射机制.在这里总结一下这几天学习的成果,一来分享自己的学习过程和在学习中遇到的问题,二来是给像我一样不太了解Java反射机制的同学做一个简单的介绍.在文章后面会链接一个Android反射机制的应用程序. 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述

JAVA反射机制—学习总结

最近收到很多关于Java反射机制的问题留言,其实Java反射机制技术方面没有太多难点,或许是大家在学习过程中遗漏了细小知识点,导致一些问题无法彻底理解,现在我们简单的总结一下,加深印象. 什么是反射机制? "JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制."我们通过一些例子,更好理解反射机制.Class类 我们知道Java是一门面向对象

Android中Java反射技术的使用示例

import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * Android中Java反射技术的使用示例 * 在Java中描述字节码文件(xxx.class)的类叫Class * 反射的过程可视为剖析Class的过

Android小例子:使用反射机制来读取图片制作一个图片浏览器

效果图: 工程文件夹: 该例子可供于新手参考练习,如果有哪里不对的地方,望指正>-< <黑幕下的人> java代码(MainActivity.java): package com.example.imageswitchtest; import java.lang.reflect.Field; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.v

Android利用反射机制为实体类属性赋值

在做android项目时,有时会遇到从网络上获取json类型数据,赋值给实体类,实体类属性少可以一个一个的赋值,如果实体类有很多属性,赋值可能就要耗很长的功夫了,幸好Java给我们提供了反射机制.下面是在我在android中如何利用java反射机制给实体类赋值. 在Android中利用反射机制为实体类属性赋值,首先需要导入一下两个包 import java.lang.reflect.Field; import java.lang.reflect.Method; 给实体类赋值首先需要一个实体类,这

Java 反射机制(包括组成、结构、示例说明等内容)

http://www.cnblogs.com/skywang12345/p/3345205.html 第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据"类的部分已经的信息"来还原"类的全部的信息".这里"类的部分已经的信息",可以是"类名"或"类的对象"等信息."类的全部信息"就是指"类的属性,方法,继承关系和Annotation

java中的反射机制在Android开发中的用处

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制.      然而在android中Google很多的类的某些方法不让第三方应用去调用,通过java反射机制能把这些隐藏方法获取出来并调用,三方应用上我们就很方便的去用这些方法.      例如我们需要安全的杀死某个应用的服务和进程调用ActivityManager.forceStopPack