反射是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. ffmpeg-20160816-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...

  2. Java for LeetCode 219 Contains Duplicate II

    Given an array of integers and an integer k, find out whether there there are two distinct indices i ...

  3. 【编程题目】栈的 push、pop 序列

    29.栈的 push.pop 序列(栈)题目:输入两个整数序列.其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序.为了简单起见,我们假设 push 序列的任意两个整 ...

  4. mysql常用函数整理

    一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 ) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于x的最小整数 SELECT CEIL( ...

  5. <context-param>与<init-param>

    <context-param>的作用: web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件w ...

  6. Ios cordova安装

    安装NODEJS:http://nodejs.org/ (如果你安装了旧版本的需要手动安装npm,不过最新版的自带了) 进入终端命令行使用npm安装cordova如下: $ sudo npm inst ...

  7. NYOJ题目611练练

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAssAAAJ1CAIAAACgqiqJAAAgAElEQVR4nO3du27jSp4HYL+Ecj2IYz

  8. IT人学习方法论(一):学习方向

    07年的时候曾经讲过一节Webcast,名叫<使您成为Windows专家的一些学习习惯 >.直到最近,还经常收到听众关于这一节课反馈和心得的电子邮件,可见学习方法论是大家非常关心的问题.因 ...

  9. Xcode因为证书问题经常报的那些错

    去开始做 iOS开发的时候,因为证书问题 Xcode 经常报这样或那样的错,经过实践,现在看见 Xcode 报错已经心平气和了,经常报的错就那么多,整理一下. 1. 确认下证书是不是开发证书,如果是发 ...

  10. svn删除所有.svn文件

    svn 删除所有的 .svn文件 find . -name .svn -type d -exec rm -fr {} \;