四、什么是反射

1.反射理论

2.反射实践

(1)创建Robot类

public class Robot {
private String name;
public void sayHi(String helloSentence){
System.out.println(helloSentence + " " + name);
}
private String throwHello(String tag){
return "Hello " + tag;
}
static {
System.out.println("Hello Robot");
}
}

(2)各种操作

public class ReflectSample {
public static void main(String[] args) throws Exception{
Class rc = Class.forName("com.interview.javabasic.reflect.Robot");
Robot r = (Robot) rc.newInstance();
System.out.println("Class name is " + rc.getName()); //调用私有方法rc.getDeclaredMethod
Method getHello = rc.getDeclaredMethod("throwHello", String.class);
getHello.setAccessible(true);
Object str = getHello.invoke(r, "Bob");
System.out.println("getHello result is " + str); //调用PUBLIC方法rc.getMethod
Method sayHi = rc.getMethod("sayHi", String.class);
sayHi.invoke(r, "Welcome"); //设置私有属性
Field name = rc.getDeclaredField("name");
name.setAccessible(true);
name.set(r, "Alice");
sayHi.invoke(r, "Welcome"); }
}

最新文章

  1. JavaScript系列文章:从let和const谈起
  2. 【 2013 Multi-University Training Contest 2 】
  3. Knockout.Js官网学习(value绑定)
  4. yii2中表单的字段标签名称
  5. linux bash脚本把A和B文件中有相同ID的B文件的内容输出到文件C
  6. 【poj3693】Maximum repetition substring(后缀数组+RMQ)
  7. codevs 3044 矩形面积求并 (扫描线)
  8. html系列教程--embed fieldset legend figure figurecaption
  9. java多线程系列(一)
  10. 【Windows 10 应用开发】细说文本资源文件(resw)
  11. git常用命令速查
  12. 关于React Native 安卓首屏白屏优化
  13. C# — 调用dll出现试图加载不正确格式的程序问题
  14. 深度学习基础(三)NIN_Network In Network
  15. Standalone的更改方式
  16. [UE4]解决角色影子的问题
  17. Java编程的逻辑 (20) - 为什么要有抽象类?
  18. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十五:FIFO储存模块(同步)
  19. webpack创建library及从零开始发布一个npm包
  20. HBase 架构与工作原理2 - HBase 组件

热门文章

  1. Linux就该这么学——新手必须掌握的命令之文件目录管理命令组
  2. gitignore忽略处理
  3. LKM rootkit:Reptile学习
  4. 数值优化(Numerical Optimization)学习系列-无梯度优化(Derivative-Free Optimization)
  5. Lua格式讲解
  6. React高阶组件学习笔记
  7. Laravel 实现多级控制器(实现Api区分版本)
  8. css,使两个在同一行内的display:inline-block的div顶部对齐。
  9. MySql学习笔记【二、库相关操作】
  10. JDBC概述及JDBC完成对Oracle的增删改查