1. 什么是反射
  Class、Method、Field、Constructor,它们是反射对象。它们是类、方法、成员变量、构造器,在内存中的形式。
  也就是万物皆对象!类是类型、方法是类型、成员变量是类型、构造器也是类型。
  可以把Class当作类的元神;Method是方法的元神;Field是成员的元神;Constructor是构造器的元神。
  得到了元神就可以来操作宿主。

2. 获取Class类的对象
  Class表示一个类型,即描述类的类型。
  * 类名.class:Class c1 = Object.class;
  * 对象.getClass():Class c2 = obj.getClass();
  * Class.forName("类全名"):Class c3 = Class.forName("java.lang.String");

  Class的用途:
  * getName():获取类名
  * Class getSupperClass():获取父类类型,即获取父类的元神
  * Class[] getInterces():获取所有实现的接口的类型,即获取所有实现接口的元神。
  * T newInstance():创建该类的实例(通过默认构造器创建,如果该类型没有默认构造器,那么抛出异常)。

3. 通过Class获取Constructor类对象
  * Constructor[] getConstructors():获取本类中所有public构造器
  * Constructor getConstructor(Class... parameterTypes):获取指定参数类型的公有构造器对象
  * Constructor[] getDeclaredConstructors():获取本类中所有构造器,包含所有访问级别
  * Constructor getDeclaredConstructor(Class... parameterTypes):获取指定参数类型的构造器,包含所有访问级别

  Construtor的用途:
  * T newInstance(Object... params):调用构造器

4. 通过Class获取Method类对象
  * Method[] getMethods():获取本类和父类中所有public方法
  * Method getMethod(String name, Class... parameterTypes):获取指定名称及参数类型的公有方法,包括父类中的公有方法
  * Method[] getDeclaredMethods():获取本类所有方法,包含所有访问级别;
  * Mehtod getDeclaredMethod(String name, Class... parameterTypes):获取指定名称及参数类型的,包括所有访问级别,但不包含父类中的方法。

  Method的用途:
  * Object invoke(Object obj, Object... params):调用方法,其中obj是当前对象,parmas是参数。如果当前方法是static方法,那么在调用invoke方法时,第一个参数为null。

5. 通过Class获取Field类对象
  * Field[] getFields():获取本类和父类中所有public成员变量
  * Field getField(String name):获取本类或父类中的指定名称的public成员变量
  * Field[] getDeclaredFields():获取本类中所有访问级别的成员变量,不包括父类中的。
  * Field getDeclaredField(String name):获取本类中指定名称的成员变量,可以是所有访问级别,不包括父类中的。

  Field的用途:
  * void set(Object obj, Object value):给出指定对象的成员变量赋值,obj为当前对象,value为值
  * Object get(Object obj):获取指定对象的成员变量值,obj为当前对象。

反射的特例:内省

内省用来操作javabean的属性,JavaBean是一种特殊的类,主要用来传递数据。属性是由getter和setter方法来决定的,即使没有字段,只要有getter和setter方法就是属性。

【java基础学习】反射的更多相关文章

  1. 黑马程序员:Java基础总结----反射

    黑马程序员:Java基础总结 反射   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 反射 反射的基石:Class类 Class类代表Java类,它的各个实例对象又分别 ...

  2. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  3. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  4. Java基础学习中一些词语和语句的使用

    在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...

  5. 转载-java基础学习汇总

    共2页: 1 2 下一页  Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3     Java基础学习总结——Java对象的序列化和 ...

  6. java基础学习总结——开篇

    java是我学习的第一门编程语言,当初学习java基础的时候下了不少功夫,趁着这段时间找工作之际,好好整理一下以前学习java基础时记录的笔记,当作是对java基础学习的一个总结吧,将每一个java的 ...

  7. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...

  8. java基础学习总结——java环境变量配置(转)

    只为成功找方法,不为失败找借口! 永不放弃,一切皆有可能!!! java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之 ...

  9. JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

    森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397  文章- 0  评论- 78  JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...

  10. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

随机推荐

  1. iOS中滤镜处理及相关内存泄漏问题的解决

    最近工作之余在做一个美图秀秀的仿品 做到滤镜这块的时候  自己就参考了网上几位博主(名字忘了记,非常抱歉)的博客,但是发现跟着他们的demo做的滤镜处理,都会有很严重的内存泄漏,于是就自己按照大体的思 ...

  2. React学习笔记-2-什么是jsx?如何使用jsx?

    什么是jsx?    JSX是JavaScript  XML 这两个单词的缩写,xml和html非常类似,简单来说可以把它理解成使用各种各样的标签,大家可以自行 百度.所以jsx就是在javascri ...

  3. Android图片上传问题小结

    1.图片的显示 出现OOM,原因一般为图片太大, 直接进行尺寸压缩即可. 2.图片的上传(服务器有大小限制) 出现OOM,原因一般为图片太大, 做一次尺寸压缩, 再做一次质量压缩,压缩质量(0-100 ...

  4. mybatis 书写

    查询语句是使用 MyBatis 时最常用的元素之一 select元素配置细节如下 属性 描述 取值 默认 id 在这个模式下唯一的标识符,可被其它语句引用     parameterType 传给此语 ...

  5. 高并发应用场景下的负载均衡与故障转移实践,AgileEAS.NET SOA 负载均衡介绍与实践

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  6. Knockout.js随手记(4)

    动态绑定下拉列表 在<select> data-bind的options选项如果绑定到ko.observableArray(),就可以动态新增选项效果,也就是可以利用其完成常见的级联效果的 ...

  7. JAVA基础中的注意点

    1.标识符 标识符:标识某些事物用于区分的符号.  (即区分某些事物的符号) 四条硬性规定: a.不能是 关键字.true.false.null. b.可以包含 字母.数字.0-9.下划线(_)或美元 ...

  8. linux 自编软件运行时权限不足问题

    在非根目录下" ./*.out " 文件时出现显示运行的权限不足的问题,经过调查,有人给出方案: 方案1: 在Linux下执行一个文件时候提示“权限不够”的解决办法如下 转到那个文 ...

  9. TComboBox; 指定某一行,不给下拉,只读ReadOnly 伪装 实现

    //cbb1: TComboBox; 指定某一行,不给下拉,自读伪装 实现: cbb1.Style :=csSimple; //设定style 不可以下拉 cbb1.ItemIndex := ; // ...

  10. Ado.Net事物处理

    protected void Button2_Click(object sender, EventArgs e)     {         SqlConnection con = new SqlCo ...