广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >java反射机制最详解
  • 821
分享到

java反射机制最详解

javajava反射机制 2020-08-07 01:08:00 821人浏览 绘本
摘要

目录java反射机制什么是反射?反射的功能:反射常用类:1.Class枚举类2.Constructor构造器3.Method方法类4.Field变量类反射运行指示图通过反射获取对象总结java反射机制 什么是反射? 在java开发中有一个

目录
  • java反射机制
    • 什么是反射?
      • 反射的功能:
    • 反射常用类:
      • 1.Class枚举类
  • 2.Constructor构造器
    • 3.Method方法类
      • 4.Field变量类
        • 反射运行指示图
          • 通过反射获取对象
          • 总结

            java反射机制

            在这里插入图片描述

            什么是反射?

            在java开发中有一个非常重要的概念就是java反射机制,也是java的重要特征之一。反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力,通过反射可以调用私有方法和私有属性,大部分框架也都是运用反射原理的。java通常是先有类再有对象,有对象就可以调用方法或者属性,java中的反射其实是通过Class对象来调用类里面的方法。

            反射的功能:

            ①在运行时判断任意一个对象所属的类;

            ②在运行时构造任意一个类的对象;

            ③在运行时判断任意一个类所具有的成员变量和方法;

            ④在运行时调用任意一个对象的方法;

            ⑤生成动态代理。

            Java的反射机制它知道类的基本结构,这种对Java类结构探知的能力,我们称为Java类的“自审”。如eclipse中,一按点,编译工具就会自动的把该对象能够使用的所有的方法和属性全部都列出来,供用户进行选择。这就是利用了Java反射的原理,是对我们创建对象的探知、自审。

            反射常用类:

            1.Class枚举类

            Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。

            Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

            
            		Person p = new Person();
            		//获取class对象的方式1
            		// 需要依赖
            		Class clazz = p.getClass();
            		// 方式2 在编译之前就知道要操作的class的名称是什么
            		Class clacc = Person.class;
            Class clazz = Class.forName("com.openlab.test.Person");
            		Constructor[] con = clazz.getConstructors();
            		Method[] methods = clazz.getDeclaredMethods();
            		Field[] fields = clazz.getDeclaredFields();
            		System.out.println(con.length);
            		System.out.println(methods.length);
            		System.out.println(fields.length);
            

            在这里插入图片描述

            在这里插入图片描述

            在这里插入图片描述

            2.Constructor构造器

            Constructor 提供关于类的单个构造方法的信息以及对它的访问权限。Constructor 允许在将实参与带有基础构造方法的形参的 newInstance() 匹配时进行扩展转换,但是如果发生收缩转换,则抛出 IllegalArgumentException。

            在这里插入图片描述

            3.Method方法类

            Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。

            Method 允许在匹配要调用的实参与基础方法的形参时进行扩展转换;但如果要进行收缩转换,则会抛出 IllegalArgumentException。

            在这里插入图片描述

            在这里插入图片描述

            4.Field变量类

            Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。
            Array 允许在执行 get 或 set 访问操作期间进行扩展转换,但如果将发生收缩转换,则抛出一个 IllegalArgumentException。

            在这里插入图片描述

            在这里插入图片描述

            反射运行指示图

            在这里插入图片描述

            通常情况下我们只能在编写源代码时能够清楚的了解到对象的相关属性和方法,常常这些方法是被固定的,程序进入编译之后变不能更改的,但是java加入了反射机制,便可以做到编译之后还能对程序做出更改。

            通过反射获取对象

            
            package com.openlab.test;
            import java.lang.reflect.Constructor;
            import java.lang.reflect.Field;
            import java.lang.reflect.InvocationTargetException;
            import java.lang.reflect.Method;
            public class Test {
            	public static void main(String[] args) {
            //		Person p = new Person();
            //		//获取class对象的方式1
            //		// 需要依赖
            //		Class clazz = p.getClass();
            //		// 方式2 在编译之前就知道要操作的class的名称是什么
            //		Class clacc = Person.class;
            //		
            //		Constructor[] con = clazz.getConstructors();
            //		Method[] methods = clazz.getDeclaredMethods();
            //		Field[] fields = clazz.getDeclaredFields();
            //		
            //		System.out.println(con.length);
            //		System.out.println(methods.length);
            //		System.out.println(fields.length);
            		// 方式3 常用
            		Class clazz;
            		try {
            			clazz = Class.forName("com.openlab.test.Person");
            			Constructor con = clazz.getDeclaredConstructor(new Class[]{String.class,int.class});
            			con.setAccessible(true);
            			Person p = (Person) con.newInstance(new Object[]{"张三疯",99});
            			System.out.println(p);
            			
            		} catch (ClassNotFoundException e) {
            			// TODO Auto-generated catch block
            			e.printStackTrace();
            		} catch (NoSuchMethodException e) {
            			// TODO Auto-generated catch block
            			e.printStackTrace();
            		} catch (SecurityException e) {
            			// TODO Auto-generated catch block
            			e.printStackTrace();
            		} catch (InstantiationException e) {
            			// TODO Auto-generated catch block
            			e.printStackTrace();
            		} catch (IllegalAccessException e) {
            			// TODO Auto-generated catch block
            			e.printStackTrace();
            		} catch (IllegalArgumentException e) {
            			// TODO Auto-generated catch block
            			e.printStackTrace();
            		} catch (InvocationTargetException e) {
            			// TODO Auto-generated catch block
            			e.printStackTrace();
            		}
            //		Person p = (Person) clazz.newInstance();
            	}
            }
            

            那么为什么要使用这种方式来创建对象呢,原因很简单,使用反射来创建对象,最直接的原因就是因为,在写底层代码的时候,程序员对于要创建的对象有很多的不确定性,而正常的创建对象需要知道类名,而很多使用在使用反射的创建对象时,都是只给了个泛型,所以在不确定类型的情况下创建对象是反射独有的功能。

            总结

            本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程界的更多内容!

            --结束END--

            本文标题: java反射机制最详解

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

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

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

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

            下载Word文档
            猜你喜欢
            • java反射机制最详解
              目录java反射机制什么是反射?反射的功能:反射常用类:1.Class枚举类2.Constructor构造器3.Method方法类4.Field变量类反射运行指示图通过反射获取对象总结java反射机制 什么是反射? 在java开发中有一个...
              99+
              2020-08-07
              java java反射机制
            • Java反射机制详解
              目录类的声明周期不同阶段都可以获取类对象获取Class类对象的方式的场景class类对象的功能如何获取私有变量的值根据有无主方法判断进程和线程反射出现的背景(记住)反射出现的背景类的...
              99+
              2022-11-13
              Java 反射 Java 反射机制
            • Java-反射机制(超详解)
              Java反射机制概述 前言一、Java反射机制概述1. Java Reflection2. 动态语言 vs 静态语言 二、 Class类的理解1. 类的加载过程1.1 初步了解1.2 类的加载过程图解1.3 了解:什么时候会发...
              99+
              2023-08-17
              java 开发语言
            • Java反射机制基础详解
              目录1、什么是Java反射机制?2、反射机制原理3、Class类介绍3.1、Class类基本介绍3.2、Class类对象的获取方法Class.forname()3.3、可以获取Cla...
              99+
              2022-11-12
              Java反射机制 Java基础
            • Java中的反射机制详解
              目录一、什么是反射?二、为什么要用反射三、Class类四、获取Class类对象的四种方式五.通过反射构造一个类的实例①使用Class.newInstance②通过反射先获取构造方法再...
              99+
              2022-11-12
              Java反射机制 反射机制详解
            • Java 反射机制详解及实例
              Java 反射机制详解及实例反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧!      &n...
              99+
              2023-05-31
              java 反射机制 ava
            • Java 反射机制的实例详解
              Java 反射机制的实例详解前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来。那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现。正文 Java反射机制定义Java反射机制是指在运行状态中...
              99+
              2023-05-31
              java 反射机制 ava
            • Java中反射机制和作用详解
              前言 很多刚学Java反射的同学可能对反射技术一头雾水,为什么要学习反射,学习反射有什么作用,不用反射,通过new也能创建用户对象。 那么接下来大师就带你们了解一下反射是什么,为什么...
              99+
              2022-11-12
              java反射机制的作用包括 java反射机制原理详解 Java反射机制原理以及实现
            • Java中的反射机制示例详解
              目录反射什么是Class类获取Class实例的三种方式通过反射创建类对象通过反射获取类属性、方法、构造器更改访问权限和实例赋值运用场景反射 反射就是把Java类中的各个成分映射成一个...
              99+
              2022-11-13
              Java 反射机制 Java 反射
            • Java基础篇之反射机制详解
              目录1、反射概述1.1什么是反射1.2、反射能干什么2、解剖类2.1反射构造方法2.1.1反射无参的构造函数2.1.2反射“一个参数”的构造函数2.1.3反射...
              99+
              2022-11-12
              Java中的反射机制 Java反射机制
            • JavaSE基础之反射机制(反射Class)详解
              目录一:反射机制概述二:反射Class1. 获取Class的三种方式 2. 通过反射实例化(创建)对象3. 通过读配置属性文件实例化对象4. 只让静态代码块执行5. 获取类...
              99+
              2022-11-13
              JavaSE反射机制 JavaSE反射Class JavaSE反射
            • java反射机制详细介绍
              一、什么是JAVA的反射机制(推荐:java视频教程)Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifie...
              99+
              2015-08-04
              java
            • Java 反射机制
              简介: Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个...
              99+
              2022-11-12
              Java反射 Java反射机制
            • Java基础篇之反射机制示例详解
              目录一、什么是反射:二、反射的原理:三、反射的优缺点:四、反射的用途:五、反射机制常用的类:六、反射的基本使用:1、获得Class:主要有三种方法:2、判断是否为某个类的示例:3、创...
              99+
              2022-11-12
              java反射机制原理详解 java反射机制的作用 Java反射机制原理以及实现
            • Java中的反射机制基本运用详解
              目录Java中的反射机制基本运用1、什么是反射(reflect)2、反射机制提供的功能3、反射->获取类对象4、反射->利用无参构造实例化对象5、反射->利用有参构...
              99+
              2022-11-12
              Java Java反射
            • 详解java中反射机制(含数组参数)
              详解java中反射机制(含数组参数)java的反射是我一直非常喜欢的地方,因为有了这个,可以让程序的灵活性大大的增加,同时通用性也提高了很多。反射原理什么的,我就不想做过大介绍了,网上一搜,就一大把。(下面我是只附录介绍下)Reflecti...
              99+
              2023-05-31
              java 反射机制 ava
            • Java反射机制怎么理解
              本篇内容主要讲解“Java反射机制怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java反射机制怎么理解”吧! 简介定义:Java语言中 一种动态(运行时)访问、检测 & 修改它...
              99+
              2023-06-03
            • Java反射机制深入理解
              Java反射机制深入理解一.概念   反射就是把Java的各种成分映射成相应的Java类。Class类的构造方法是private,由JVM创建。反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成...
              99+
              2023-05-31
              java 反射机制 ava
            • Go语言的反射机制详解
              反射是语言里面是非常重要的一个特性,我们经常会看见这个词,但是对于反射没有一个很好的理解,主要是因为对于反射的使用场景不太熟悉。 一、理解变量的内在机制 1.类型信息,元信息,是预先...
              99+
              2022-11-13
              Go Golang 反射机制
            • Java基础学习之反射机制原理详解
              目录一、什么是反射二、反射的原理三、反射的优缺点四、反射的用途五、反射机制常用的类六、反射的基本使用一、什么是反射 (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细...
              99+
              2022-11-13
              Java 反射机制 Java 反射
            软考高级职称资格查询
            编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
            • 官方手机版

            • 微信公众号

            • 商务合作