java 27 - 6 反射之 通过配置文件运行类中的方法
在以前,如果我们想要调用一个类中的方法,只能这样子:
例:
有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 反射之 通过配置文件运行类中的方法的更多相关文章
- 【转】【Java】利用反射技术,实现对类的私有方法、变量访问
java关于反射机制的包主要在java.lang.reflect中,structs,hibernate,spring等框架都是基于java的反射机制. 下面是一个关于利用java的反射机制,实现了对私 ...
- java 27 - 9 反射之 动态代理的概述和实现
代理:本来应该自己做的事情,却请了别人来做,被请的人就是代理对象. 举例:春季回家买票让人代买 动态代理: 在程序运行过程中产生的这个对象 而程序运行过程中产生对象其实就是我们刚才反射讲解的内容,所以 ...
- java 27 - 2 反射之 反射的概述以及获取Class文件对象的方式
反射: JAVA语言的反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调 ...
- Java反射机制demo(五)—获得并调用一个类中的方法
Java反射机制demo(五)—获得并调用一个类中的方法 这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和 ...
- java反射 顺序输出类中的方法
java反射可以获取一个类中的所有方法,但是这些方法的输出顺序,并非代码的编写顺序. 我们可以通过自定义一个注解来实现顺序输出类中的方法. 首先,先写一个类,定义增删改查4个方法 public cla ...
- Java Class与反射相关的一些工具类
package com.opslab.util; import org.apache.log4j.Logger; import java.io.File;import java.io.IOExcept ...
- Java基础知识强化之集合框架笔记33:Arrays工具类中asList()方法的使用
1. Arrays工具类中asList()方法的使用 public static <T> List<T> asList(T... a): 把数组转成集合 注意事项: 虽然可以把 ...
- Java中主类中定义方法加static和不加static的区别
Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用(类名.方法),后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 ...
- 第6章 Java类中的方法
1.如何定义java的方法 什么是方法:方法使用来解决一类问题的代码集合,是一个功能模块在类中定义个方法的方法是: 访问修饰符 返回值类型 方法名(参数列表){ 方法体 } 1.访问修饰符,是限制该方 ...
随机推荐
- Visual Studio 2013 的 Xamarin 安装教程
Xamarin 配置手册和离线包下载 http://pan.baidu.com/s/1eQ3qw8a 具体操作: 安装前提条件 1. 安装Visual Studio 2013,安装过程省略,我这里安 ...
- 从angularJS看MVVM
javascript厚积薄发走势异常迅猛,导致现在各种MV*框架百家争雄,MVVM从MVC演变而来,为javascript注入了全新的活力.我工作的业务不会涉及到angularJS[ng]这么重量级的 ...
- Eclipse的自动排版设置(format)
Java排版: 主要是在文件保存时自动触发排版等规则,省掉反复操作快捷键 Ctrl+Shift+F 的步骤.在 eclipse 中选择 Window-> Preferences- ...
- 【代码笔记】iOS-背景色随机显示
一,效果图. 二,工程图. 三,代码. RootViewController.h RootViewController.m - (void)viewDidLoad { [super viewDidLo ...
- OC self = [super init] , 点语法 , @property
OC self = [super init] , 点语法 , @property 构造方法为啥这么写? self = [super init]; [super init] 的结果可能有三种: 第一种: ...
- [读书笔记] CSS权威指南2: 结构和层叠
层叠样式表中最基本的一个方面可能就是层叠——冲突的声明要通过这个层叠过程排序,并由此确定最终的文档表示.这个过程的核心是选择器及其相关声明的特殊性,以及继承机制. 特殊性 对于每个规则,用户代理会计算 ...
- JAVA中的注解小结
以下内容参考java编程思想-4,jdk版本为jdk5.0,有点老-_-||| 什么是注解 JAVA SE5引入,也称元数据,可以直接添加到代码中,用来完整描述程序所需的信息,而这些信息是无法用Jav ...
- 【JSP】JSP基础学习记录(二)—— JSP的7个动作指令
2.JSP的7个动作指令: 动作指令与编译指令不同,编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的动作.编译指令在将JSP编译成Servlet时起作用:而处理指令通常可替换成JSP ...
- 遍历map的常用方法
Map< String, String> map = new HashMap<String, String>(); map.put("a", " ...
- EF深入系列--Code First
首先是创建DbContext,有两种途径 ①手动编写DbContext代码,同时还要记得去配置文件中添加connectionStrings public class BooksContext : Db ...