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

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

例:

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

 1 public class Dog {
 2
 3     public void eat() {
 4         System.out.println("狗吃肉");
 5     }
 6
 7     public void run() {
 8         System.out.println("狗刨");
 9     }
10 }
public class Cat {

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

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

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

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

1         //之前的做法
2         Cat c = new Cat();
3         c.eat();
4         c.run();
5
6         Dog d = new Dog();
7         d.eat();
8         d.run();

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

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

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

  例:

1 ClassName=zl_Reclfect_05.Cat
2 MethodName=eat

  

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

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

 1 //反射的做法
 2
 3         //Properties类:
 4         //C、public String getProperty(String key):根据键获取值
 5
 6         //加载键值对数据
 7
 8         //首先创建个属性集类
 9         Properties p = new Properties();
10         //封装配置文件
11         FileReader file = new FileReader("class.txt");
12         //获取键的集合
13         //void load(InputStream inStream)  从输入流中读取属性列表(键和元素对)。
14         p.load(file);
15         file.close();
16
17         //获取键的值(做配置文件,肯定知道键的)
18         String classname = p.getProperty("ClassName");
19         String methodname = p.getProperty("MethodName");
20
21         //用反射来调用成员方法
22
23         //获取字节文件对象
24         Class c = Class.forName(classname);
25
26         //无参构造创建对象
27         Constructor con = c.getConstructor();
28         Object obj = con.newInstance();
29
30         //调用方法
31         Method m = c.getMethod(methodname);
32         m.invoke(obj);
33
34         //之后要想调用哪个类的哪个方法,只需要去配置文件更改相对应的键值就可以了。
时间: 2024-10-13 02:27:39

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

C# 通过反射执行已存在于类中的方法 通过字符串执行方法

通过字符串执行方法,在可能会调用不同方法时对不同方法进行调用 以下为实例: 1 public class ABC 2 { 3 string str = "通过反射执行的方法"; 4 //Class:要反射的Method所在类名 5 Type type = typeof(Class); 6 //funcName:进行反射的方法名称,第二个参数指定方法的搜索范围,当前为搜索private的方法,没有第二个参数则为public的方法 7 MethodInfo mt = type.GetMet

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

java关于反射机制的包主要在java.lang.reflect中,structs,hibernate,spring等框架都是基于java的反射机制. 下面是一个关于利用java的反射机制,实现了对私有属性和私有方法的访问的简单例子,希望能对你有所帮助. import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; public class Person { private

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

反射: JAVA语言的反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 如何解剖一个类: 要想解剖一个类,必须先要获取到该类的字节码文件对象. 而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象. 通俗的来说: 反射:就是通过class文件对象,去使用该文件中的成员变量,构造方法

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

代理:本来应该自己做的事情,却请了别人来做,被请的人就是代理对象. 举例:春季回家买票让人代买 动态代理: 在程序运行过程中产生的这个对象 而程序运行过程中产生对象其实就是我们刚才反射讲解的内容,所以,动态代理其实就是通过反射来生成一个代理 在Java中java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口就可以生成动态代理对象.JDK提供的代理只能针对接口做代理.我们有更强大的代理cglib Proxy类中的方法创建动态代

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

这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和运行结果.获取所有的方法使用Class类中getMethos()方法. 待获取的类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 package

使用Java的反射功能调用类中的方法

最近一直在搞Java的反射,今天使用反射调用方法时出现了很多问题,主要是没有详细参考官方API.所以走了很多弯路. 所以想把这个例子记下来,供自己也供他人学习. package com.mine.practice.reflect; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 使用反射调用类中的方法 * @author 2014-11-5 上午10:51:28

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

1. Arrays工具类中asList()方法的使用 1 public static <T> List<T> asList(T... a): 把数组转成集合 注意事项: 虽然可以把数组转成集合,但是集合的长度不能改变. 2. 代码示例: (1) 1 package cn.itcast_03; 2 3 import java.util.Arrays; 4 import java.util.List; 5 6 /* 7 * public static <T> List<

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

Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用,后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 2.局部变量与成员变量(也可叫做全局变量) 3.Static关键字的用法 a.成员变量被static修饰后的所有类的共享属性 b.方法被static修饰之后,在本类内调用的类名省略问题;以及不用Static,即使在本类内也必须先实例化 4.This关键字的用法 this:是当前类的对象引用.简单的记,它就代表当前

第6章 Java类中的方法

1.如何定义java的方法 什么是方法:方法使用来解决一类问题的代码集合,是一个功能模块在类中定义个方法的方法是: 访问修饰符 返回值类型 方法名(参数列表){ 方法体 } 1.访问修饰符,是限制该方法允许被访问的权限范围,可以是:public,protected,private还可以省略2.返回值,如果有返回值需要在这里说明类型,并用return返回,如果没有返回值,使用void3.方法名,使用标识符命名4.参数列表,传递给方法的参数列表 根据返回值和参数的不同,方法大致上分为一下四类:? 无