Java web--反射(解刨)
本质:先加载类 再解刨类的方法,字段,构造函数
目的:解刨出构造函数 为了new对象
解刨出字段 为了封装数据进去
解刨方法 为了用方法
反射类的构造函数(解刨)---------------------为了架构
- 1)Class clas = Class.forName("cn.xx.xx.xx"); //加载到内存
- 2)Class clas=new Person().getClass(); //加载到内存
- 3) Class clas=Person.class //加载到内存
- Constructor c = clas.getConstructor(null/String.class); //参数控制解刨出的是哪个构造函数
- Person p= (Person)c .getConstructor(null/"fdfdf") //调用构造函数,创建Person类实例(对象)
- Class clas = Class.forName("cn.xx.xx.xx"); //加载到内存
- Constructor c =clas.getDeclaredConstructor(List.class) //加载私有构造函数
- c.setAccessible(true); 强暴解刨, 读取所有权限
- Person p= (Person)c .getConstructor(new ArrayList()); //调用构造函数
//创建对象的另一种途径
- 1)Class clas = Class.forName("cn.xx.xx.xx"); //加载到内存
- Person p= (Person) clas.newInstance();//调用无参数构造函数,创建Person类实例(对象)
反射类的方法
- Person p=new Person();
- Class clas = Class.forName("cn.xx.xx.xx"); //加载到内存
- Method method = clas.getMethod("xx",null);//加载反射方法 xx是方法名字 导包:java.lang.reflect.Method;
- method.invoke(p,null);// 传执行这个方法的对象
反射类的私有方法
- Person p=new Person();
- Class clas = Class.forName("cn.xx.xx.xx"); //加载到内存
- Method method = clas.getDeclaredMethod("xx",null);//加载私有方法 xx是方法名字 导包:java.lang.reflect.Method;
- method.setAccessible(true);//强暴解刨
- method.invoke(p,null);// 传执行这个方法的对象
注意:有时要强转类型
反射main方法
- Method method = clas.getMethod(",main",String[].class);反射main方法
- 1)method.invoke(null,(Object)new String[]{"aa","bb"});//要强转Object,因为在数组反射处理上sun有些小问题。
- 2)method.invoke(null,new object []{new String[]{"aa","bb"}});//因为在数组反射处理上sun有些小问题,让他拆分得到数组
jdk的问题,所以main方法要注意强转
反射字段
- //public String name = "aaa" //假设person里有以下三个字段
- // private int password = 123;
- // private static int age = 123;
- Person p = new Person;
- Class clas = Class.forName("cn.xx.xx.xx"); //加载到内存
- Field f = clas.getField("name"); //获取到name
- object value= (String)f.get(p); //通过对象P获取到name的值 (已知类型可以用String value=(String)f.get(p);)
- Class type = f.getType(); // 通过反射字段还可知道类型 type = String
- if(type.equals(String.class)){String svalue=(String) value;system.out.print(svalue)}//获取到类型后,进行精准转化类型
- f.set(p,"xxxx");//设置字段的值
-
- Person p = new Person;
- Class clas = Class.forName("cn.xx.xx.xx"); //加载到内存
- Field f = clas.getDeclareField("password"); //获取到私有的password
- f.setAccessible(true);//强暴解刨
- System.out.println(f.get.(p));
-
- Person p = new Person;
- Class clas = Class.forName("cn.xx.xx.xx"); //加载到内存
- Field f = clas.getDeclareField("age"); //获取到私有的静态成员age
- f.setAccessible(true);//强暴解刨
- System.out.println(f.get.(p));
私有字段同上。转自:http://blog.csdn.net/zhangpengyu321/article/details/8977651
Java web--反射(解刨)的更多相关文章
- Java 学习之反射机制“解刨”分解类,并获取内容!
正常情况下,单纯的做开发是接触不到反射机制的(额,当然并不排除例外的情况了).下面我就对我学到的反射方面的知识做一个小小的总结,旨在复习和以后的查看. 原理分析: 所谓反射就是将一个类当做我们研究的对 ...
- Java Web自定义MVC框架详解 (转)
转自:http://blog.csdn.net/jackfrued/article/details/42774459 最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架 ...
- 资深阿里程序员一一为你解刨Web前端知识体系结构,付出与收获成正比!
只要接触过前端,都会指导web前端的知识主要由三部分组成:分别为静态html,样式css,动态javascript(简称js)这三大部分组成.其三部分组成的一个体系的复杂程度不亚于其他一门技术的复杂程 ...
- java web.xml配置详解(转)
源出处:java web.xml配置详解 1.常规配置:每一个站的WEB-INF下都有一个web.xml的设定文件,它提供了我们站台的配置设定. web.xml定义: .站台的名称和说明 .针对环境参 ...
- Mac下Intellij IDea发布Java Web项目详解五 开始测试
测试前准备工作目录 Mac下Intellij IDea发布Web项目详解一 Mac下Intellij IDea发布Java Web项目(适合第一次配置Tomcat的家伙们)详解二 Mac下Intell ...
- Java Web(一) Servlet详解!!
这篇文章到上一篇,距离的有点遥远呀,隔了大概有两个月把,中间在家过了个年,哈哈~ 现在重新开始拾起,最近在看一本个人觉得很棒的书,<Java Web 整合开发王者归来>,现在写的这一系列基 ...
- 【转载】图文详解 IntelliJ IDEA 15 创建普通 Java Web 项目
第 1 部分:新建一个 Java Web Application 项目 File -> New -> Project-,请选择 Java EE 这个模块下的 Web Application ...
- Java web 入门知识 及HTTP协议详解
Java web 入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...
- (转)Java Web(一) Servlet详解!!
https://www.cnblogs.com/whgk/p/6399262.html 这篇文章到上一篇,距离的有点遥远呀,隔了大概有两个月把,中间在家过了个年,哈哈~ 现在重新开始拾起,最近在看一本 ...
随机推荐
- BackTrack5-r3硬盘安装
用Universal-USB-Installer-1.9.4.2这个工具,选择系统类型为Backtrack5 R3,选择Backtrack5 R3系统的ISO文件,然后选中U盘盘符,点击”Create ...
- 从零开始学习Node.js例子六 EventEmitter发送和接收事件
pulser.js /* EventEmitter发送和接收事件 HTTPServer和HTTPClient类,它们都继承自EventEmitter EventEmitter被定义在Node的事件(e ...
- LPTHW 笨方法学python 18章
看完18章以后,发现第一个练习中,使用了*args读取全部的的输入参数作为一个元组,但是在他的练习中只给了两个变量去赋值,当用户不清楚这个函数的定义时,就可能会给出过多的变量进这个函数,那么就会出现如 ...
- frame和bounds区别
学习ios开发有一段时间了,项目也做了两个了,今天看视频,突然发现view的frame和bound两个属性,发现bound怎么也想不明白,好像饶你了死胡同里,经过一番尝试和思考,终于弄明白bound的 ...
- ES TIPS
1,Testing Analyzers Especially when you are new to Elasticsearch, it is sometimes difficult to under ...
- 代码中特殊的注释技术——TODO、FIXME和XXX的用处
前言:今天在阅读Qt Creator的源代码时,发现一些注释中有FIXME英文单词,用英文词典居然查不到其意义!实际上,在阅读一些开源代码时,我们常会碰到诸如:TODO.FIXME和XXX的单词,它 ...
- [solr] - suggestion
前文使用了SpellCheck做了个自动完成模拟(Solr SpellCheck),使用第一种SpellCheck方式做auto-complete,是基于动态代码方式建立内容,下面方式可通过读文件方式 ...
- 修改mongodb3.0副本集用户密码遇到的坑
最近公司对项目安全方面的问题很是重视,进行了多次各种安全漏洞的扫描,于是乎就扫到了mongodb弱口令的问题. 在项目部署初期,因为大家对这个都不是特别重视,大概是因为觉得反正是内网项目吧,所以mon ...
- 如何测试手机上的SOAP客户端
周四晚上,服务端和客户端的两个同事因为soap接口的问题争论了起来.服务端的同事认为客户端的同事发给服务端的soap消息的xml结构有问题,少了几个xml节点,导致服务器端解析出错.而客户端的同事认为 ...
- Navicat(连接) -1之SSH 设置
SSH 设置 Secure SHell (SSH) 是一个通过网络登录其他计算机的程序,在远程服务器运行命令,和从一台机器移动文件到另一台.在不安全的网络中,它提供两台主机之间强大认证和安全加密的的通 ...