反射:类,构造器,方法使用
2016-07-13 00:04
507 查看
public class Demo { public static void main(String [] args) throws Exception { try { //通过全限定名找到class Class t = Class.forName("com.honjane.demo.javademo.ReflectModel"); //通过class反射出构造器 构造器参数new Class[]{String.class} Constructor constructor = t.getConstructor(new Class[]{String.class}); //构造出ReflectModel ReflectModel model = (ReflectModel)constructor.newInstance("nihao"); //获得所有方法 Method[] methods = t.getMethods(); System.out.println(t); for (int i = 0;i<methods.length;i++) { System.out.println(methods[i]); } //获得方法名getAge的方法 无参 Method method = t.getMethod("getAge"); // method.invoke(model); //获得方法名setAge的方法 参数int型 Method method1 = t.getMethod("setAge",int.class); method1.invoke(model,111); //获得方法名setName的方法 参数String型 Method method2 = t.getMethod("setName", String.class); method2.invoke(model,"张三"); //获得方法名setType的私有方法 参数int型 需要使用getDeclaredMethod,且需要修改权限Accessible Method method3 = t.getDeclaredMethod("setType",int.class); method3.setAccessible(true); //invoke(obj,prams) obj为改对象,prams为方法参数 method3.invoke(model,12); } catch (Exception ex) { // handle exception case } } }
public class ReflectModel { public String name; private int age; public ReflectModel(String name) { this.name = name; System.out.println("ReflectModel:"+name); } public int getAge() { System.out.println("-------------------"); return age; } public void setAge(int age) { this.age = age; System.out.println("------------------age:"+age); } public void setName(String name) { this.name = name; System.out.println("------------------name:"+name); } private void setType(int type) { System.out.println("------------------type:"+type); } }
运行结果:
ReflectModel:nihao class com.honjane.demo.javademo.ReflectModel public void com.honjane.demo.javademo.ReflectModel.setName(java.lang.String) public int com.honjane.demo.javademo.ReflectModel.getAge() public void com.honjane.demo.javademo.ReflectModel.setAge(int) public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException public final void java.lang.Object.wait() throws java.lang.InterruptedException public boolean java.lang.Object.equals(java.lang.Object) public java.lang.String java.lang.Object.toString() public native int java.lang.Object.hashCode() public final native java.lang.Class java.lang.Object.getClass() public final native void java.lang.Object.notify() public final native void java.lang.Object.notifyAll() ------------------- ------------------age:111 ------------------name:张三 ------------------type:12
相关文章推荐
- Linux学习笔记--常用快捷键
- Android Activity管理机制详解
- Android自定义View实现竖直跑马灯效果案例解析
- java正则替换img标签中src值的方法
- Python中的变量和作用域详解
- 正则表达式常用用法汇总
- Mysql数据库配置
- Oracle数据库的启动和关闭顺序实例讲解
- 产品运营必备技能:如何将屎一样的功能推给用户?
- 内容创业有四个大坑:广告、电商、IP和估值!
- 从这3点中看如何靠微信文章引爆朋友圈?
- hdu-1241Oil Deposits(dfs 找出不同的区块)
- 运营喵的心里不能说的“痛”,你中枪了么?
- 从人性出发,5步挖掘用户需求
- 通吃国民大叔、女神和小鲜肉,小米的强势反弹来了
- Linux 下如何为登录和 sudo 设置双因子认证
- 图解 Ubuntu Server 16.04 LTS 上安装 LAMP
- Linux 文件权限总结
- 常用、有用网址整理
- 小心别落入正则回溯陷阱