在以前,如果我们想要调用一个类中的方法,只能这样子:

例:

  有Cat和Dog两个类,里面有eat和run两个成员方法:

 public class Dog {

     public void eat() {
System.out.println("狗吃肉");
} public void run() {
System.out.println("狗刨");
}
}
public class Cat {

    public void eat() {
System.out.println("猫吃鱼");
} public void run() {
System.out.println("猫爬树");
}
}

在之前,如果想要调用类里面的方法,只能这样:

这样做,有个缺点,如果类多了,方法多了,以后的更改很麻烦。

         //之前的做法
Cat c = new Cat();
c.eat();
c.run(); Dog d = new Dog();
d.eat();
d.run();

那么,为了以后的更改的方便。

创建个对应的配置文件,运用反射来访问这些方法:

配置文件:(Properties 类表示了一个持久的属性集。里面的内容就是键值对  “aaaa=bbb ”)

  例:

 ClassName=zl_Reclfect_05.Cat
MethodName=eat

  

  创建个反射的类来通过配置文件调用类中的方法:

之后要想调用哪个类的哪个方法,只需要去配置文件更改相对应的键值就可以了。

 //反射的做法

         //Properties类:
//C、public String getProperty(String key):根据键获取值 //加载键值对数据 //首先创建个属性集类
Properties p = new Properties();
//封装配置文件
FileReader file = new FileReader("class.txt");
//获取键的集合
//void load(InputStream inStream) 从输入流中读取属性列表(键和元素对)。
p.load(file);
file.close(); //获取键的值(做配置文件,肯定知道键的)
String classname = p.getProperty("ClassName");
String methodname = p.getProperty("MethodName"); //用反射来调用成员方法 //获取字节文件对象
Class c = Class.forName(classname); //无参构造创建对象
Constructor con = c.getConstructor();
Object obj = con.newInstance(); //调用方法
Method m = c.getMethod(methodname);
m.invoke(obj); //之后要想调用哪个类的哪个方法,只需要去配置文件更改相对应的键值就可以了。

java 27 - 6 反射之 通过配置文件运行类中的方法的更多相关文章

  1. 【转】【Java】利用反射技术,实现对类的私有方法、变量访问

    java关于反射机制的包主要在java.lang.reflect中,structs,hibernate,spring等框架都是基于java的反射机制. 下面是一个关于利用java的反射机制,实现了对私 ...

  2. java 27 - 9 反射之 动态代理的概述和实现

    代理:本来应该自己做的事情,却请了别人来做,被请的人就是代理对象. 举例:春季回家买票让人代买 动态代理: 在程序运行过程中产生的这个对象 而程序运行过程中产生对象其实就是我们刚才反射讲解的内容,所以 ...

  3. java 27 - 2 反射之 反射的概述以及获取Class文件对象的方式

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

  4. Java反射机制demo(五)—获得并调用一个类中的方法

    Java反射机制demo(五)—获得并调用一个类中的方法 这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和 ...

  5. java反射 顺序输出类中的方法

    java反射可以获取一个类中的所有方法,但是这些方法的输出顺序,并非代码的编写顺序. 我们可以通过自定义一个注解来实现顺序输出类中的方法. 首先,先写一个类,定义增删改查4个方法 public cla ...

  6. Java Class与反射相关的一些工具类

    package com.opslab.util; import org.apache.log4j.Logger; import java.io.File;import java.io.IOExcept ...

  7. Java基础知识强化之集合框架笔记33:Arrays工具类中asList()方法的使用

    1. Arrays工具类中asList()方法的使用 public static <T> List<T> asList(T... a): 把数组转成集合 注意事项: 虽然可以把 ...

  8. Java中主类中定义方法加static和不加static的区别

     Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用(类名.方法),后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 ...

  9. 第6章 Java类中的方法

    1.如何定义java的方法 什么是方法:方法使用来解决一类问题的代码集合,是一个功能模块在类中定义个方法的方法是: 访问修饰符 返回值类型 方法名(参数列表){ 方法体 } 1.访问修饰符,是限制该方 ...

随机推荐

  1. .Net控件经验集合

    一.DropDownList默认选中 开始的笨方法: foreach (ListItem item in DropDownList1.Items)                       {    ...

  2. Ubuntu 安装Samba服务器

    1.安装 sudo apt-get update sudo apt-get install samba (如果出现库依赖问题可用命令sudo apt-get install samba libwbcl ...

  3. TextView 字数限制

    给大家推荐一个  无bug的 字数限制   http://blog.csdn.net/u012460084/article/details/50377928

  4. MyCat:取代Cobar数据库中间件

    什么是MyCAT?简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的“大数据库集群” 支持事务.ACID.可以替代Mysql的加强版数据库 ? 一个可以视为“Mysql”集群的企业级数据库 ...

  5. 各类 HTTP 返回状态代码详解

    完整版 1**(信息类):表示接收到请求并且继续处理 100——客户必须继续发出请求 101——客户要求服务器根据请求转换HTTP协议版本 2**(响应成功):表示动作被成功接收.理解和接受 200— ...

  6. Java数组的12个常用方法

    以下是12个关于Java数组最常用的方法,它们是stackoverflow得票最高的问题. 声明一个数组 String[] aArray = new String[5]; String[] bArra ...

  7. 0003 64位Oracle11gR2不能运行SQL Developer的解决方法

    "应用程序开发"下的"SQL Developer"双击不可用,出现“Windows正在查找SQLDEVELOPER.BAT"的提示,如下图: 搜索博客 ...

  8. docker基础

    docker1.映射主机目录到镜像: $ docker run -v /data:/mnt -i -t image-id bash移除:docker rm -v 2.停止所有的container,这样 ...

  9. Android程序函数 将assets文件夹下的文件复制到手机的sd卡中(包括子文件夹)

    最近在做个功能是将asset文件夹下的所有文件(包括子文件)全部拷贝出来到指定目录下.所用的方法无非是用AssetManager.但是这里 有个问题是也要讲子文件夹和子文件都要拷贝出来.到网上Goog ...

  10. windows文件关联、打开方式列表之修改注册表攻略

    这里全是修改注册表的方式.网上找了半天,有的仅有添加文件关联的方法,却没有添加到打开方式列表里面的方法:有的有添加到文件列表的方法,却是使 用控制面板->文件夹选项的.好难得才找齐所有,从添加文 ...