Java反射详解及应用示例
反射是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,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" alt="" />
Java反射详解及应用示例的更多相关文章
- Java 反射详解 转载
java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ...
- java 反射详解
反射的概念和原理 类字节码文件是在硬盘上存储的,是一个个的.class文件.我们在new一个对象时,JVM会先把字节码文件的信息读出来放到内存中,第二次用时,就不用在加载了,而是直接使用之前缓存的这个 ...
- java反射 详解!!!!
java反射(特别通俗易懂) 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态 ...
- java反射详解及说明
首先写一个Person类: package lltse.base.reflectdemo; public class Person { private String name ="张三&qu ...
- 【转载】Java 反射详解
目录 1.什么是反射? 2.反射能做什么? 3.反射的具体实现 4.根据反射获取父类属性 4.反射总结 反射反射,程序员的快乐! 1.什么是反射? Java反射就是在运行状态中,对于任意一个类,都能够 ...
- 《Java基础知识》Java 反射详解
定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射 ...
- java反射详解
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...
- java反射详解(转)
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...
- 【转】java反射详解
转自:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的 ...
随机推荐
- 初识 MySQL 5.6 新功能、参数
摘要: 继上一篇的文章 初识 MySQL 5.5 新功能.参数 之后,现在MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不 ...
- 关闭window 8.1 的skydrive
gpedit.msc-->计算机配置-->管理模板-->windows组件 -->skydrive-->阻止使用skydrive执行文件存储
- zsh 通信脚本
server #!/bin/zsh #zsh TCP server script zmodload zsh/net/tcp #listening port ztcp -l #This is a fil ...
- 轻轻送送为你的App加点特效
前言 今天突然在一个应用中看到一个转场动画,蛮有意思的 退出动画 进入动画 ActivityOptionsCompat options = ActivityOptionsCompat.makeScal ...
- Oracle数据库对象题库
一. 填空题 在用 create 语句创建基本表时,最初只是一个空的框架,用户可以使用insert命令把数据插入表中. 在基本表不需要时,可以使用 drop table 语句撤消.在一个基本表撤 ...
- August 23rd 2016 Week 35th Tuesday
The very essence of romance is uncertainty. 浪漫的精髓就在于它充满种种可能. And the uncertainty of life may be also ...
- July 2nd, Week 27th Saturday, 2016
The beauty of the journey is found in the scenery along the way. 旅行之美在于沿途所见的风景. I remember that ther ...
- 开启后台 Service 闪退
04-29 15:36:23.395: E/ActivityThread(15275): Performing stop of activity that is not resumed: {com.e ...
- CLR via C#(07)-静态类,分部类
一. 静态类-Static 静态类是一些不能实例化的类,它的作用是将一些相关的成员组合到一起,像我们常见的Math, Console等.静态类由static关键字标识,静态类成员也只能是st ...
- Feature hashing相关 - 2
Bloom filter 思路 用多个不同hash 来记录,比如遇到一个 love 有4个hash function 映射到4个bit位置,如果所有位置都是1 那么认为之前已经遇到love这个 ...