zoukankan      html  css  js  c++  java
  • 反射?它是什么?浅谈反射

    一开始学习反射的时候,有点不太理解什么是反射,后来我查了一下关于反射得理解

    反射是什么?

    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();
                }
            
            }
     
  • 相关阅读:
    观察者模式
    系统高并发网络图书室
    java keytool
    ant 脚本使用技巧
    Unsupported major.minor version 51.0 错误解决方案
    Oracle的网络监听配置
    win8 JDK环境变量不生效
    javax.mail
    xmlrpc
    网络时间同步
  • 原文地址:https://www.cnblogs.com/carsar/p/5538690.html
Copyright © 2011-2022 走看看