//1.通过对象获取
            Person p=new Person();
            Class c=p.getClass();
        
        //2.通过类名获取
            Class c2=Person.class;

//3.通过完整的包名+类名获取
            Class c3=Class.forName("com.zys.fanshe.Person");
        
        构造方法:
        通过反射返回一个构造方法:
            public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取public修饰, 指定参数类型所对应的构造方法
                Constructor con1 = c.getConstructor(null);
                获取了空构造方法con1
                创建对象
                Object obj =con1.newInstance();

public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 获取指定参数类型所对应的构造方法(包含私有的)
                Constructor con1 = c.getDeclaredConstructor(null);
                可以强行创建私有构造:con1.setAccessible(true);
                Object obj =con1.newInstance();

?返回多个构造方法
               public Constructor<?>[] getConstructors() 获取所有的public 修饰的构造方法
                    Constructor[] cons = c.getConstructors();
                    for (Constructor con : cons) {
                        System.out.println(con);
                    }

public Constructor<?>[] getDeclaredConstructors() 获取所有的构造方法(包含私有的)
                    Constructor[] cons = c.getDeclaredConstructors();
                    for (Constructor con : cons) {
                        System.out.println(con);
                    }

成员变量:
                返回一个成员变量
                   public Field getField(String name) 获取指定的 public修饰的变量
                        Field ageField = c.getField("age");
                        
        
                    public Field getDeclaredField(String name) 获取指定的任意变量
                        Field addressField = c.getDeclaredField("address");

返回多个成员变量
                    public Field[] getFields() 获取所有public 修饰的变量

Field[] fields = c.getFields();
                        //遍历
                    public Field[] getDeclaredFields() 获取所有的 变量 (包含私有)
                        
                        Field[] fields =  c.getDeclaredFields();
                        for (Field field : fields) {
                            System.out.println(field);
                        }

public void set(Object obj, Object value)
                    在指定对象obj中,将此 Field 对象表示的成员变量设置为指定的新值
                        nameField.set(obj, 23)
                        
                    public Object get(Object obj)
                         返回指定对象obj中,此 Field 对象表示的成员变量的值
                        nameField.get(obj)
                        nameField,nameField都是通过getField()获得的对象

成员方法:
                    返回获取一个方法:
                            public Method getMethod(String name, Class<?>... parameterTypes)
                             获取public 修饰的方法
                            //public void method1()  没有返回值没有参数的方法
                            Method m1 = c.getMethod("method1", null);
                            
                            //public String method4(String name)
                            Method m4 = c.getMethod("method4", String.class);
                            
                            执行方法:m1.invoke(obj, null);
                            
                        
    
                            public Method getDeclaredMethod(String name, Class<?>... parameterTypes)
                             获取任意的方法,包含私有的
                            参数1: name 要查找的方法名称; 参数2: parameterTypes 该方法的参数类型
                    返回获取多个方法:
                            public Method[] getMethods() 获取本类与父类中所有public 修饰的方法
                            public Method[] getDeclaredMethods() 获取本类中所有的方法(包含私有的)

JAVA反射整理总结的更多相关文章

  1. Java反射、反射练习整理

    反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...

  2. java 反射的应用 以及通过反射 用到的工厂模式

    java反射详解 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案 ...

  3. java反射的应用+mybatis+spring动态生成数据库表

    最近接触了一个类似于代码生成工具的活.思路是,通过java的反射机制得到类的字段和字段类型, 从而可以创建一个map集合存储表名(由类名决定的特殊结构字符串),表字段(由类变量确定),表字段类型(由变 ...

  4. Java 反射在实际开发中的应用

    运行时类型识别(RTTI, Run-Time Type Information)是Java中非常有用的机制,在java中,有两种RTTI的方式,一种是传统的,即假设在编译时已经知道了所有的类型:还有一 ...

  5. java反射知识相关的文章

    整理的反射相关的文章: (1).通俗理解反射(知乎):学习java应该如何理解反射? (2).关于反射比较深入的博文地址:深入解析Java反射(1) - 基础 贴出我反射调用代码:(craw,dept ...

  6. java反射与动态代理的理解

    一.什么是反射机制? 反射的官方定义是这样的:在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象 ...

  7. [转]Java 反射在实际开发中的应用

    一:Java类加载和初始化 1.1 类加载器(类加载的工具) 1.2 Java使用一个类所需的准备工作 二:Java中RTTI 2.1 :为什么要用到运行时类型信息(就是RTTI) 2.2  :RTT ...

  8. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  9. Java反射机制的基本概念与使用

    本篇文章分为以下几个部分: 1.认识反射 2.反射的源头(Class类) 3.利用反射操作构造方法 4.利用反射调用类中的方法 5.反射中的invoke方法 6.利用反射调用类中的属性 反射在我们普通 ...

随机推荐

  1. 【BUG之group_concat默认长度限制】

    2019独角兽企业重金招聘Python工程师标准>>> 问题:mysql数据库使用group_concat将多个id组成字符串数组,一共200个,到160个被截断: 原因:mysql ...

  2. vue+elementUI实现权限的部门管理

    回头看写过的项目,发现以前感觉有难度的地方,现在想想很简单,在此记录一下,不对的地方欢迎吐槽!!! 复制代码 1.实现效果 2.需求分析 主要用于平台各个部门不同权限的操作,将指定的账号放到对应的权限 ...

  3. 算法竞赛进阶指南--在单调递增序列a中查找小于等于x的数中最大的一个(即x或x的前驱)

    在单调递增序列a中查找<=x的数中最大的一个(即x或x的前驱) while (l < r) { int mid = (l + r + 1) / 2; if (a[mid] <= x) ...

  4. django源码分析——静态文件staticfiles中间件

    本文环境python3.5.2,django1.10.x系列 1.在上一篇文章中已经分析过handler的处理过程,其中load_middleware就是将配置的中间件进行初始化,然后调用相应的设置方 ...

  5. Ansible入门知识

    一.ansible概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装 ...

  6. redis系列之4----redis高级应用(集群搭建、集群分区原理、集群操作)

    文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...

  7. 最短路径树:Dijstra算法

    一.背景 全文根据<算法-第四版>,Dijkstra算法.我们把问题抽象为2步:1.数据结构抽象   2.实现 二.算法分析 2.1 数据结构 顶点+边->图.注意:Dijkstra ...

  8. HTML data-* 属性的含义和使用

      data-*自定义数据属性 首先讲一下语法格式: data-* =“值” data-* 属性包括两部分: 属性名不应该包含任何大写字母,并且在前缀 "data-" 之后必须有至 ...

  9. CSS页面定制代码+动漫人物设计

    右下角的小人物(我蛮喜欢的) 把下面这段代码粘贴到设置里页脚代码处 在第六行的model左右的名字可选,我这个是叫z16 然后这里有别人的一篇博客有其他名字https://blog.csdn.net/ ...

  10. 初识Java和JDK下载安装

    故事:Java帝国的诞生 对手: C&C++ ◆1972年C诞生 ◆贴近硬件,运行极快,效率极高. ◆操作系统,编译器,数据库,网络系统等 ◆指针和内存管理 ◆1982年C++诞生 ◆面向对象 ...