class B{
public static void main(String[] arg){
Class c_a = Class.forName(packageName + "." + "A");
Object obj_a = c_a.newInstance();
Method do_m = c_a.getDeclaredMethod("do",new Class[]{});
//prepare data for the mathod
do_m.invoke(obj_a, new Object[]{});
}
}

原本觉得反射挺麻烦的,其实仔细看,想一想,其实反射也是很自然的。就好在其它的C++的代码中,如果需要调用DLL的话,也是需要先声明调用的方法,然后再调用的。反射很类似这种情况。先声明一个方法

Method m = c_a.getDeclaredMethod("do", new Class[]{});

然后再调用

m.invoke(obj_a, new Object[]{});

反射其实利用起来很简单,但是却可以解决很多问题,不可不说这是一个很好的工具。虽然代码显得比较多,但是细想之下,其实很也是很自然的事情,并不需要努力去记忆什么东西。

import java.lang.reflect.Method;

public class InvokeMethods {
 public static void main(String[] args) {
  Employee emp = new Employee();
  Class cl = emp.getClass();//是Class,而不是class
  // /getClass获得emp对象所属的类型的对象,Class就是类的类          
  // /Class是专门用来描述类的类,比如描述某个类有那些字段,          
  // /方法,构造器等等!
  try {
   // /getMethod方法第一个参数指定一个需要调用的方法名称
   // /这里是Employee类的setAge方法,第二个参数是需要调用 
   // 方法的参数类型列表,是参数类型!如无参数可以指定null 
   // /该方法返回一个方法对象 
   Method sAge = cl.getMethod("setAge", new Class[] { int.class });//参数必须和方法中一样int和Integer,double和Double被视为不同的类型
   Method gAge = cl.getMethod("getAge", null);
   Method pName = cl.getMethod("printName",
     new Class[] { String.class });
   
   Object[] args1 = { new Integer(25) };
   // 参数列表
   // emp为隐式参数该方法不是静态方法必须指定
   sAge.invoke(emp, args1);
   Integer AGE = (Integer) gAge.invoke(emp, null);
   int age = AGE.intValue();
   System.out.println("The Employee Age is: " + age);
   Object[] args3 = { new String("Jack") };
   pName.invoke(emp, args3);
  } catch (Exception e) {
   e.printStackTrace();
  }
  System.exit(0);
 }
}

class Employee {
 // 定义一个员工类  
 public Employee() {
  age = 0;
  name = null;
 }
 // 将要被调用的方法  
 public void setAge(int a) {
  age = a;
 }
 // 将要被调用的方法  
 public int getAge() {
  return age;
 }
 // 将要被调用的方法
 public void printName(String n) {
  name = n;
  System.out.println("The Employee Name is: " + name);
 }
 private int age;
 private String name;
}

java的反射应用的更多相关文章

  1. JAVA的反射理解

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

  2. java的反射

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

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

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

  4. Java 类反射机制分析

    Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...

  5. java的反射机制

    一.java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ...

  6. Java:反射

    初识Java反射机制: 从上面的描述可以看出Java的反射机制使得Java语言可以在运行时去认识在编译时并不了解的类/对象的信息,并且能够调用相应的方法或修改属性的值.Java反射机制的核心就是允许在 ...

  7. Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别

    一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:   其中

  8. java笔记--反射进阶之总结与详解

    一.反射进阶之动态设置类的私有域 "封装"是Java的三大特性之一,为了能更好保证其封装性,我们往往需要将域设置成私有的, 然后通过提供相对应的set和get方法来操作这个域.但是 ...

  9. java笔记--反射机制之基础总结与详解

    一.反射之实例化Class类的5种方式: java的数据类型可以分为两类,即引用类型和原始类型(即基本数据类型). 对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象 ...

  10. Java中反射的三种常用方式

    Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...

随机推荐

  1. 蓝桥杯 算法训练 ALGO-116 最大的算式

    算法训练 最大的算式   时间限制:1.0s   内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量 ...

  2. AppScan代理扫描app/H5安全测试(没试过,记录在此)

    标签: 1.首先设置AppScan代理,设置如下:

  3. LINK : fatal error LNK1158: 无法运行“rc.exe”解决办法 and Visual Studio 2017 下载安装

    LINK : fatal error LNK1158: 无法运行“rc.exe” 首先下载软件包:https://pan.baidu.com/s/1L1N1sikXUaZZd-9nmZnwjA 第一个 ...

  4. Floyd最短路径算法(来自微信公众号“算法爱好者”改编)

    暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有4个城市8条公路,公路上的数字表 ...

  5. DevExpress 组件

    最近看到 伍华聪 的博客里, DevExpress 组件那个效果很好看,特别是 LookUpEdit GridLookUpEdit 这两个控件,完美改善了 WinForm 里的 ComboBox 今天 ...

  6. 最简单的TCP、UDP案例及各函数的详细解释

    TCP: server #include "stdafx.h" #include<iostream> #define BUF_SZIE 64 #include &quo ...

  7. kudu架构(转)

    特点:   High availability(高可用性).Tablet server 和 Master 使用 Raft Consensus Algorithm 来保证节点的高可用,确保只要有一半以上 ...

  8. centos6性能监控软件

    常用软件在此下载 http://rpm.pbone.net/ http://pkgs.org/ collectl 显示cpu\disk\network的实时信息http://dl.fedoraproj ...

  9. JavaScript中的数组和字符串

    知识内容: 1.JavaScript中的数组 2.JavaScript中的字符串 一.JavaScript中的数组 1.JavaScript中的数组是什么 数组指的是数据的有序列表,每种语言基本上都有 ...

  10. CYQ.Data 数据框架 使用篇一 入门指南---001

    原文链接:http://www.cyqdata.com/cyqdata/article-detail-411 本文针对V5版本进行修改于(2016-07-04) 下面是使用步骤: 一:下载框架DLL[ ...