Java笔记-反射机制Reflection API(java动态机制)基础
来源:互联网 发布:淘宝免费买东西的技巧 编辑:程序博客网 时间:2024/05/22 08:52
原则上java不是动态语言的范畴,比如python PHP。但是反射机制的出现使得java在一定意义上实现了动态语言的特征的。通过反射机制的API可以动态的获取运行时的类的内部信息或者类的结构信息。并且能够操作类的实例的对象和方法。
Java反射机制提供如下的功能:
1.在运行时判断任意一个对象的所属的类。
2.在运行时创建任何一个类的对象实例。
3.运行时获取任意一个类的所有的属性和方法(包括私有属性和方法)。
4在运行时调用和操作任意类的属性和方法。
下面是我的运行demo:
首先新建一个person类
package TestReflection;/*** @author 善水 E mail:wangyweb@163.com* @version 创建时间:Nov 1, 2017 10:14:50 PM* 类说明*/public class Person { public String name = "王云"; public int age = 22; private String sex = "男士"; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Person(String name, int age, String sex) { super(); this.name = name; this.age = age; this.sex = sex; } public Person() { super(); // TODO Auto-generated constructor stub } public void show() { System.out.println("我叫"+name+",我是一个"+sex+",今年"+age+"岁 了."); } public void display() { System.out.println("我是一个人!"); }public void display1(String nation) { System.out.println("我是一个"+nation+"人"); }}
后面是
反射测试代码:
package TestReflection;/*** @author 善水 E mail:wangyweb@163.com* @version 创建时间:Nov 1, 2017 10:18:12 PM* 类说明*/import java.lang.reflect.Field;import java.lang.reflect.Method;import org.junit.Test;public class TestRelf {// 在不使用反射机制之前的面向对象的基本类操作 @Test public void test1(){ Person p1 = new Person(); p1.setName("刘德华"); p1.setAge(45); p1.setSex("男士"); p1.display(); p1.show(); }// 使用java的反射机制实现对运行时类的操作 @Test public void test2() throws Exception { Class<Person> pClass = Person.class;// 创建类的实例 Person person = pClass.newInstance();// 获取属性 Field fname = pClass.getField("name"); fname.set(person, "周星驰"); Field fage = pClass.getField("age"); fage.set(person, 55); Method method1 = pClass.getMethod("display1", String.class); method1.invoke(person, "HK"); Method method2 = pClass.getMethod("setName", String.class); method2.invoke(person, "张学友");// 重点:与封装性的原则对立,private的属性获取//// Field fsex = pClass.getField("sex");错误:因为声明 的是私有变量// fsex.set(person, "nanshi");// 以下的就会运行成功 Field fsex = pClass.getDeclaredField("sex"); fsex.setAccessible(true); fsex.set(person, "女士"); person.show();// person.display(); }}
以上就是反射机制的最基本问题,后面的很多操作都基于这一思想的实现。在上面的例子中需要注意反射机制对类私有属性和方法的操作。这与面向对象所学的封装性有一点出入。
阅读全文
0 0
- Java笔记-反射机制Reflection API(java动态机制)基础
- java反射机制reflection
- java反射机制--reflection
- JAVA 反射机制--reflection
- java反射机制(Reflection)
- Java - 反射机制(Reflection)
- java Reflection 反射机制
- reflection 反射 Java中的动态机制
- java 反射机制 笔记 reflection .class
- Java反射机制( JAVA Reflection)
- Java反射机制(Reflection )
- java反射机制Reflection学习
- Java反射机制(Reflection)
- java Reflection(反射)机制
- java reflection(反射机制)
- 详解Java反射机制(Reflection)
- Java Reflection(反射机制)详解
- java反射机制基础笔记
- 2017下半年信息系统项目管理师备考记录——论文
- Leetcode:TwoSum
- 这是一碗火龙果,吃完赶紧睡。
- 53. Maximum Subarray
- 20171101|每日练习
- Java笔记-反射机制Reflection API(java动态机制)基础
- 数据库 E-R 图的概念
- windows转linux后网页访问数据库访问不到
- Java实现简单的Json解析器
- 【自留】pyenv在Mac OS 下安装报错信息及解决方案
- 线性表
- 新手搭建VPS+SS服务器
- Cookie和Session
- macOS下基于GLFW+GLAD的OpenGL环境配置