【BigData】Java基础_反射

1.反射是什么?

比较官方点的解释

  • Java反射机制是在运行状态中
  • 对于任意一个类,都能知道这个类的所以属性和方法
  • 对于任何一个对象,都能够调用它的任何一个方法和属性
  • 这样动态获取新的以及动态调用对象方法的功能就叫做反射

个人理解:

反射也是自己看了教程以后发现比较有趣的一个东西,此处写的是个人对于反射的理解,个人理解的反射就是:不管你的实现类写好没,我们约定好定义好一个配置文件放在那,我需要调用到你的方法的时候我就从配置文件中动态获取,这样一来,我们之间的开发就不会冲突,并且开发完成后,我的代码也不需要动,只需要修改配置文件即可。

2.案例解释

代码结构图:

(1)TestReflect.java (测试类的main方法)

package cn.test.logan.day10.reflect;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;

/**
 * 一个典型的面向接口编程的案例
 * @author QIN
 *
 */
public class TestReflect {
    public static void main(String[] args) throws Exception {
        HashMap<String, String> applicationContext = new HashMap<>();

        /**
         * 解析配置文件,将配置文件中的接口名与其需要调用的实现类名存储到hashmap中
         */
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("d:/mapping.txt")));
        String line = "";
        while((line = br.readLine())!=null){
            String[] arr = line.split(":");
            applicationContext.put(arr[0], arr[1]);
        }

        /**
         * 调SayInterface中的实现类的say方法
         */
        Class<?> forNameSay = Class.forName(applicationContext.get("SayInterface"));
        SayInterface SayInstance = (SayInterface)forNameSay.newInstance();
        SayInstance.say();

        /**
         * 调EatInterface中的实现类的eat方法
         */
        Class<?> forNameEat = Class.forName(applicationContext.get("EatInterface"));
        EatInterface EatInstance = (EatInterface)forNameEat.newInstance();
        EatInstance.eat();

    }
}

(2)SayInterface.java(say接口)

package cn.test.logan.day10.reflect;
/**
 * say接口
 * @author QIN
 *
 */
public interface SayInterface {
    public void say();
}

say接口的第一个实现方法

package cn.test.logan.day10.reflect;

public class SayInterfaceimpl1 implements SayInterface {

    @Override
    public void say() {
        System.out.println("我是SayInterface接口中的第1个实现方法");

    }

}

say接口的第二个实现方法

package cn.test.logan.day10.reflect;

public class SayInterfaceimpl2 implements SayInterface {

    @Override
    public void say() {
        System.out.println("我是SayInterface接口中的第2个实现方法");

    }

}

(3)EatInterface.java(eat接口)

package cn.test.logan.day10.reflect;
/**
 * eat接口
 * @author QIN
 *
 */
public interface EatInterface {
    public void eat();
}

eat接口的第一个实现方法

package cn.test.logan.day10.reflect;

public class EatInterfaceimpl1 implements EatInterface {

    @Override
    public void eat() {
        System.out.println("我是EatInterface接口中的第1个实现方法");

    }

}

eat接口的第二个实现方法

package cn.test.logan.day10.reflect;

public class EatInterfaceimpl2 implements EatInterface {

    @Override
    public void eat() {
        System.out.println("我是EatInterface接口中的第2个实现方法");

    }

}

测试

(1)当配置文件mapping.txt内容如下

SayInterface:cn.test.logan.day10.reflect.SayInterfaceimpl1
EatInterface:cn.test.logan.day10.reflect.EatInterfaceimpl2

输出结果:

(2)当配置文件修改后

SayInterface:cn.test.logan.day10.reflect.SayInterfaceimpl2
EatInterface:cn.test.logan.day10.reflect.EatInterfaceimpl1

输出结果:

通过上述实验,我们不难发现,每次需要调用不同实现类的时候,我们只需要修改配置文件即可,不需要修改相应的代码

原文地址:https://www.cnblogs.com/OliverQin/p/12115198.html

时间: 2024-11-08 06:15:15

【BigData】Java基础_反射的相关文章

JAVA基础知识|反射

一.理解反射 1.1.基础概念 反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. "运行状态",如何理解? "运行状态"体现了反射的应用场景,当一些类,不需要提前加载进JVM内存,而是在运行时根据需要进行加载的时候,就可以通过反射进行动态加载 1.2.如何理解反射? 学习过java的童鞋,肯定对spring.hibernate一

Java基础之—反射

反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))   一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 要想解剖一个类,必须先要获取到该类的字节码文件对象.而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对

【转】Java基础之—反射

本文章来源:https://blog.csdn.net/sinat_38259539/article/details/71799078.感谢敬业的小码哥的总结. 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反

Java基础增强-反射机制

1 反射机制简介 Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法.这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制.反射被视为动态语言的关键. 反射这一概念最早由编程开发人员Smith在1982年提出,主要指应用程序访问.检测.修改自身状态与行为的能力.这一概念的提出立刻吸引了编程界的极大关注,各种研究工作随之展开,随之而来引发编程革

Java基础之反射

Java反射是指运行时获取类信息,进而在运行时动态构造对象.调用对象方法及修改对象属性的机制.百度百科的定义:“JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. 一.反射的用途 Java的反射机制可以做3件事:运行时创建对象.运行时调用方法.运行时读写属性.进而实现以下功能:调用一些私有方法,实现黑科技.比如双卡短信发送.设置状态栏颜色.自动挂电

java基础篇---反射机制

一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反射.通过反射,Java可以于运行时加载.探知和使用编译期间完全求和的类.生成其对象实体,调用其方法或者对属性设值.所以Java算是一个半动态的语言吧. 反射的概念: 在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方

黑马程序员-Java基础之反射

反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意一个类所具有的成员变量和方法:在运行时调用任意一个对象的方法:生成动态代理. 反射说白了就是可以获得一个类的所有信息,主要包括方法和属性两部分.1.获得方法包括获得方

java基础:反射机制

一:定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 二:使用场景 一般用在框架的封装上.hibernate.struts都是用反射机制实现的. 举例:JDBC中加载数据库驱动Class.forName("com.mysql.jdbc.Driver"); 三:优点 反射机制的优点就是可以实现动态创建对象和编译,体现出很大的

Java基础之反射(一)

在Java运行时环境中,对于任意一个类,可以知道这个类的属性和方法,实例化对象,而通过实例化的对象获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制.那么反射可以实现什么功能呢? 1.在运行时判断任意一个对象所属的类. 2.在运行时构造任意一个类的对象. 3.在运行时判断任意一个类所具有的成员变量和方法. 4.在运行时调用任意一个对象的方法. 其中,一般而言,开发者社群说到的动态语言,大致认同的一个定义是:"程序运行时,允许改变程序结构或变量类型,这种