手记

【备战春招】第16天 Java高级编程(Java反射一)

课程名称:Java工程师2022版
课程章节:Java高级编程
课程讲师:IT老齐 悟空 八戒猪 神思者 Leo
课程内容:Java反射一

一、反射的核心类
1.Java的反射(reflection)机制是指在程序的 运行状态 中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。 这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制 。
主要学习反射以及作用,反射的四个核心类,以及反射在项目中的应用。
反射(Reflect)实在运行时动态范文类与对象的技术。
反射是JDK1.2版本之后的高级特性,隶属于java.lang.reflect。
大多数Java框架都是基于反射实现参数配置、动态注入等特性。
2.加减乘除的实现

package com.imooc.reflect;

import java.util.Scanner;

/**
 * 初识反射的作用
 */
public class ReflectSample {
    /**
     * 传统的创建对象方式
     */
    public static void case1(){
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入计算类名:");
        String op = scanner.next();
        System.out.print("请输入a:");
        int a = scanner.nextInt();
        System.out.print("请输入b:");
        int b = scanner.nextInt();
        MathOperation mathOperation = null;
        if(op.equals("Addition")){
            mathOperation = new Addition();
        }else if(op.equals("Subtraction")) {
            mathOperation = new Subtraction();
        }else if(op.equals("Multiplication")){
            mathOperation = new Multiplication();
        }else{
            System.out.println("无效的计算类");
            return;
        }
        float result = mathOperation.operate(a, b);
        System.out.println(result);
    }

    /**
     * 利用反射创建对象更加灵活
     */
    public static void case2(){
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入计算类名:");
        String op = scanner.next();
        System.out.print("请输入a:");
        int a = scanner.nextInt();
        System.out.print("请输入b:");
        int b = scanner.nextInt();
        MathOperation mathOperation = null;
        try {
            mathOperation = (MathOperation) Class.forName("com.imooc.reflect." + op).newInstance();
        }catch(Exception e){
            System.out.println("无效的计算类");
            return;
        }
        float result = mathOperation.operate(a, b);
        System.out.println(result);
    }
    
    public static void main(String[] args) {
        ReflectSample.case2();
    }
}

分别使用传统的创建方式以及反射的创建方式,对二者进行对比,我们可以发现利用反射创建对象更加的灵活。

package com.imooc.reflect;
/**
 * 减法运算
 */
public class Subtraction implements MathOperation {
    @Override
    public float operate(int a, int b) {
        System.out.println("执行减法运算");
        return a - b;
    }
}

减法运算的实现,主要是引入了MathOperation,除了这个部分,其他的跟传统的方法并没有太大的区别。

package com.imooc.reflect;
/**
 * 加法
 */
public class Addition implements MathOperation {
    @Override
    public float operate(int a , int b) {
        System.out.println("执行加法运算");
        return a + b;
    }
}

以上实现的是加法运算。

package com.imooc.reflect;

public class Multiplication implements MathOperation {
    @Override
    public float operate(int a, int b) {
        return a * b;
    }
}

实现一个对反射的翻译。

package com.imooc.reflect;
/**
 * 四则运算接口
 */
public interface MathOperation {
    public float operate(int a , int b);
}

实现一个对反射的四则运算的接口。

课程总结:

1.反射的定义。
2.加减乘除的实现。

0人推荐
随时随地看视频
慕课网APP