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. 一个国家专利查询demo

    写了一下午,借鉴apache的 httpclient 源码 调用 写的,拿出来分享一下,可以用作其他不同平台的项目post/get数据上面. package cn.shb.test; import o ...

  2. socket阻塞与非阻塞,同步与异步、I/O模型,select与poll、epoll比较

    1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步:      所谓同步,就 ...

  3. RF执行顺序

    case: 按照定义的上下位置顺序执行,通过Ctrl+上下方向键,来改变执行次序. 包含suite的目录:按字母顺序. suite: 按字母顺序执行.可以加01__xxx.txt这样的前缀来控制顺序.

  4. c#接口

    //接口中方法 属性 事件等默认都是public 不允许用修饰符修饰 public interface IEventInterFace { string this[int index] { get; ...

  5. dateset添加一列

    ds.Tables[].Columns.Add("short_name", System.Type.GetType("System.String"));//直接 ...

  6. MediaElement.js之浏览器跨域请求视频播放

    浏览器跨域问题一直以来都是作为前端开发人员常见的问题,所以今天学习了下如何使浏览器跨域请求资源 需要了解的知识 -域(主域,子域,什么是跨域) 简单来说由于浏览器同源策略,凡是发送请求url的协议(h ...

  7. nginx 反向代理 配置 https 实现http https同时存在

    server { listen ssl; #监听443端口 server_name www.app01.com; ssl on; #启用ssl加密 ssl_certificate /etc/cert/ ...

  8. 在shell 上执行mongo 查询

    需求 在写小工具的时候,经常遇到需要从mongodb 里面查东西来用,因为要跟其他bash 工具链结合在一起用,所以最理想的方法是能够在shell 上执行查询,然后pipe 给接下来的工具做处理. 方 ...

  9. CodeTimerPerformance EasyPerformanceCounterHelper .NET 4.5

    //#define NET35 namespace TestConsoleApplication { using System; using System.Diagnostics; using Sys ...

  10. 后台动态生成GridView列和模版

    考虑到很多数据源是不确定的,所以这时无法在前台设置gridview的表头,需要在后台动态指定并绑定数据. 前台代码如下: <%@ Page Title="主页" Langua ...