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();
                }
            
            }
     
  • 相关阅读:
    某个牛人做WINDOWS系统文件详解
    常用ASP脚本程序集锦
    LINUX基础:文件安全与权限
    proftpd+mysql+quota
    apache2.0.49tomcat5.0.19jk2建立virtualHost
    URL Redirection(转) Anny
    顶级域名后缀列表(转) Anny
    \u4E00\u9FA5意义 Anny
    How to POST Form Data Using Ruby(转) Anny
    How to get rid of 'Enter password to unlock your login keyring' in Ubuntu(转) Anny
  • 原文地址:https://www.cnblogs.com/carsar/p/5538690.html
Copyright © 2011-2022 走看看