Firefly开源社区

打印 上一主题 下一主题

(代码流)java映射

63

积分

0

威望

0

贡献

技术小白

积分
63

(代码流)java映射

发表于 2014-10-21 18:03:36      浏览:16464 | 回复:3        打印      只看该作者   [复制链接] 楼主
java是一种解析语言,java程序是通过java虚拟机解析.class的方式运行起来。因此,java中就存在java映射的概念。
下面介绍如何用java映射创建java对象和调用java对象的方法。
一、首先我们要知道这个java的包名和类名。调用静态方法Class.forName(String)获取Class对象。
二、然后我们要知道要调用的方法的声明。调用Class对象的getMethod获取Method对象。
三、传入参数调用Method对象。这时要调用Method对象的invoke方法。

好,现在上代码:lol
  1. package com.bunchen.test;

  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Method;

  4. public class Test {

  5.         public int func(int a , int b){
  6.                 return a+b;
  7.         }
  8.         /**
  9.          * @hide
  10.          */
  11.         public int func(int a){
  12.                 return a*a;
  13.         }

  14.         public static void main(String[] args) {
  15.                 try {
  16.                         Class cls = Class.forName("com.bunchen.test.Test");
  17.                        
  18.                         Constructor[] cs = cls.getConstructors();
  19.                         System.out.println("###### constructors ######");
  20.                         for(Constructor c : cs){
  21.                                 System.out.println(c.toString());
  22.                         }
  23.                         System.out.println("##########################");
  24.                        
  25.                         Method[] mtds = cls.getMethods();
  26.                         System.out.println("###### methods ######");
  27.                         for(Method m : mtds){
  28.                                 System.out.println(m.toString());
  29.                         }
  30.                         System.out.println("#####################");
  31.                        
  32.                         Method m1 = cls.getMethod("func", int.class,int.class);
  33.                         Method m2 = cls.getMethod("func",int.class);
  34.                        
  35.                         Object obj = cls.getConstructor().newInstance();
  36.                        
  37.                         int a = 3 ;
  38.                         int b = 5 ;
  39.                        
  40.                         int r1 = (Integer) m1.invoke(obj, a,b);
  41.                        
  42.                         int r2 = (Integer) m2.invoke(obj, b);
  43.                        
  44.                         System.out.println("r1="+r1);
  45.                         System.out.println("r2="+r2);
  46.                 } catch (Exception e) {
  47.                         e.printStackTrace();
  48.                 }
  49.         }
  50. }
复制代码



运行结果:



最后的最后,用这种方法我们就可以调用android隐藏了的api的方法了。:lol
回复

使用道具 举报

279

积分

10

威望

9

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
279
QQ
发表于 2014-10-21 18:06:56        只看该作者  沙发
{:2_31:} 赞一个
回复

使用道具 举报

发表于 2014-10-22 09:14:29        只看该作者  板凳
这个不错,是用Firefly Android上运行的吗?
暴走的创客!
回复

使用道具 举报

63

积分

0

威望

0

贡献

技术小白

积分
63
发表于 2014-10-22 09:25:48        只看该作者  地板
暴走的阿Sai 发表于 2014-10-22 09:14
这个不错,是用Firefly Android上运行的吗?

这是java的特性,java语言都可以。根据这个特性,也可以深刻理解jni中用c代码调用java的方式。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表