反射调用
来源:互联网 发布:都柏林圣三一学院 知乎 编辑:程序博客网 时间:2024/06/01 12:46
初次使用反射,记录一下:
/** * 获取手机imei */public void getIMEI() {try { Class<?> clazz = Class.forName("android.telephony.MzTelephonyManager"); Method method = clazz.getMethod("getDeviceId"); Object temp = method.invoke(null); //Object temp = ReflectHelper.invokeStatic("android.telephony.MzTelephonyManager", "getDeviceId", null); if (null != temp && temp instanceof String) { String imei = (String)temp; if (imei != null && !imei.equals("")) { IMEI = imei; } } } catch (Exception e) { e.printStackTrace(); // 兼容低版本和非FlymeOS try { TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); if (null == tm) { IMEI = "imei获取失败"; } String imei = tm.getDeviceId(); if (imei != null && !imei.equals("")) { IMEI = imei; } } catch (Exception ex) { ex.printStackTrace(); } }}
以下是在网上找的反射详细讲解:
import java.lang.reflect.Constructor;import java.lang.reflect.Method;public class CallMethod { public static void main(String[] args) throws Exception { // 获取TestClass的Class对象 Class testClass = Class.forName(TestClass.class.getName()); // (1)使用Class对象的newInstance方法创建一个实例,这种方法用默认构造方法创建对象 TestClass objectA = (TestClass) testClass.newInstance(); System.out.println("Class的newInstance() 方法创建默认TestClass实例: " + objectA.toString()); // (2)使用构造方法创建实例。这就可以使用带参数的构造方法创建实例了 Constructor[] cons = testClass.getDeclaredConstructors(); System.out.println("testClass有 " + cons.length + " 个构造方法"); Constructor con = null; for (int i = 0; i < cons.length; i++) { con = cons[i]; // 默认构造函数 if (con.getParameterTypes().length == 0) { // 调用Constructor的newInstance方法创建实例 objectA = (TestClass) con.newInstance(null); System.out .println("Constructor 的 newInstance() 方法创建默认TestClass实例: " + objectA.toString()); } else { // 带参数的构造函数 objectA = (TestClass) con.newInstance(new Object[] { new Integer(55), new Integer(88) }); System.out .println("Constructor 的 newInstance() 方法创建带参数的TestClass实例: " + objectA.toString()); } } // 获取所有方法 Method[] methods = testClass.getMethods(); // 获取某个特定的无参数的方法 Method saddMethod1 = testClass.getMethod("sadd", null); Method addMethod1 = testClass.getMethod("add", null); // 获取某个特定的有参数的方法 Method saddMethod2 = testClass.getMethod("sadd", new Class[] { int.class, int.class }); Method addMethod2 = testClass.getMethod("add", new Class[] { int.class, int.class }); // 调用不带参数的静态方法 int result = ((Integer) saddMethod1.invoke(null, null)).intValue(); System.out.println("调用不带参数的静态方法sadd: " + result); // 调用带参数的静态方法 result = ((Integer) saddMethod2.invoke(null, new Object[] { new Integer(30), new Integer(70) })).intValue(); System.out.println("调用带参数30, 70的静态方法sadd: " + result); objectA = (TestClass) testClass.newInstance(); // 调用不带参数的实例方法 result = ((Integer) addMethod1.invoke(objectA, null)).intValue(); System.out.println("调用不带参数的实例方法add: " + result); // 调用带参数的实例方法 result = ((Integer) addMethod2.invoke(objectA, new Object[] { new Integer(130), new Integer(170) })).intValue(); System.out.println("调用带参数130, 170的实例方法add: " + result); // 不能访问私有方法// Method sub = testClass.getMethod("sub", null);// System.out.println(sub.invoke(objectA, null)); } // 测试类 class TestClass { // 两个静态属性 static int sa = 100; static int sb = 50; // 两个实例属性 int a; int b; // 默认构造方法 public TestClass() { this.a = 5; this.b = 10; } // 带参数的构造方法 public TestClass(int a, int b) { this.a = a; this.b = b; } // 静态方法,实现add功能 public static int sadd() { return sa + sb; } public static int sadd(int a, int b) { return a + b; } // 实例方法,实现add功能 public int add() { return this.a + this.b; } public int add(int a, int b) { return a + b; } public String toString() { return "a = " + this.a + "; b = " + this.b; } // 私有方法 private int sub() { return this.a - this.b; } }}
0 0
- 反射调用
- 反射调用
- 反射调用
- 反射:使用反射调用方法
- java反射调用方法
- 通过反射调用FORM
- 反射调用Assembly
- 反射动态调用
- 反射的调用方法
- dock窗体反射调用
- 动态调用WebService反射
- C#反射实例调用
- 反射的基本调用
- Java反射调用方法
- 使用反射调用方法
- 反射调用main方法
- 利用反射调用方法
- 反射调用性能比较
- hdu 2121 Ice_cream’s world II(无根结点最小树形图)
- 二叉树迭代遍历
- QLatin1String类
- jQuery中Ajax的基本使用(1)
- Java 7之基础 - 强引用、弱引用、软引用、虚引用(总结的很好)
- 反射调用
- 用函数重载输出两数乘积
- leetcode 089 Gray Code
- xlistview上拉加载下拉刷新
- 软考程序员随笔-----6
- 左旋转字符串
- 8大排序算法图文讲解
- 结构体和类的内存字节对齐详解
- 35.二叉树的深度