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

            猜你喜欢

            • java反射机制最详解

              目录java反射机制什么是反射?反射的功能:反射常用类:1.Class枚举类2.Constructor构造器3.Method方法类4.Field变量类反射运行指示图通过反射获取对象总结java反射机制什么是反射?在java开发中有一个非常重要的概念就是java
              阅读数:818 java java反射机制
            • Java反射机制基础详解

              这篇文章主要介绍了JAVA 反射机制的相关知识,文中讲解的非常细致,代码帮助大家更好的理解学习,感兴趣的朋友可以了解下,希望能给你带来帮助
              阅读数:122 Java反射机制 Java基础
            • Java中的反射机制详解

              这篇文章主要介绍了JAVA 反射机制的相关知识,文中讲解的非常细致,代码帮助大家更好的理解学习,感兴趣的朋友可以了解下
            • Java 反射机制

              这篇文章简要的说明了Java的反射机制,Java的反射是框架设计的灵魂,本文通过例子能看的更加清晰的理解
              阅读数:718 Java反射 Java反射机制
            • Java基础篇之反射机制详解

              本文详细讲解了Java基础篇之反射机制,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
            • Java反射机制介绍

              Java的反射机制是在运行状态中,对于任何一个类,都可以知道这个类的所有属性和方法,对于任何一个对象,都可以调用它所有的方法和属性,修改部分类型信息,这种动态获取信息以及动态调用对象方法的功能称为Java的反射机制
              阅读数:740 Java反射 Java反射机制
            • Java中的反射机制基本运用详解

              这篇文章主要介绍了Java 反射机制原理与用法,结合实例形式详细分析了Java反射机制的相关概念、原理、基本使用方法及操作注意事项,需要的朋友可以参考下
              阅读数:849 Java Java反射
            • Java基础学习之反射机制原理详解

              反射是框架的灵魂,Java框架底层都是用反射机制+xml配置等来实现的,本文将通过示例详细讲解Java中的反射机制,感兴趣的小伙伴可以跟随小编学习一下
            • 详解Java中的反射机制和动态代理

              本文将详细介绍反射机制以及动态代理机制,而且基本现在的主流框架都应用了反射机制,如spring、MyBatis、Hibernate等等,这就有非常重要的学习意义
            • java反射机制详细介绍

              一、什么是JAVA的反射机制(推荐:java视频教程)Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如publi
              阅读数:609 java
            • 什么是java反射机制

              java:“一切即对象”,感觉java语言本身在不断践行着这句话。java反射机制的基础来源于一个Class类,我们可以通过这个类里面的方法来对每一个类进行读取、实例化等。对象表示或封装一些数据。一个类被加载后,jvm会创建一个对应该类的Class对象(一个类
              阅读数:653 java入门 java 反射机制
            • Java反射机制的简单讲解

              这篇文章主要介绍了Java反射机制的简单讲解,本文讲解了Java的高级概念反射机制,通过文字介绍案例该项概念和代码的详细展示,需要的朋友可以参考下
            • 图文详解java反射机制及常用应用场景

              这篇文章主要为大家介绍了图文详解java反射机制及常用应用场景,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
            • Java深入分析讲解反射机制

              反射是框架的灵魂,Java框架底层都是用反射机制+xml配置等来实现的,本文将通过示例详细讲解Java中的反射机制,感兴趣的小伙伴可以跟随小编学习一下
            • Java反射技术详解

              这篇文章主要结合实例形式分析了介绍了Java反射技术,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助
              阅读数:346 Java反射 Java反射详解
            • 对于java反射机制的详细介绍

              本文由java编程入门栏目为大家详细介绍java中的反射机制,希望可以帮助到对于此机制有所不懂的同学。java反射机制是运行状态中,对于任意一个类都能够知道这个类的所有属性和方法(包括私有的);对于任意一个对象,都能调用他的任意方法和属性;这种动态获取信息及动
              阅读数:473 java入门 java 反射机制
            • JAVA的反射机制你了解多少

              这篇文章主要为大家详细介绍了JAVA的反射机制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
              阅读数:270 JAVA机制 JAVA反射机制
            • Java反射机制原理、Class获取方式以及应用场景详解

              反射机制是JAVA的核心知识点之一,大多数框架的实现原理就是利用了反射机制,掌握反射机制会使你学习框架更加轻松高效,这篇文章主要给大家介绍了关于Java反射机制原理、Class获取方式以及应用场景的相关资料,需要的朋友可以参考下
            • 一文搞懂Java中的反射机制

              Java的反射机制是在运行状态中,对于任何一个类,都可以知道这个类的所有属性和方法,对于任何一个对象,都可以调用它所有的方法和属性,修改部分类型信息。本文就来详细讲讲Java反射机制的使用
            • Java基础之反射详解

              这篇文章主要介绍了教你怎么通过IDEA设置堆内存空间,文中有非常详细的代码示例,对正在使用IDEA的小伙伴们很有帮助哟,需要的朋友可以参考下