首页 > 编程语言 >java反射技术的简单应用

java反射技术的简单应用

时间:2022-08-28 12:13:46浏览次数:58  
标签:反射 ReflectService java name reflectService class 应用 public String

一.反射介绍

java反射技术的应用广泛,能够对类的方法和参数进行配置,完成对象的初始化工作,增加了java的灵活性,SpringIOC也使用了反射技术,下文主要讲解对象的构建和方法的反射调用。

二.通过反射调用对象

1.构建无参方法的类

public class ReflectService {
    public void hello(String name){
        System.out.println("hello"+name);
    }

    public  ReflectService getInsatance() {
        ReflectService reflectService=null;
        try{
//通过给类加载器一个类的全限定类名,再通过newInstance()方法初始化一个类对象
//也可以用对象.getClass();或者类.Class得到类对象

reflectService= (ReflectService)
Class.forName("com.mc74120.project_learn.config.ReflectService").newInstance();
} catch
(ClassNotFoundException|InstantiationException|IllegalAccessException exception){
ex.printStackTrace();
}
return reflectService;
} }

2.构建有参方法的类

public class ReflectService {
    private String name;
    public void hello(String name){
        System.out.println("hello"+name);
    }

    public ReflectService(String name) {
        this.name = name;
    }

    public  ReflectService getInsatance() {
        ReflectService reflectService=null;
        try{
            reflectService= (ReflectService) Class.forName("com.mc74120.project_learn.config.ReflectService").getConstructor(String.class).newInstance("010");
        }
        catch (ClassNotFoundException | InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException exception){

        }
        return  reflectService;
    }
}

先通过forName得到类加载器,getConstructor()方法设定参数的类型,再通过newInstance()生成对象。

3.反射方法

 public void reflectMethod() {
        Object returnObj = null;
        ReflectService target = null;
        try {
            target = ReflectService.class.newInstance();
            Method method = ReflectService.class.getMethod("hello", String.class);
            returnObj = method.invoke(target, "010");
        } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
}
//Method method = ReflectService.class.getMethod("hello", String.class);
//returnObj = method.invoke(target, "010"); target 哪个对象调用此方法,010为参数,

标签:反射,ReflectService,java,name,reflectService,class,应用,public,String
From: https://www.cnblogs.com/mc-74120/p/16632478.html

相关文章

  • javascript(一) Array对象, Object对象, this关键字,短路操作,Set集合,Map集合和String字
    javascript基础1,主要写(==和===的区别),Array对象,Object对象,this关键字,短路操作,Set集合,Map集合和String字符串操作。1.==,===1.===在js中需要值相等类型相等......
  • JavaScript Window Location
    JavaScriptWindowLocation https://www.w3school.com.cn/js/js_window_location.aspwindow.location对象可用于获取当前页面地址(URL)并把浏览器重定向到新页面。Win......
  • java内部类
    一、基本介绍一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类(innerclass),嵌套其他类的类称为外部类(outerclass)。是我们类的第五大成员类的五大成员:属性......
  • Java – IO
    字节流和字符流的区别字节流是由字节组成的,处理单元为一个字节,操作字节和字节数组。字符流是由字符组成的,处理单元为2个字节的Unicode字符,操作字符,字符数组或字符串......
  • javascript:void(0) 含义
    javascript:void(0)含义|菜鸟教程 https://www.runoob.com/js/js-void.html我们经常会使用到 javascript:void(0) 这样的代码,那么在JavaScript中 javascript:vo......
  • Java 高级特性——安全,jaas登陆框架(二)
    Java高级特性——安全,jaas登陆框架(二)java提供了jaas框架来对用户进行鉴权,本文主要从实战方面讲述如何使用jaas框架,最终完成登陆模块。阅读本文的前置知识:Java安全......
  • JavaScript 正则表达式
    JavaScript正则表达式|菜鸟教程 https://www.runoob.com/js/js-regexp.html正则表达式(英语:RegularExpression,在代码中常简写为regex、regexp或RE)使用单个字符串来描......
  • Java09-继承,抽象类
    第一章继承1.1概述由来多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。如图所示:其中,多个类......
  • 【Java学习Day08】数据类型、变量及字节
    数据类型强类型语言要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用弱类型语言要求变量的使用要符合规定,所有变量都必须先定义后才能使用Java......
  • IDEA工具插件之Java Visualizer
      打断点调试运行后后堆栈可视化效果: ......