java反射机制_读取properties
代码:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; /**
* 反射特点:
* 可以在运行期间,动态加载一个类进来,动态new一个对象
* 动态了解对象内部的结构,动态调用这个对象的某一些方法
* 反射好处:
* 在配置文件里只写类的名字,可以动态把类加载进来
* @author Administrator
*
*/
public class TestReflection {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ //String str = "T";
String str = ReadProperties.getClassName(); //把类load到内存,返回Class类型。
Class cls = Class.forName(str);
Object o = cls.newInstance(); //new 一个对象 //得到cls类所有的public方法
Method[] methods = cls.getMethods();
/*//读取所有方法名
for(Method m :methods){
System.out.println(m.getName());
}*/ //调用方法 m2
for(Method m :methods){
if(m.getName().equals("m2")){
//可变参数的方法,o是new的对象
m.invoke(o); } if(m.getName().equals("m1")){
//可变参数的方法
m.invoke(o,1,9);
//得到m1方法的参数类型
for(Class paramType : m.getParameterTypes()){
System.out.println(paramType.getName());
}
}
if(m.getName().equals("getS")){
//得到getS方法的返回值类型
Class returnType = m.getReturnType();
System.out.println("getS returnType is :"+returnType); }
} }
} class T {
static{
//测试是否类是否load到内存
System.out.println("T loaded...");
} public T(){
//测试T是否被调用
System.out.println("T constructed...");
}
int i;
String s; public void m1(int i,int j) {
this.i = i+j;
System.out.println("i ="+this.i);
}
public void m2(){
System.out.println("m2 invoked...");
} public String getS() {
return s;
}
}
读取properties配置的代码:
配置文件内容:
Class=T
import java.io.InputStream;
import java.util.Properties;
public class ReadProperties { static private String className = null;
static{
loads();
}
synchronized static public void loads(){
if(className == null)
{
InputStream is = ReadProperties.class.getResourceAsStream("/test.properties");
Properties dbProps = new Properties();
try {
dbProps.load(is);
className = dbProps.getProperty("Class"); }
catch (Exception e) {
System.err.println("不能读取属性文件. " +
"请确保配置文件在CLASSPATH指定的路径中");
}
}
}
public static String getClassName() {
if(className==null)
loads();
return className;
} }
运行结果:
T loaded...
T constructed...
m2 invoked...
i =10
int
int
getS returnType is :class java.lang.String
java反射机制_读取properties的更多相关文章
- 利用java反射机制实现读取excel表格中的数据
如果直接把excel表格中的数据导入数据库,首先应该将excel中的数据读取出来. 为了实现代码重用,所以使用了Object,而最终的结果是要获取一个list如List<User>.Lis ...
- JAVA反射机制_获取字节码文件对象
是在运行状态中,对于任意一个类 (class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...
- 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...
- Java反射机制详解
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反 ...
- [转]Java反射机制详解
目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ·获取一个对象的父类与实现的接口 ·获取某个类中的全部构造函数 - 详 ...
- Java反射机制demo(七)—反射机制与工厂模式
Java反射机制demo(七)—反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...
- Java反射学习:深入学习Java反射机制
一.Java反射的理解(反射是研究框架的基础之一) Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的 ...
- 面试题之------Java 反射机制
一.反射机制概述 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法.这种在运行时动态的获取信息以及动态调用对象的方法 ...
- 【转载】Java反射机制详解
转自:http://baike.xsoftlab.net/view/209.html#3_8 1反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对 ...
随机推荐
- shell脚本生成xml文件
今天把这段时间学习完shell后完成工作上的一个小案件整理了一下,分享给大家! 说来也巧了,作为一个刚刚毕业半年的菜鸟,进入公司后,听公司的大牛推荐学习linux--”鸟哥的私房菜“,基本上是从去年8 ...
- UVALive - 6434 —(思维题)
题意:给出了你由n个数组成的序列,让你将这个序列分为成m个集合,使得每一个集合的最大值减最小值的差相加最小.(如果某集合只有一个数字,则最大值减最小值为0) . 思路:首先我们不难想到,最优的分配方法 ...
- 12.1.2: How to Modify and Enable The Configurable Home Page Delivered Via 12.1.2 (Doc ID 1061482.1)
In this Document Goal Solution References APPLIES TO: Oracle Applications Framework - Ver ...
- sqlhelper写调用存储过程方法
public static object Proc(string ProcName, SqlParameter[] parm) { conn.Open(); //最后一个参数为输出参数 parm[pa ...
- Jenkins+.Net Core+Git集成发布 - SkyMallCore快速开发平台
准备工作:安装 Jenkins+java 直接百度安装,在此忽略 dotnet sdk(iis部署已经安装) 一:windows 部署到IIS 首先搭建IIS,站点应用程序池选择 ‘无托管代码’ 安装 ...
- Redis数据库结构与读写原理
此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.数据库结构 每一个redis服务器内部的数据结构都是一个redisDb[],该数组的大小可以在redi ...
- ClamAV资料链接
1.http://wiki.ubuntu.org.cn/index.php?title=ClamAV&variant=zh-cn Ubuntu的wiki下对ClamAV的大致介绍,包括使用. ...
- CF553C Love Triangles
题目链接 题意:给定n个点,给出一些边权为0/1的边,构造完全图,满足对于任何一个三元环,三条边权和为奇.求符合条件的完全图数量,对\(1e9+7\)取模. 分析:其实原题给定的边权是love/hat ...
- junit所需要的jar包
hamcrest-core-1.1.jar junit-4.12.jar http://central.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/ ...
- C# RDLC报表不出现预览窗体直接输出到打印机
#region 直接打印区域 /// <summary> /// 直接打印到打印机 /// </summary> /// <param name="report ...