广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java的反射(reflection)机制的简单使用
  • 805
分享到

Java的反射(reflection)机制的简单使用

1024程序员节java 2023-10-27 22:10:51 805人浏览 独家记忆
摘要

目录 一、定义 二、用途 三、反射基本信息 四、反射相关的类 五、反射示例 六、反射的优点和缺点 一、定义         Java的反射机制是运行时的状态,可以通过反射来调用类里面的属性和方法,私有的属性和方法也可以调用,也可以对它

目录

一、定义

二、用途

三、反射基本信息

四、反射相关的类

五、反射示例

六、反射的优点和缺点


一、定义

        Java的反射机制是运行时的状态,可以通过反射来调用类里面的属性和方法私有的属性和方法也可以调用,也可以对它们进行修改


二、用途

        (1)、在第三方应用开发过程,经常会遇到私有的成员变量和方法或是只对系统应用开放,这式就能用反射机制拿到这些私有的成员变量和方法。

(2)、开发各种通用框架


三、反射基本信息

        Java程序中许多对象在运行时会两种类型,一种是编译时类型,一种运行时类型,比如:

Person p = new Student();  这种情况下,p在编译时的类型是Person,在运行时是Student,程序在运行时需要知道它的类型和对象,Java的反射程序可以判断该对象和类属于哪一类


四、反射的相关类

(1)、获得类相关的方法

(2)、获得类中属性的方法

(3)、获得类中注解的方法

(4)、获得类中构造器相关方法

(5)、获得类中方法的方法


五、反射的示例

(一)、获得class对象的三种方式,第一种最常用

我们在创建一个包demo1,里面再创建一个Student类,如图

Student类代码:

class Student{    //私有属性name    private String name = "bit";    //公有属性age    public int age = 18;    //不带参数的构造方法    public Student(){        System.out.println("Student()");    }    private Student(String name,int age) {        this.name = name;        this.age = age;        System.out.println("Student(String,name)");    }    private void eat(){        System.out.println("i am eat");    }    public void sleep(){        System.out.println("i am sleep");    }    private void function(String str) {        System.out.println(str);    } @            Override    public String toString() {        return "Student{" +                "name='" + name + '\'' +                ", age=" + age +                '}';    }}

代码示例:

public class Test {    public static void main(String[] args) {        //获得class对象的三种方式        //第一种        try {            Class.forName("demo1.Student");        } catch (ClassNotFoundException e) {            e.printStackTrace();        }        //第二种        Class c2 = Student.class;        //第三种        Student student = new Student();        Class c3 = student.getClass();    }}

(二)、反射的使用

(1)、创建对象

                代码示例:
public class Test {    public static void main(String[] args) {        //获得class对象的三种方式        //第一种        try {            Class.forName("demo1.Student");        } catch (ClassNotFoundException e) {            e.printStackTrace();        }        //第二种        Class c2 = Student.class;        //第三种        Student student = new Student();        Class c3 = student.getClass();    }}
        拿到Student类的对象
//第一种        try {            ClassClassStudent = Class.forName("demo1.Student");            Student student = (Student)ClassStudent.newInstance();        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (InstantiationException e) {            throw new RuntimeException(e);        } catch (IllegalAccessException e) {            throw new RuntimeException(e);        }

(2)、反射私有的构造方法

             代码示例:
    public static void reflectNewInstance() {        //反射私有的构造方法        try {            //先拿到一个类            Class classStudent = Class.forName("demo1.Student");            //调用构造方法            Constructor constructor = classStudent.getDeclaredConstructor(String.class, int.class);            //私有的属性name需要你确认才能更改            constructor.setAccessible(true);            Student student = (Student) constructor.newInstance("xiaoming", 15);            System.out.println(student);        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (InstantiationException e) {            throw new RuntimeException(e);        } catch (IllegalAccessException e) {            throw new RuntimeException(e);        } catch (NoSuchMethodException e) {            throw new RuntimeException(e);        } catch (InvocationTargetException e) {            throw new RuntimeException(e);        }    }

调用这个代码后现象:

(3)、反射私有属性

                代码示例:

                

public static void reflectPrivateField() {        //反射私有属性        try {            Class classStudent = Class.forName("demo1.Student");            Field field = classStudent.getDeclaredField("name");            field.setAccessible(true);            Student student = (Student)classStudent.newInstance();            field.set(student, "caocao");            System.out.println(student);        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (NoSuchFieldException e) {            throw new RuntimeException(e);        } catch (InstantiationException e) {            throw new RuntimeException(e);        } catch (IllegalAccessException e) {            throw new RuntimeException(e);        }    }

调用这个代码后现象:

(4)、反射私有方法

                代码示例:
public static void reflectPrivateMethod() {        //反射私有方法        try {            Class classStudent = Class.forName("demo1.Student");            Method method = classStudent.getDeclaredMethod("function");            method.setAccessible(true);            Student student = (Student)classStudent.newInstance();            method.invoke(student, "我是一个反射参数");        } catch (ClassNotFoundException e) {            throw new RuntimeException(e);        } catch (InstantiationException e) {            throw new RuntimeException(e);        } catch (IllegalAccessException e) {            throw new RuntimeException(e);        } catch (NoSuchMethodException e) {            throw new RuntimeException(e);        } catch (InvocationTargetException e) {            throw new RuntimeException(e);        }    }

六、反射的优点和缺点

优点:1、对任意类的成员变量或方法都能调用,对于任意一个对象,都能调用它的方法,封装就不起到作用了。

           2、运用于很多流行的框架(Struts、Hibernate、Spring 等等)。

           3、增强程序的灵活性和扩展性。

缺点:1、效率问题,使用反射程序会导致程序效率低。

           2、因功能太过强大,维护起来也比较麻烦,反射代码相对于普通代码也更复杂。


都看到这里了,点个赞再走呗,谢谢谢谢谢!

来源地址:https://blog.csdn.net/cool_tao6/article/details/134013942

--结束END--

本文标题: Java的反射(reflection)机制的简单使用

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

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

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

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

下载Word文档
猜你喜欢
  • Java的反射(reflection)机制的简单使用
    目录 一、定义 二、用途 三、反射基本信息 四、反射相关的类 五、反射示例 六、反射的优点和缺点 一、定义         Java的反射机制是运行时的状态,可以通过反射来调用类里面的属性和方法,私有的属性和方法也可以调用,也可以对它...
    99+
    2023-10-27
    1024程序员节 java
  • Java反射机制的简单讲解
    🌱1. 什么是反射机制? 首先大家应该先了解两个概念,编译期和运行期,编译期就是编译器帮你把源代码翻译成机器能识别的代码,比如编译器把java代码编译成jvm识别的字...
    99+
    2022-11-12
  • 简单谈谈python的反射机制
      对编程语言比较熟悉的朋友,应该知道“反射”这个机制。Python作为一门动态语言,当然不会缺少这一重要功能。然而,在网络上却很少见到有详细或者深刻的剖析论文。下面结合一个web路由的实例来阐述pytho...
    99+
    2022-06-04
    反射 机制 简单
  • java 中反射简单使用示例
    这篇文章将为大家详细讲解有关java 中反射简单使用示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。package reflect_test;public class Do...
    99+
    2023-06-02
  • Java重点:反射机制的使用
    目录 一、概念 二、类类 1、类类的获取方式 1)类名.Class 2)对象.getClass() 3)Class.forName() 三、反射实例化 1、调用一个公有的无参构造方法 2、调用一个公有的一个参构造方法 3、调用一个公有的两...
    99+
    2023-09-12
    java 开发语言 jvm eclipse java-ee
  • 如何使用Java反射机制
    这篇文章主要介绍“如何使用Java反射机制”,在日常操作中,相信很多人在如何使用Java反射机制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Java反射机制”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-15
  • Java反射机制怎么使用
    今天小编给大家分享一下Java反射机制怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。反射的概述JAVA反射机制是在运...
    99+
    2023-06-30
  • java中反射和注解的简单使用方法
    目录什么反射?Java反射机制提供的功能反射相关的主要APIClass 类获取Class 类的实例( 四种方法)哪些类型可以有Class 对象?演示Class类的常用方法有了Clas...
    99+
    2022-11-12
  • 简单易懂Java反射的setAccessible()方法
    目录概要一、 什么是Java的访问检查二、 setAccessible() 方法介绍前言:在使用Field类的对象访问我自定义的Employee类对象的name域时,抛出异常ille...
    99+
    2022-11-13
  • Java中的反射机制详解
    目录一、什么是反射?二、为什么要用反射三、Class类四、获取Class类对象的四种方式五.通过反射构造一个类的实例①使用Class.newInstance②通过反射先获取构造方法再...
    99+
    2022-11-12
  • Java反射的概念和机制
    这篇文章主要讲解了“Java反射的概念和机制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java反射的概念和机制”吧!1. 什么是反射?什么是反射?在官方文档中是这样说的:Reflecti...
    99+
    2023-06-02
  • java反射机制的作用有哪些
    Java反射机制的作用有以下几个:1. 动态加载类:可以在运行时动态加载一个类,不需要在编译时确定类的全名。2. 动态创建对象:可以...
    99+
    2023-10-08
    java
  • java中的反射机制怎么应用
    Java中的反射机制可以应用于以下场景: 动态加载类:可以在运行时加载指定的类,而不是在编译时就确定类的类型。 创建对象:可...
    99+
    2023-10-23
    java
  • PHP中的反射机制以及如何使用反射
    在 PHP 中,反射(Reflection)是一种机制,用于在运行时动态地获取类、接口、函数、方法等的信息。反射机制允许我们在运行时分析和修改代码结构,包括类的属性和方法等。 下面是一个简单的示例,展...
    99+
    2023-10-18
    php 开发语言 后端
  • Java 反射机制的实例详解
    Java 反射机制的实例详解前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来。那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现。正文 Java反射机制定义Java反射机制是指在运行状态中...
    99+
    2023-05-31
    java 反射机制 ava
  • Java反射机制的原理介绍
    这篇文章主要介绍“Java反射机制的原理介绍”,在日常操作中,相信很多人在Java反射机制的原理介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java反射机制的原理介绍”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-17
  • Java反射机制的学习总结
    一、什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。 二、哪里用到反射机制 有些...
    99+
    2022-11-15
    Java 反射机制
  • Java反射机制的实例分析
    这篇文章将为大家详细讲解有关Java反射机制的实例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在 Java 运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法对于任意一个对象...
    99+
    2023-06-17
  • JAVA反射机制时干什么的
    本篇内容主要讲解“JAVA反射机制时干什么的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA反射机制时干什么的”吧!1、什么是反射?在java开发中有一个非常重要的概念就是java反射机制...
    99+
    2023-06-29
  • java的反射机制如何实现
    Java的反射机制是指在运行时动态获取和操作类的相关信息的能力。通过反射,可以在运行时获取类的属性、方法、构造函数等信息,还可以动态...
    99+
    2023-08-31
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作