本质:先加载类           再解刨类的方法,字段,构造函数

目的:解刨出构造函数       为了new对象

   解刨出字段             为了封装数据进去

   解刨方法                为了用方法  

反射类的构造函数(解刨)---------------------为了架构

  1. 1)Class clas = Class.forName("cn.xx.xx.xx");  //加载到内存
  2. 2)Class clas=new Person().getClass();  //加载到内存
  3. 3)  Class clas=Person.class        //加载到内存
  4. Constructor c = clas.getConstructor(null/String.class); //参数控制解刨出的是哪个构造函数
  5. Person p= (Person)c .getConstructor(null/"fdfdf") //调用构造函数,创建Person类实例(对象)
  1. Class clas = Class.forName("cn.xx.xx.xx");  //加载到内存
  2. Constructor c =clas.getDeclaredConstructor(List.class) //加载私有构造函数
  3. c.setAccessible(true);  强暴解刨, 读取所有权限
  4. Person p= (Person)c .getConstructor(new ArrayList()); //调用构造函数

//创建对象的另一种途径

  1. 1)Class clas = Class.forName("cn.xx.xx.xx");  //加载到内存
  2. Person p= (Person) clas.newInstance();//调用无参数构造函数,创建Person类实例(对象)

反射类的方法 

  1. Person p=new Person();
  2. Class clas = Class.forName("cn.xx.xx.xx");  //加载到内存
  3. Method method = clas.getMethod("xx",null);//加载反射方法   xx是方法名字   导包:java.lang.reflect.Method;
  4. method.invoke(p,null);// 传执行这个方法的对象

反射类的私有方法 

  1. Person p=new Person();
  2. Class clas = Class.forName("cn.xx.xx.xx");  //加载到内存
  3. Method method = clas.getDeclaredMethod("xx",null);//加载私有方法     xx是方法名字   导包:java.lang.reflect.Method;
  4. method.setAccessible(true);//强暴解刨
  5. method.invoke(p,null);// 传执行这个方法的对象

注意:有时要强转类型

反射main方法

  1. Method method = clas.getMethod(",main",String[].class);反射main方法
  2. 1)method.invoke(null,(Object)new String[]{"aa","bb"});//要强转Object,因为在数组反射处理上sun有些小问题。
  3. 2)method.invoke(null,new object []{new String[]{"aa","bb"}});//因为在数组反射处理上sun有些小问题,让他拆分得到数组

jdk的问题,所以main方法要注意强转

反射字段

  1. //public String name  = "aaa"  //假设person里有以下三个字段
  2. // private int password = 123;
  3. // private static int age = 123;
    1. Person p = new Person;
    2. Class clas = Class.forName("cn.xx.xx.xx");  //加载到内存
    3. Field f = clas.getField("name"); //获取到name
    4. object value= (String)f.get(p);  //通过对象P获取到name的值 (已知类型可以用String value=(String)f.get(p);)
    5. Class type = f.getType(); // 通过反射字段还可知道类型   type = String
    6. if(type.equals(String.class)){String svalue=(String) value;system.out.print(svalue)}//获取到类型后,进行精准转化类型
    7. f.set(p,"xxxx");//设置字段的值
  4.   
    1. Person p = new Person;
    2. Class clas = Class.forName("cn.xx.xx.xx");  //加载到内存
    3. Field f = clas.getDeclareField("password"); //获取到私有的password
    4. f.setAccessible(true);//强暴解刨
    5. System.out.println(f.get.(p));
  5.   
    1. Person p = new Person;
    2. Class clas = Class.forName("cn.xx.xx.xx");  //加载到内存
    3. Field f = clas.getDeclareField("age"); //获取到私有的静态成员age
    4. f.setAccessible(true);//强暴解刨
    5. System.out.println(f.get.(p));

私有字段同上。转自:http://blog.csdn.net/zhangpengyu321/article/details/8977651

Java web--反射(解刨)的更多相关文章

  1. Java 学习之反射机制“解刨”分解类,并获取内容!

    正常情况下,单纯的做开发是接触不到反射机制的(额,当然并不排除例外的情况了).下面我就对我学到的反射方面的知识做一个小小的总结,旨在复习和以后的查看. 原理分析: 所谓反射就是将一个类当做我们研究的对 ...

  2. Java Web自定义MVC框架详解 (转)

    转自:http://blog.csdn.net/jackfrued/article/details/42774459 最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架 ...

  3. 资深阿里程序员一一为你解刨Web前端知识体系结构,付出与收获成正比!

    只要接触过前端,都会指导web前端的知识主要由三部分组成:分别为静态html,样式css,动态javascript(简称js)这三大部分组成.其三部分组成的一个体系的复杂程度不亚于其他一门技术的复杂程 ...

  4. java web.xml配置详解(转)

    源出处:java web.xml配置详解 1.常规配置:每一个站的WEB-INF下都有一个web.xml的设定文件,它提供了我们站台的配置设定. web.xml定义: .站台的名称和说明 .针对环境参 ...

  5. Mac下Intellij IDea发布Java Web项目详解五 开始测试

    测试前准备工作目录 Mac下Intellij IDea发布Web项目详解一 Mac下Intellij IDea发布Java Web项目(适合第一次配置Tomcat的家伙们)详解二 Mac下Intell ...

  6. Java Web(一) Servlet详解!!

    这篇文章到上一篇,距离的有点遥远呀,隔了大概有两个月把,中间在家过了个年,哈哈~ 现在重新开始拾起,最近在看一本个人觉得很棒的书,<Java Web 整合开发王者归来>,现在写的这一系列基 ...

  7. 【转载】图文详解 IntelliJ IDEA 15 创建普通 Java Web 项目

    第 1 部分:新建一个 Java Web Application 项目 File -> New -> Project-,请选择 Java EE 这个模块下的 Web Application ...

  8. Java web 入门知识 及HTTP协议详解

     Java  web  入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...

  9. (转)Java Web(一) Servlet详解!!

    https://www.cnblogs.com/whgk/p/6399262.html 这篇文章到上一篇,距离的有点遥远呀,隔了大概有两个月把,中间在家过了个年,哈哈~ 现在重新开始拾起,最近在看一本 ...

随机推荐

  1. [读书笔记]java中的类加载器

    以下内容大多来自周志明的<深入理解Java虚拟机>. 类加载器是java的一项创新,也是java流行的重要原因之一,它最初是为了满足java applet的需求而开发出来. 什么是appl ...

  2. HTTP请求 GET POST 网络编程实现(转)

    尊重原作者收集的资料,复制粘贴只为了避免作者文章出处哪天抽风了访问不了了导致资料消失. 原文地址 http://bbs.neworigin.net/forum.php?mod=viewthread&a ...

  3. RabbitMQ中 exchange、route、queue的关系

    从AMQP协议可以看出,MessageQueue.Exchange和Binding构成了AMQP协议的核心,下面我们就围绕这三个主要组件    从应用使用的角度全面的介绍如何利用Rabbit MQ构建 ...

  4. 【转】iOS bitcode实战 -- without full bitcode

    原文网址:http://www.voidcn.com/blog/GrowingGiant/article/p-5012705.html 关于bitcode的介绍,直接看下边两篇: 理解Bitcode: ...

  5. 【Unity3D基础教程】给初学者看的Unity教程(三):通过制作Flappy Bird了解Native 2D中的Sprite,Animation

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 上一次我们讲了MonoBehaviou ...

  6. .NET软件工程师面试总结

    1.手写画出系统架构图,系统代码架构,有什么技术难点?  2.手写画出系统部署图 CDN(一般购买别人的服务器会自动CDN,他们自己配置就OK啦) 3.asp.net 的session怎么实现会话共享 ...

  7. ECharts使用心得总结(二)

    Echarts使用心得总结(二) 前言: 前一段时间一直都挺忙的,各种事,也没来得及每周的总结,趁着晚上的一点时间把项目中用的Echart中常用的各种图表给抽象总结了一下,趁着周末跟大家分享一下.之前 ...

  8. SQL总结(五)存储过程

    SQL总结(五)存储过程 概念 存储过程(Stored Procedure):已预编译为一个可执行过程的一个或多个SQL语句. 创建存储过程语法 CREATE proc | procedure pro ...

  9. Java的委托

    http://www.cnblogs.com/soojoe/archive/2012/04/12/2532304.html 委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个对象参与处理同一 ...

  10. <<google软件测试之道>>读书笔记

    以前一直从开发的角度来看待测试,看完这本书以后感觉错了,难怪之前公司的测试一直搭建不起来 1.开发人员,开发测试人员,测试人员 * 开发人员负责开发 * 开发测试人员近距离接触代码,负责编写测试用例, ...