代码:

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的更多相关文章

  1. 利用java反射机制实现读取excel表格中的数据

    如果直接把excel表格中的数据导入数据库,首先应该将excel中的数据读取出来. 为了实现代码重用,所以使用了Object,而最终的结果是要获取一个list如List<User>.Lis ...

  2. JAVA反射机制_获取字节码文件对象

    是在运行状态中,对于任意一个类 (class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...

  3. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

    作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...

  4. Java反射机制详解

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反 ...

  5. [转]Java反射机制详解

    目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ·获取一个对象的父类与实现的接口 ·获取某个类中的全部构造函数 - 详 ...

  6. Java反射机制demo(七)—反射机制与工厂模式

    Java反射机制demo(七)—反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...

  7. Java反射学习:深入学习Java反射机制

    一.Java反射的理解(反射是研究框架的基础之一) Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的 ...

  8. 面试题之------Java 反射机制

    一.反射机制概述 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法.这种在运行时动态的获取信息以及动态调用对象的方法 ...

  9. 【转载】Java反射机制详解

    转自:http://baike.xsoftlab.net/view/209.html#3_8 1反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对 ...

随机推荐

  1. HDU1233 还是畅通工程 2017-04-12 19:49 64人阅读 评论(0) 收藏

    还是畅通工程 Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  2. handsontable-integrations

    jquery:可以通过$选择元素 bootstrap:使用bootstrap,有些样式需要重置 backbone:整合

  3. Tempdb--monitoring and troubleshooting

    TempDB用来存放临时表.全局临时表.表变量以及排序或HASH等操作引发的中间结果集 TempDB在每次实例重启时重新创建,TempDB数据库文件的初始化大小取决于Model数据库的文件大小或显示A ...

  4. jenkins yum 安装

    jenkins yum 安装 jenkins 用过yum的方式安装:服务的启动和关闭等管理会很方便,版本升级也会变的很容易. 参考官方的说明:https://wiki.jenkins-ci.org/d ...

  5. win server 2012 R2 你需要先安装 对应于 KB2919355 的更新

    产生阻滞的问题: 你需要先安装 对应于 KB2919355 的更新 ,然后才可在 Windows 8.1 或 Windows Server 2012 R2 上安装此产品. 官方说法(这些 KB 必须按 ...

  6. 基于JSP的在线考试系统-JavaWeb项目-有源码

    开发工具:Myeclipse/Eclipse + MySQL + Tomcat 系统简介: 网络考试系统主要用于实现高校在线考试,基本功能包括:自动组卷.试卷发布.试卷批阅.试卷成绩统计等.本系统结构 ...

  7. TCP Server有两个套接字

     TCP服务器有一个特殊的套接字,欢迎运行在任意主机上的客户进程的某些初始接触. 三次握手期间,客户进程敲服务器的欢迎之门.该服务器"听到"敲门时,它将生成一个新的TCP套接字对 ...

  8. Oracle中ROWNUM的使用技巧

    ROWNUM是一种伪列,它会根据返回记录生成一个序列化的数字.利用ROWNUM,我们可以生产一些原先难以实现的结果输出,但因为它是伪列的这个特殊性,我们在使用时也需要注意一些事项,不要掉入“陷阱”.下 ...

  9. vue封装插件并发布到npm上

    vue封装插件并发布到npm上 项目初始化 首先,要创建项目,封装vue的插件用webpack-simple很合适,vue init webpack-simple 项目名称此命令创建我们的项目的目录, ...

  10. CSS01--概述与选择器

    CSS:Cascading Style Sheets,层叠样式表.我们之前已经说过,HTML解决的是网页内容(结构)的问题,而CSS立足于网页的表现方面的问题,则样式定义如何显示HTML标签,js负责 ...