课程名称: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.加减乘除的实现。