反射是Java中最重要的内容之一,了解反射原理对我们学习各种框架具有很大的帮助

反射的原理:

反射应用示例:

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.junit.Test; public class ReflectCase {
//使用反射操作类里面的无参数的构造方法
@Test
public void test1() throws Exception
{
/**
* 共有三种获取Class类的方法,下面这种是最常用的,除此以外还可以用Class c= Student.class
* 和Class clazz2 = new Person().getClass();
*/
Class c=Class.forName("Student");
Student s=(Student) c.newInstance();//要对一个类进行实例化,可以new,不使用new,就用这种方法
s.setName("张三");
System.out.println(s.getName());
}
//使用反射操作类里面的有参数的构造方法
@Test
public void test2() throws Exception
{
Class c=Class.forName("Student");
Constructor constructor=c.getConstructor(String.class,String.class);
Student s=(Student) constructor.newInstance("李四","123456");
System.out.println(s.getName());
}
//使用反射操作属性
@Test
public void test3() throws Exception
{
Class c=Class.forName("Student");
Student s=(Student) c.newInstance();
Field f=c.getDeclaredField("name");
f.setAccessible(true);//操作私有属性或者私有方法要设置权限
f.set(s, "王五");
System.out.println(f.get(s));//和s.getName()作用一样
}
//使用反射操作方法
@Test
public void test4() throws Exception
{
Class c=Class.forName("Student");
Student s=(Student) c.newInstance();
Method m=c.getDeclaredMethod("setName", String.class);
m.invoke(s, "赵六");
System.out.println(s.getName());
}
//使用反射操作无参数静态方法
@Test
public void test5() throws Exception
{
Class c=Class.forName("Student");
Student s=(Student) c.newInstance();
Method m=c.getDeclaredMethod("s1");
m.invoke(null);//静态方法传null,普通方法对象
}
//使用反射操作有参数静态方法
@Test
public void test6() throws Exception
{
Class c=Class.forName("Student");
Method m=c.getDeclaredMethod("add",int.class,int.class);
System.out.println(m.invoke(null,12,34));
}
}
class Student
{
private String name;
private String sid;
public Student() {}
public Student(String name, String sid) {
this.name = name;
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public static void s1() {
System.out.println(111);
}
public static int add(int a,int b) {
return a+b;
}
}

运行结果:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPgAAAC0CAIAAAA2KXZLAAAKd0lEQVR4nO2cz4scWR3A6z/wsgievAgrIllCthtsF9aLoHPYJYfVPSxaIAxhDu6uI4JEMCB0TwRjg7L2sDiOBzFu5bIQZpGWoCSuCcTOJJsIYZwBQckugbV2E9hxMtPlobqr3qv36sf09My86u/nQx/eVL2uet/v+9SrV9VV40XHRBiGYRiurq6GY9RyGIbDYWR+Hu/uPtp90r9279Huk+7F9dDOoNNsdgbjoheXB52m53l+MKoT+J43rhT/Fa/Sq6XLAz8tJN8bdJrx0sD3xpsLfM9TN+YHasFGJvCY767+7cSZXhRF3ku/+uf7H8eF6xsPtz54dGqhl7OlcZtHDRx0/HFLk0DUtUnjzGpKSU9WXt705WUBfvVnCzsfd7bDzpPHS19bfi0Mw2e+dCEMw3f+cuuF1y+9+HrwwqtvXf7Tu/boPLUfw5weMfrRWdGjKIo2l7dW5qLN5Y92dmLRP9nd/WR3r3/17vbe3tLqdWtax0HGmCkwkmMkSMmiqnKqtEqzM9A3Zy3HX7ObYBX97MWbiehRFPX69+PCqYXe9Y2HOYFbQlNyoR+oeqDZapn8qHFY85ZdXhLgcz/81oX+1+PPV37y7TAMn372QhiGp7936e8PP4w/L776Vl6Io9amh5jZI5l+DBwVPYqi/77/j62VuX/dvrW1Mre9s729sz0cRjt7ezvDvf61e/8b7i2t/jk/D2bWS0VPB/4S0S09Wiq62kHZ71tFD97dOrXQ+8+Hj3v9+6cWeuffvnPiTO/Emd47t/59/u07OYHrcQ46Tc8YvsdtSnNkrbYP0Y0j3cAM8Hzwu1PfOf3s/OnG/OkfXfllGIaffeYXYRg+/8obP7jcjz/Pv1J44krOJvZdZ8+h7ooerS9Gm8ue50Xri9H6Yjyo3+ic3B0O+9fuPRkOz/UOILp5Cla7fVxP+UOduqjndHM+YysPOh1lk5lJjFX0MAx//Iebr/32xpW7D7Y+eJTk7ddX7vf693MCD9W5mtqQbFRN309SZK+mhqkeCnl5U+sHHT37eQF++unfJOXPfLEXhuGlP95pvfTz577Z/fI3ut//6WVLcJaxytojNRH9wXu3t1bmovXFG52T0fri1srcg/dux6IPh1H/6r3hMIqiKMf1KqKH+jkvWTPoND3f943lieiW2UCVET0wN2kLPMPv/7p59uJN/42r8efsxZt5NdNd2OYjTd9v6jGWV0tb3Ox0fN1uM2/qZrIR5gX41OfT5U994c2k/KnPvWmrru/EHoHWSTUQPbY8Wl88d+5MPE3fWpkbDqOtlbkoivrX7ibbyR/Xa0OB6LOBCwE6LPrmcrS+2F3y4zlMPJa/fGYp81nqXjzqnE0bFzw4VFwI0FHRo/XF1e7LNzonk0+0uXzUuTkqXPDgUHEhQEdFF8XMB+5CgIh+/Mx84C4EiOjHz8wH7kKAbokOcEi4JfpRHuIgCkQHESA6iADRQQSIDiIQL/qg3fAa7bwHTKdC4B/yHgbtRvw8k/Lk2QwzUZchuoOij8QdUfbdQbuhPGp+QNGVJxOnfchkH65M02IkaNBuFERt67LRxi3fGiezbqIr3Xps7LMNE4muvcZWuDNl8/sVXQ8k8DW9A3+6A0C2cROLrtXT258juh/Ub0QXJ3qpvVMSvfSAOiiIHpplo6nGC5tpjjJn+DiwwB8tCnyv0Q5Gp6/Rm1dq/TRXge812m19bajNIyq3Qa+mrqg0U1L7L/OF7L70qYbqUkmr0lDjGgVHYzYDecuse0yZSHRbp4zSY3REbUUfJ1NrfWYQ0gyK325uN4zsq1KM3rRSqysv2aZr4+8M2v54D8p/Cihrg/EKvRGCroilb2zOWPdlHdFzW2UIpUzv7aLbMmA5pdnblqkxkehGp6Sbn4ERPR3F7e1OkmCMm5ksq9HbylZh9HOnMXqVtSGT8TyHKsRoHDFmvDbRq7TKDCT/TGNkIN5B7gnMOqhPPqJnOmWmRNfSq+antG+mKvqg3bBMcsraUCJ6pRHdMnXOcdEuemmrLDuybd2eATWQRntQ6TokI7qyMeMMYD8GZlZ0LZ/qnNV6/ZS8/j1N0ZVlSitK26AuVE2ZYI6ufsO6r7ypS3GrgrZx9tMbOr7rYs3AoN3Odoe9bSq66Foi9HObOsUSJbrZ8OTUaLkmmu7UJd1Bw/e1IaioDcZV30HuumQPsey+7HddrK1KF9oC0ZqdrZLJQFqx8PpURTsKjUrqnvUpUYHoevvzRfe8+t1Hh7qy33ufk+wgf0BBdDgirAP5lDeO6CAcRAcRIDqIwEXRD+v9WBCMi6IfV5NghkF0EAGigwgQHUSA6CCCOol+jA8sQN1xV3Tl2WYvWZIpZKplOOKIwGXcFT0h4zcGwwTUTHQsh8lwV/SCqQvAfnFadLU+U3A4CLURPcqfo3MlCqU4Lbp16oLEMAHuip5QfHsRoAqIDiKomei4DpPhtOiZy8qKl6FckoKJ06IDTAtEBxEgOogA0UEEiA4iQHQQAaKDCGojOjfF4SC4K3rFH4P4wQiq4K7oCepDi9YfR0sLAK6LXqovokMV3BW94EEX69NdiA4FuCv6qH1l025Ehyq4LrqKVVxEhyrURvQ8a60Xqdx1gQzuir6v24vWXSA6JLgreoYJbEZ0SJgF0UtHfYAaiF5sLSM6VKEGogMcHEQHESA6iADRQQSIDiJAdBABooMIEB1E4LToFR904WdRKMVp0VVKxcVsKADRQQSIDiKovehM0KEKTote/ULTM94wOooYoD44LbpKsbuIDsUgOohgFkQvnckAIDqIwF3Ri3/19Mb/5aK0DkDksugAUwTRQQSIDiJAdBABooMIEB1EgOggghqIXvF2OHfNoYA6ia6qbNUa1yEPp0U3f+O0Sq/WP4KWQx1xWvQYcyBHaNgv9RadZ12gIu6Knmct+sIEuCt6glfhpYrS61QQjtOimzPyvDl6lYMBJFMP0dUH0NVVZrl4IYilHqKrfxaXixeCWFwXvfTmScFaXIcEd0UvvYcYlamM6JDgrugAUwTRQQSIDiJAdBABooMIEB1EgOggghqIvtFteZ7nza+ZG5lsFQjEcdHX5j2v1e3OW5SdbBUIxWnR1+ZjUddMZSdbBWJxWvQxBcpOtgrEgeggAkQHESA6iADRQQSIDiJwWvTRjz4qre7GAVaBWJwWHWBaIDqIANFBBIgOIkB0EAGigwgQHUSA6CACRAcR1EP03Pfi1uaTXz/5sR8KqIPoG92W12q1Mi7H8qM3VMJ90Te6La/V3Vib161em+cJFqiO66JvdEcjeUZ0PId94bjoqd666Bvdlje/pszQmcNAIU6Lrsqtix4rrv/NCA/5OCy6qXbeX1Eykz+q1kPdcFd0dV5ivERheM2QDoW4K3oGy12X1OzkkhXATm1F11+ZYzCHYmojOsBBQHQQAaKDCBAdRIDoIAJEBxEgOogA0UEEiA4iQHQQAaKDCBAdRIDoIAJEBxEgOogA0UEEiA4iQHQQAaKDCBAdRIDoIAJEBxEgOogA0UEEiA4iQHQQAaKDCBAdRIDoIAJEBxEgOogA0UEEiA4iQHQQAaKDCBAdRIDoIIL/A77hlnOFsPm9AAAAAElFTkSuQmCC" alt="" />

Java反射详解及应用示例的更多相关文章

  1. Java 反射详解 转载

    java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ...

  2. java 反射详解

    反射的概念和原理 类字节码文件是在硬盘上存储的,是一个个的.class文件.我们在new一个对象时,JVM会先把字节码文件的信息读出来放到内存中,第二次用时,就不用在加载了,而是直接使用之前缓存的这个 ...

  3. java反射 详解!!!!

    java反射(特别通俗易懂) 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态 ...

  4. java反射详解及说明

    首先写一个Person类: package lltse.base.reflectdemo; public class Person { private String name ="张三&qu ...

  5. 【转载】Java 反射详解

    目录 1.什么是反射? 2.反射能做什么? 3.反射的具体实现 4.根据反射获取父类属性 4.反射总结 反射反射,程序员的快乐! 1.什么是反射? Java反射就是在运行状态中,对于任意一个类,都能够 ...

  6. 《Java基础知识》Java 反射详解

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

  7. java反射详解

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...

  8. java反射详解(转)

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...

  9. 【转】java反射详解

    转自:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的 ...

随机推荐

  1. SprignMVC+myBatis整合

    转载自:http://lydia-fly.iteye.com/blog/2153076 学习本节内容请先看"MyBatis的基本应用".地址:http://lydia-fly.it ...

  2. mybatis新增数据后获取自增主键

    mybatis对应mysql <insert id="insert" parameterType="com.timestech.wsgk.web.model.Sys ...

  3. Gson解析复杂的json数据

    最近在给公司做一个直播APK的项目,主要就是通过解析网络服务器上的json数据,然后将频道地址下载下来再调用Android的播放器进行播放,原先本来打算使用普通的json解析方法即JsonObject ...

  4. 【processing】小代码4

    translate(x,y);  移动坐标原点到x,y处 rotate(angle); 坐标沿原点顺时针转动angle度 scale(n); 绘制图像放大n倍 pushMatrix() 将当前坐标压入 ...

  5. .NET后台如何获取前台HMTL控件的值

    很多时候我们需要HTML控件,感觉比服务器控件更加简介,清爽,那么如何获取HMTL控件的值呢,请看下面例子: 前台页面代码: <input id="Text1" type=& ...

  6. Office文件的Open Xml 格式

    获取Office文件的Open Xml格式文件的步骤如下: 1.修改想要得到OpenXml格式文件的文件后缀名为.rar. 2.解压即可得到. 此时可以对xml文件进行操作,要想再次把这已经解压后的文 ...

  7. [SQL Server]如何快速查找使用了某个字段的所有存储过程

    [SQL Server]如何快速查找使用了某个字段的所有存储过程       当一个系统中使用了很多的表,并且存在大量的存储过程,当数据库中的某个表删除了某个字段,那么相应的存储过程也需要改动,但是我 ...

  8. iOS应用支持IPV6,就那点事儿

    原文连接   果然是苹果打个哈欠,iOS行业内就得起一次风暴呀.自从5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,大家便开始热火朝天的研究如何支持IPV6 ...

  9. Linux中LoadAverage分析

    判断系统负荷 1.uptime 命令,load average的三个数分别表示了1分钟.5分钟.15分钟的平均进程数. 如果你继续看手册,它还会告诉你,当CPU完全空闲的时候,平均负荷为0:当CPU工 ...

  10. UbuntuLinux安装Mysql

    1.安装Mysql5.7 方法:手动安装5.7 One:     $ wget http://dev.mysql.com/get/mysql-apt-config_0.6.0-1_all.deb 下载 ...