代码:

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. ORA-12541: TNS: 无监听程序、监听程序当前无法识别连接描述符中请求的服务

    %ORACLE_HOME%\product\11.2.0\dbhome_1\NETWORK\ADMIN 这个文件夹下有SAMPLE 里面有详细配置说明 有3个文件, listener.ora sqln ...

  2. swift UITabelVIew - 纯代码自定义tabelViewCell

    // //  CustomTableViewCell.swift //  tab // //  Created by su on 15/12/7. //  Copyright © 2015年 tian ...

  3. Linux 基础教程 45-read命令

    基本用法     read命令主要用于从标准输入读取内容或从文件中读取内容,并把信息保存到变量中.其常用用法如下所示: read [选项] [文件] 选项 解释 -a array 将内容读取到数值中, ...

  4. BI使用者的角色

    把企业中的BI使用者的角色分成如下几类: 系统管理员:没有数据权限:没有功能权限:负责配置其他人的权限:BI专家:拥有所有数据权限:拥有多维分析,报表查看,报表开发,模型开发权限:负责开发和维护BI系 ...

  5. VS2017中对C++的单元测试

    安装Visual Studio 2017 由于平时都是用codeblock,因此电脑中没有装VS系列的IDE,就从安装开始吧 最开始安装的时候没有注意什么都没选,安装完了以后根本没有c++的编译器和各 ...

  6. handsontable-developer guide-cell type

    单元格类型:这里有很多没见过的用法,得好好总结一下 //预定义的类型Text Numeric Checkbox Date Select Dropdown Autocomplete Password H ...

  7. Lucene之模糊、精确、匹配、范围、多条件查询

    Lucene的查询方式很 丰富,对于数值类型的数据,采取TermRangeQuery的方式,对于String类型的,就可以采取TermQuery等,查询方式了,可以通过采取合适的查询方式,检索到数据. ...

  8. mysql 数据库或者表空间使用查询

    直接上语句 查所有数据库占用空间大小 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data ...

  9. NET npoi 合并单元值处理

    获取sheet中存在合并单元格总数,循环绑定值 // 得到一个sheet中有多少个合并单元格 int sheetMergeCount = sheet.NumMergedRegions; ; i < ...

  10. C# print pos winform

    先将pos机设置为默认 控制面板->打印机和传真->右键->服务器属性 首先创建 ClassPrint 对象 using System; using System.Drawing; ...