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 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的 ...
随机推荐
- PHP写时复制, 变量复制和对象复制不同!!!
2016年3月18日 15:09:28 星期五 一直以为PHP对象也是写时复制....... 其实: PHP的变量是写时复制, 对象是引用的 写时复制: $a = $b; 如果$b的内容不改变, $a ...
- python之基本数据类型
Python运算符及基本数据类型 运算符: 1.算数运算 2. 比较运算 3. 赋值运算 4. 逻辑运算 5. 成员运算 基本数据类型: 1. 数字 int(整型) 在32位机器上,整数的位数为32位 ...
- java基础学习05(面向对象基础01)
面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...
- Effective C++ -----条款29:为“异常安全”而努力是值得的
异常安全函数(Exception-safe functions)即使发生异常也不会泄露资源或允许任何数据结构败坏.这样的函数区分为三种可能的保证:基本型.强烈型.不抛异常型. “强烈保证”往往能够以c ...
- zookeeper windows 入门安装和测试
一.序言 以下是我对zookeeper 的一些理解: zookeeper 作为一个服务注册信息存储的管理工具,好吧,这样说得很抽象,我们举个“栗子”. 栗子1号: 假设我是一家 ...
- 【数据结构】book3_3 表达式求值
#include<iostream> #include <stdlib.h> using namespace std; typedef int Status; ; ; ; ; ...
- jQuery与JS的区别,以及jQuery的基础语法
*在使用jQuery时,要在页面最上端加上 <script src="../jquery-1.11.2.min.js"></script> 看一下js与jQ ...
- powerdesigner新建模型教程
1.现在开始使用PowerDesigner创建数据库,首先运行程序,进入主界面:
- HTML表格
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- mysql my.cnf配置文件详解
本配置文件针对Dell R710,双至强E5620.16G内存的硬件配置.CentOS 5.6 64位系统,MySQL 5.5.x 稳定版.适用于日IP 50-100w,PV 100-300w的站点, ...