广告
返回顶部
首页 > 资讯 > 精选 >Java框架设计之反射怎么应用
  • 313
分享到

Java框架设计之反射怎么应用

2023-07-02 11:07:58 313人浏览 八月长安
摘要

这篇文章主要讲解了“Java框架设计之反射怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java框架设计之反射怎么应用”吧!框架:半成品软件。可以在框架的基础上进行软件开发,简化编码

这篇文章主要讲解了“Java框架设计之反射怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java框架设计之反射怎么应用”吧!

    框架:半成品软件。可以在框架的基础上进行软件开发,简化编码。

    反射就是把Java类中的各个成员映射成一个个的Java对象。

    即在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

    对于任意一个对象,都能调用它的任意一个方法和属性。

    这种动态获取信息及动态调用对象方法的功能叫Java的反射机制。

    好处:

    可以在程序运行过程中,操作这些对象。

    可以解耦,提高程序的可扩展性。

    获取Class对象的方式

    Class.forName("全类名"):将字节码文件加载进内存,返回Class对象

    多用于配置文件,将类名定义在配置文件中。读取文件,加载类。

    类名.class:通过类名的属性class获取

    多用于参数的传递

    对象.getClass():getClass()方法在Object类中定义着。

    多用于对象的获取字节码的方式

    //1.Class.forName("全类名")Class cls1 = Class.forName("com.zjq.javabase.base25.domain.Person");System.out.println(cls1);//2.类名.classClass cls2 = Person.class;System.out.println(cls2);//3.对象.getClass()Person p = new Person();Class cls3 = p.getClass();System.out.println(cls3);

    结论:

    同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。

    Class对象功能

    测试的Person类:

    package com.zjq.javabase.base25.domain; public class Person {    private String name;    private int age;     public String a;    protected String b;    String c;    private String d;      public Person() {    }     public Person(String name, int age) {         this.name = name;        this.age = age;    }     public String getName() {        return name;    }     public void setName(String name) {        this.name = name;    }     public int getAge() {        return age;    }     public void setAge(int age) {        this.age = age;    }     @Override    public String toString() {        return "Person{" +                "name='" + name + '\'' +                ", age=" + age +                ", a='" + a + '\'' +                ", b='" + b + '\'' +                ", c='" + c + '\'' +                ", d='" + d + '\'' +                '}';    }      public void eat(){        System.out.println("eat...");    }     public void eat(String food){        System.out.println("eat..."+food);    }}

    获取成员变量们

    Field[] getFields() :获取所有public修饰的成员变量

    Field getField(String name)   获取指定名称的 public修饰的成员变量

    Field[] getDeclaredFields()  获取所有的成员变量,不考虑权限修饰符

    Field getDeclaredField(String name)  

    案例:

    //0.获取Person的Class对象Class personClass = Person.class;//1.Field[] getFields()获取所有public修饰的成员变量Field[] fields = personClass.getFields();for (Field field : fields) {    System.out.println(field);} System.out.println("------------");//2.Field getField(String name)Field a = personClass.getField("a");//获取成员变量a 的值Person p = new Person();Object value = a.get(p);System.out.println(value);//设置a的值a.set(p,"张三");System.out.println(p); System.out.println("==================="); //Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符Field[] declaredFields = personClass.getDeclaredFields();for (Field declaredField : declaredFields) {    System.out.println(declaredField);}//Field getDeclaredField(String name)Field d = personClass.getDeclaredField("d");//忽略访问权限修饰符的安全检查d.setAccessible(true);//暴力反射Object value2 = d.get(p);System.out.println(value2);

    获取构造方法们

    Constructor<?>[] getConstructors()  

    Constructor<T> getConstructor(类<?>... parameterTypes)  

    Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)  

    Constructor<?>[] getDeclaredConstructors()  

    案例:

    //0.获取Person的Class对象Class personClass = Person.class; //Constructor<T> getConstructor(类<?>... parameterTypes)Constructor constructor = personClass.getConstructor(String.class, int.class);System.out.println(constructor);//创建对象Object person = constructor.newInstance("张三", 23);System.out.println(person); System.out.println("----------");  Constructor constructor1 = personClass.getConstructor();System.out.println(constructor1);//创建对象Object person1 = constructor1.newInstance();System.out.println(person1); Object o = personClass.newInstance();System.out.println(o);

    获取成员方法们

    Method[] getMethods()  

    Method getMethod(String name, 类<?>... parameterTypes)  

    Method[] getDeclaredMethods()  

    Method getDeclaredMethod(String name, 类<?>... parameterTypes)  

    案例:

    //0.获取Person的Class对象Class personClass = Person.class;//获取指定名称的方法Method eat_method = personClass.getMethod("eat");Person p = new Person();//执行方法eat_method.invoke(p);  Method eat_method2 = personClass.getMethod("eat", String.class);//执行方法eat_method2.invoke(p,"饭"); System.out.println("-----------------"); //获取所有public修饰的方法Method[] methods = personClass.getMethods();for (Method method : methods) {    System.out.println(method);    String name = method.getName();    System.out.println(name);    //method.setAccessible(true);} //获取类名String className = personClass.getName();System.out.println(className);//com.zjq.javabase.base25.domain.Person

    获取全类名  

    String getName()  

    Field:成员变量

    操作:

    设置值

    void set(Object obj, Object value)  

    获取值

    get(Object obj) 

    忽略访问权限修饰符的安全检查

    setAccessible(true):暴力反射

    Constructor:构造方法

    创建对象:

    T newInstance(Object... initargs)  

    如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法

    Method:方法对象

    执行方法:

    Object invoke(Object obj, Object... args)  

    获取方法名称:

    String getName:获取方法名

    案例

    需求:写一个"框架",不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法

    实现:

    配置文件

    反射

    步骤:

    将需要创建的对象的全类名和需要执行的方法定义在配置文件中

    在程序中加载读取配置文件

    使用反射技术来加载类文件进内存

    创建对象

    执行方法

    代码:

    pro.properties文件内容如下:

    className=com.zjq.javabase.base25.domain.StudentmethodName=sleep

    Student类:

    public class Student {     public void sleep() {        System.out.println("sleep...");    }}

    反射操作:

    //1.加载配置文件//1.1创建Properties对象Properties pro = new Properties();//1.2加载配置文件,转换为一个集合//1.2.1获取class目录下的配置文件ClassLoader classLoader = ReflectTest.class.getClassLoader();InputStream is = classLoader.getResourceAsStream("pro.properties");pro.load(is); //2.获取配置文件中定义的数据String className = pro.getProperty("className");String methodName = pro.getProperty("methodName");  //3.加载该类进内存Class cls = Class.forName(className);//4.创建对象Object obj = cls.newInstance();//5.获取方法对象Method method = cls.getMethod(methodName);//6.执行方法method.invoke(obj);

    感谢各位的阅读,以上就是“Java框架设计之反射怎么应用”的内容了,经过本文的学习后,相信大家对Java框架设计之反射怎么应用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: Java框架设计之反射怎么应用

    本文链接: https://www.lsjlt.com/news/341614.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Java框架设计之反射怎么应用
      这篇文章主要讲解了“Java框架设计之反射怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java框架设计之反射怎么应用”吧!框架:半成品软件。可以在框架的基础上进行软件开发,简化编码...
      99+
      2023-07-02
    • Java框架设计灵魂之反射的示例详解
      目录获取Class对象的方式Class对象功能获取成员变量们获取构造方法们获取成员方法们获取全类名  Field:成员变量Constructor:构造方法Method:方法...
      99+
      2022-11-13
    • Java基础之反射怎么使用
      本篇内容介绍了“Java基础之反射怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!反射是框架设计的灵魂(使用的前提条件:必须先得到代表...
      99+
      2023-07-05
    • Java反射机制怎么应用
      本篇内容主要讲解“Java反射机制怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java反射机制怎么应用”吧!反射基础p.s: 本文需要读者对反射机制的API有一定程度的了解,如果之前没...
      99+
      2023-06-17
    • java反射之invoke方法怎么使用
      Java反射中的invoke方法用于调用指定对象的方法。它的使用方式如下:1. 获取Class对象:首先需要获取到要调用方法的对象的...
      99+
      2023-08-18
      java invoke
    • JS框架之vue.js怎么应用
      这篇文章主要讲解了“JS框架之vue.js怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS框架之vue.js怎么应用”吧!1.举个栗子//model层:// 通过exte...
      99+
      2023-07-04
    • java中的反射机制怎么应用
      Java中的反射机制可以应用于以下场景: 动态加载类:可以在运行时加载指定的类,而不是在编译时就确定类的类型。 创建对象:可...
      99+
      2023-10-23
      java
    • Java SSM框架怎么应用
      这篇文章主要介绍了Java SSM框架怎么应用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java SSM框架怎么应用文章都会有所收获,下面我们一起来看看吧。一、什么是SSM框架?SSM框...
      99+
      2023-07-05
    • java的Structs框架怎么应用
      要使用Struts框架,首先需要进行以下步骤:1. 下载Struts框架:你可以从官方网站下载最新的Struts框架。解压下载的文件...
      99+
      2023-09-14
      java Structs
    • java设计模式之代理模式怎么应用
      代理模式是一种结构型设计模式,它允许通过创建一个代理对象来控制对实际对象的访问。代理对象充当了实际对象的替代品,可以在调用实际对象的...
      99+
      2023-08-08
      java
    • java动态加载类框架怎么应用
      Java动态加载类框架可以应用于以下场景:1. 插件系统:动态加载插件,实现功能的扩展和灵活性。可以根据配置或者用户的选择,动态加载...
      99+
      2023-10-10
      java
    • 使用Scrapy框架时怎么应对普通的反爬机制
      这篇文章主要讲解了“使用Scrapy框架时怎么应对普通的反爬机制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“使用Scrapy框架时怎么应对普通的反爬机制”...
      99+
      2022-10-19
    • Java中怎么设计应用层网关
      Java中怎么设计应用层网关,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java 应用层网关的必要性我们的 Java 网关分为应用层网关和业务嵌入式网关两部分...
      99+
      2023-06-16
    • Vue-cli框架中怎么实现一个计时器应用
      Vue-cli框架中怎么实现一个计时器应用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用说明开始正计时:点击工具栏的“开始正计时”按钮即可,快捷键为"Enter&...
      99+
      2023-06-20
    • 你知道怎么在Java中使用二维码响应框架吗?
      在当今数字化的时代,二维码已经成为了一种常见的信息传递方式。在Java中,我们可以使用一些二维码响应框架来创建和解析二维码。在本文中,我们将介绍如何在Java中使用二维码响应框架,以及如何创建和解析二维码。 二维码响应框架是一个用于创建和解...
      99+
      2023-06-13
      二维码 响应 框架
    • Java企业级应用架构设计中的分布式结构是怎样的
      本篇文章为大家展示了Java企业级应用架构设计中的分布式结构是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java企业级应用架构设计中的分布式结构大致可以分为单级结构、2级结构、3级结构和N...
      99+
      2023-06-17
    • 如何在Java编程算法中灵活应用关键字框架来实现高效的算法设计?
      算法设计是程序员工作中的重要环节,而Java编程算法是程序员最为熟悉的算法之一。关键字框架是一种在Java编程中广泛使用的方法,可以帮助程序员快速实现高效的算法设计。本文将介绍如何在Java编程算法中灵活应用关键字框架来实现高效的算法设计...
      99+
      2023-08-19
      编程算法 关键字 框架
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作