一开始学习反射的时候,有点不太理解什么是反射,后来我查了一下关于反射得理解
反射是什么?
1 定义:
- JAVA Reflection 我给它的定义就是动态的调用的一个对象的方法,或者动态的获得一个对象的属性
- 我查了一下关于百度的介绍
-
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。 但是JAVA有着一个非常突出的动态相关机 制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载 一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其 methods。这是百度关于他的说明有点绕反正大体就是一开始定义的说明下面就是源于反射的说明
public class Demo2_Reflect { /** * 榨汁机(Juicer)榨汁的案例 * 分别有水果(Fruit)苹果(Apple)香蕉(Banana)桔子(Orange)榨汁(squeeze) * @throws Exception */ public static void main(String[] args) throws Exception { /*Juicer j = new Juicer(); //j.run(new Apple()); j.run(new Orange());*/ BufferedReader br = new BufferedReader(new FileReader("config.properties"));//创建输入流对象,关联配置文件 Class<?> clazz = Class.forName(br.readLine()); //读取配置文件一行内容,获取该类的字节码对象 Fruit f = (Fruit) clazz.newInstance(); //通过字节码对象创建实例对象 Juicer j = new Juicer(); j.run(f); } } interface Fruit { //定义一个接口 public void squeeze(); } class Apple implements Fruit { //定义一个Apple类 继承接口 public void squeeze() { System.out.println("榨出一杯苹果汁儿"); } } class Orange implements Fruit { //定义一个Orange类继承接口 public void squeeze() { System.out.println("榨出一杯桔子汁儿"); } } class Juicer { //定义一个Juicer类 public void run(Fruit f) { f.squeeze(); } }
-