反射
  反射:就是通过一个类加载进方法区时加载到栈内存中的Class字节码文件对这个类进行解剖

  通过反射可以获取到一个类的构造方法,成员方法,成员变量
  反射将一个类的各个部分映射成相应的类

反射获取构造方法
  Class类中方法
    Constructor<?>[] getConstructors() 返回当前字节码文件对象的所有public修饰的构造方法
    Constructor<T> getConstructor(Class<?>...parameterTypes)返回指定了参数的构造方法(因为是在字节码文件中去找,所以参数也是字节码文件)
    参数
      Constructor 用来描述构造方法的类 返回回来的就是Constructor对象
      Class<?>...parameterTypes 可变参数 是构造方法参数类型 如果参数不写 则返回空参构造方法
  Constructor
    T newInstance(Object...initargs) 运行构造方法创建对象
      返回值T 是泛型 没有泛型就是Object 类型
      参数 为构造方法要使用的实际参数 参数不写则运行的是空参构造方法(方法运行的时候传入的参数就是正常的参数)

  1.获取字节码文件对象
  2.通过字节码文件对象获取构造方法对象
  3.通过构造方法对象调用方法运行构造方法

反射获取对象的快捷方式
  Class类的方法
    T newInstance() 创建此Class对象所表示的类的一个新实例
    前提 必须有空参构造 空参构造必须public修饰
  1.获取字节码文件对象
  2.通过字节码文件字节调用newInstance()创建对象

反射获取成员变量(因为成员变量都是私有,所以很少用)
  Class类中方法
  //因为属性名不能重复,所以只用传参数名就可以得到Field
    Field getField(String name) 返回指定变量名的成员变量
    Field[] getFields() 返回所有成员变量
  Field类中的方法
    void set(Object obj, Object value) 为指定对象的成员变量赋值 obj为要赋值的对象,value为要赋的值
    Object get(Object obj) 返回此对象该属性的值
  1.获取字节码文件对象
  2.通过字节码文件对象获取字段对象
  3.调用set方法为字段赋值 注意 需要给定一个对象 可以通过快捷方式创建对象

暴力反射:
  如果需要得到字节码中私有的属性或者方法
  Field[] getDeclaredFields()
  Method[] getDeclaredMethods()
  同样可以得到私有的指定属性或者方法
  Method getDeclaredMethod(String name, Class<?>... parameterTypes

  Method[] getDeclaredMethods() 返回该字节码文件中的所有方法,不含构造,不含继承

  得到私有的属性或者方法之后,将其设置为反射时取消语言访问检查

  void setAccessible(boolean flag)

反射获取成员方法
  Class类中方法
    Method[] getMehthods 获取所有公共方法(包括继承的)
    Method getMehthod(String name, Class<?>...parameterTypes) String.class int.class
      获取指定的公共方法
      name:方法名
      Class<?>...parameterTypes 方法需要的参数(String.class)
    1.获取字节码文件对象
    2.通过字节码文件对象获取方法对象
    3.调用invoke方法运行当前方法,需要对象

java中的泛型属于伪泛型,只在编译的时候有效,可以直接用反射跳过编译时期避开泛型

获取字节码文件的对象

1:类名.class

2:创建该类的实例对象,然后调用getClass()  继承自Object的方法

3:Class.forName("该类所在的地址")  例:Class.forName("java.util.List")

javaBean:封装的一个实体类,有属性,get/set方法,空参构造,实现可序列化接口,一般自己设置序列化ID(防止序列化之后修改类反序列化失败)

java中的反射机制和javaBean的更多相关文章

  1. 浅说Java中的反射机制(二)

    写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...

  2. java中的反射机制在Android开发中的用处

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

  3. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  4. 【Java基础】java中的反射机制与动态代理

    一.java中的反射机制 java反射的官方定义:在运行状态下,可以获取任意一个类的所有属性和方法,并且可通过某类任意一对象实例调用该类的所有方法.这种动态获取类的信息及动态调用类中方法的功能称为ja ...

  5. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

  6. Java 中的反射机制

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

  7. 深入理解Java中的反射机制

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

  8. Java中的反射机制和动态代理

    一.反射概述 反射机制指的是Java在运行时候有一种自观的能力,能够了解自身的情况为下一步做准备,其想表达的意思就是:在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法:对于任意一个对象 ...

  9. Java中的反射机制Reflection

    目录 什么是反射? 获取.class字节码文件对象 获取该.class字节码文件对象的详细信息 通过反射机制执行函数 反射链 反射机制是java的一个非常重要的机制,一些著名的应用框架都使用了此机制, ...

随机推荐

  1. Tomcat服务器配置参考

    Coyote HTTP/1.1 Connector 概述 Coyote HTTP/1.1 Connector元素是一个支持HTTP/1.1协议的Connector组件.它使Catalina除了能够执行 ...

  2. php网络编程实例

    php网络编程实例 一.总结 一句话总结: socket_create():创建socket socket_bind():绑定IP和端口 socket_listen():监听客户端信息 <?ph ...

  3. 基于VMWare配置VxWorks开发环境

    常规VxWorks的开发环境都是基于目标开发板或目标机来构建的,但并非所有人都具备这样的条件,所以本文主要介绍如何基于vmware来构建VxWorks开发环境.   Step 1. 安装vmware ...

  4. 红黑数之原理分析及C语言实现

    目录: 1.红黑树简介(概念,特征,用途) 2.红黑树的C语言实现(树形结构,添加,旋转) 3.部分面试题() 1.红黑树简介 1.1 红黑树概念 红黑树(Red-Black Tree,简称R-B T ...

  5. mail----java发送普通邮件

    package com.mail; import java.io.UnsupportedEncodingException; import java.util.Date; import java.ut ...

  6. python中的缓存技术

    python缓存技术 def console(a,b): print('进入函数') return (a,b) print(console(3,'a')) print(console(2,'b')) ...

  7. Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试

    文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...

  8. ( 转)WPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanel

    回顾 上一篇,我们介绍了基本控件及控件的重要属性和用法,我们本篇详细介绍WPF中的几种布局容器及每种布局容器的使用场景,当 然这些都是本人在实际项目中的使用经验,可能还存在错误之处,还请大家指出. 本 ...

  9. spring4.3.5基本配置

    1.去官网下载必要的jar包,以及: 2.新建一个web项目,在Window->Java->Build Path->User Libraries 按照步骤1,2把spring的jar ...

  10. POJ3630-Phone List-Trie字典树模板题

    Given a list of phone numbers, determine if it is consistent in the sense that no number is the pref ...