反射是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反射详解及应用示例的更多相关文章

  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. 初识 MySQL 5.6 新功能、参数

    摘要: 继上一篇的文章 初识 MySQL 5.5 新功能.参数 之后,现在MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不 ...

  2. 关闭window 8.1 的skydrive

    gpedit.msc-->计算机配置-->管理模板-->windows组件 -->skydrive-->阻止使用skydrive执行文件存储

  3. zsh 通信脚本

    server #!/bin/zsh #zsh TCP server script zmodload zsh/net/tcp #listening port ztcp -l #This is a fil ...

  4. 轻轻送送为你的App加点特效

    前言 今天突然在一个应用中看到一个转场动画,蛮有意思的 退出动画 进入动画 ActivityOptionsCompat options = ActivityOptionsCompat.makeScal ...

  5. Oracle数据库对象题库

    一.    填空题 在用 create 语句创建基本表时,最初只是一个空的框架,用户可以使用insert命令把数据插入表中. 在基本表不需要时,可以使用 drop table 语句撤消.在一个基本表撤 ...

  6. August 23rd 2016 Week 35th Tuesday

    The very essence of romance is uncertainty. 浪漫的精髓就在于它充满种种可能. And the uncertainty of life may be also ...

  7. July 2nd, Week 27th Saturday, 2016

    The beauty of the journey is found in the scenery along the way. 旅行之美在于沿途所见的风景. I remember that ther ...

  8. 开启后台 Service 闪退

    04-29 15:36:23.395: E/ActivityThread(15275): Performing stop of activity that is not resumed: {com.e ...

  9. CLR via C#(07)-静态类,分部类

    一.      静态类-Static 静态类是一些不能实例化的类,它的作用是将一些相关的成员组合到一起,像我们常见的Math, Console等.静态类由static关键字标识,静态类成员也只能是st ...

  10. Feature hashing相关 - 2

    Bloom filter     思路 用多个不同hash 来记录,比如遇到一个 love 有4个hash function 映射到4个bit位置,如果所有位置都是1 那么认为之前已经遇到love这个 ...