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

例:

  有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. AE选中要素

    private void 选中要素ToolStripMenuItem_Click(object sender, EventArgs e) { if(axMapControl2.LayerCount&l ...

  2. iOS开发之──传感器使用 (转载)

    在实际的应用开发中,会用到传感器,下面首先介绍一下iphone4的传感器,然后对一些传感器的开发的API作一简单介绍. AD:WOT2015 互联网运维与开发者大会 热销抢票 在实际的应用开发中,会用 ...

  3. Android 隐式意图的配置

    本文地址:http://www.cnblogs.com/wuyudong/p/5677473.html,转载请注明源地址. <Android 显示意图激活另外一个Actitity>一文介绍 ...

  4. iOS UIProgressView控件用法

    IOS中进度条控件的用法总结. 进度条控件是IOS开发中一个简单的系统控件,使用总结如下: 初始化一个进度条: - (instancetype)initWithProgressViewStyle:(U ...

  5. WPF学习之路(十四)样式和模板

    样式 实例: <Window.Resources> <Style x:Key="BtnStyle"> <Setter Property=" ...

  6. 关于JAVA中子类和父类的构造方法

    本篇文章总结了一些关于Java构造方法的常见问题. 为什么创建了一个子类对象会调用其父类的构造方法 如下代码示例: package simplejava; class Super { String s ...

  7. 基于分布式、服务化的maven项目文件规划

    引言 此文不是纯粹介绍maven概念,而是介绍一个具体的maven项目文件规划 这个规划可能适合于研发比较复杂的业务,这些业务有分布式和服务化的需要. 这个规划能够解决因为分布式和服务化要求而引起的项 ...

  8. Oracle行内链接不会引起USER_TABLES中CHAIN_CNT值变化

    前几天和群里网友讨论一个关于行内链接(intra-block chaining)的问题,问题非常有意思,恰好今天有空,顺便整理了一下这些知识点. 问题描述:下面SQL,创建一个超过255列的表(实际为 ...

  9. pentaho cde 封装自定义图形控件,动态传参

    在实际项目中经常会用到将经常用到的图形表格组成一个控件,其他地方直接调用,类似于服务器开发的接口,而现在就需要将一些常用的图形做封装,这样就不必重复多次创建相同的内容. 下面就简单的定义一个自定义柱形 ...

  10. SQL Server 2012中Task是如何调度的?

    SQL Server 2012中Task是如何调度的?[原文来自:How It Works: SQL Server 2012 Database Engine Task Scheduling]     ...