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

例:

  有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. “破解大牛是怎么炼成的”之壳与ESP定律

    文章难易度:★★★ 文章阅读点/知识点:逆向破解 文章作者:Sp4ce 文章来源:i春秋   关键字:网络 信息安全技术 本文参与i春秋社区原创文章奖励计划,未经许可禁止转载! 一.前言 通过前面几篇 ...

  2. Javascript - Arraylike的7种实现

    jQuery的崛起让ArrayLike(类数组)在javascript中大放异彩,它的出现为一组数据的行为(函数)扩展提供了基础. 类数组和数组相似,具有数组的某些行为,但是它相比数组可以更加自由的扩 ...

  3. Android Studio 更换国内源下载依赖库

    我的博客:http://daycoding.com 小小程序猿 由于国内GFW的原因,经常导致android studio 莫名其妙的编译不了,多数原因是由于不能下载依赖库 Gradle支持三种不同的 ...

  4. 工作中碰到的js问题(disabled表单元素不能提交到服务器)

    今天碰到一个奇葩的问题,asp页面表单提交后,有一个文本框<input type="text" name="phone" id="phone&q ...

  5. android 显示 PDF 文件

    1.开源项目地址 : https://github.com/JoanZapata/android-pdfview 2.引用 compile 'com.joanzapata.pdfview:androi ...

  6. iOS关于启动页自定义特殊处理

    平常开发中对于启动页可能会有一些特别的要求,比如在启动页加动画或加一些按键可以响应事件等,最近项目中要在启动页增加版本号,因为版本号是不断的改变,所以要动态实现把它加到启动页上:在XCode上面配置的 ...

  7. NSoperation用法详解及与GCD的比较

    NSInvocationOperation // 基于一个对象和selector来创建操作.如果你已经有现有的方法来执行需要的任务,就可以使用这个类 NSInvocationOperation * o ...

  8. 学习Coding-iOS开源项目日志(四)

    Hello,大家好,好久没写博客了,今天再次来研究研究Coding源码,久违了. 前 言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的项目.本篇开始会陆续更新本人对git ...

  9. (转) 一步一步学习ASP.NET 5 (五)- TypeScript

    转发:微软MVP 卢建晖 的文章,希望对大家有帮助.原文:http://blog.csdn.net/kinfey/article/details/44568971 编者语 : 人总会多次犯错,历史上告 ...

  10. Java Security:公钥私钥、数字签名、消息摘要是什么

    1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊----每人一把. 3. 苏珊要给鲍勃写一封保密的信.她写完后用鲍勃的公钥加密,就可以达到保密的 ...