java反射
2016-07-04 17:29
369 查看
一、概念:
反射:主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!
二、作用:
1、反编译:.class-->.java
2、通过反射机制访问java对象的属性,方法,构造方法等;
三、sun公司的反射机制的类:
java.lang.Class;
java.lang.reflect.Constructor; java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;
下面看一个例子:
[java]
view plain
copy
<span style="font-family:FangSong_GB2312;font-size:18px;">import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
//通过这个类解析出People类的所有字段、方法,并对People进行实例化
public class TestFlact {
@Test
public void loadClazz() throws ClassNotFoundException, SecurityException,
NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
Class<?> clazz = Class.forName("People"); //把People类加载到内存
//创建出类的实例
Constructor<?> con = clazz.getConstructor(String.class);//获得People的构造函数
People p = (People) con.newInstance("hello");//调用people构造函数获得实例
//解析出所有的字段
Field[] f = clazz.getDeclaredFields();
for (Field field :f){
System.out.println(field.toGenericString());
}
//解析出所有方法。
Method[] method = clazz.getMethods();
for(Method th : method){
System.out.println(th.getName().toString());
}
}
}
</span>
People类:
[java]
view plain
copy
<span style="font-family:FangSong_GB2312;font-size:18px;">public class People {
String name ;
int age;
boolean sex;
People(){
}
People(String name){
}
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 boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
}
</span>
输出结果:java.lang.String People.name
int People.age
boolean People.sex
getName
setName
getAge
setAge
isSex
setSex
wait
wait
wait
hashCode
getClass
equals
toString
notify
notifyAll
反射:主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!
二、作用:
1、反编译:.class-->.java
2、通过反射机制访问java对象的属性,方法,构造方法等;
三、sun公司的反射机制的类:
java.lang.Class;
java.lang.reflect.Constructor; java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;
下面看一个例子:
[java]
view plain
copy
<span style="font-family:FangSong_GB2312;font-size:18px;">import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
//通过这个类解析出People类的所有字段、方法,并对People进行实例化
public class TestFlact {
@Test
public void loadClazz() throws ClassNotFoundException, SecurityException,
NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
Class<?> clazz = Class.forName("People"); //把People类加载到内存
//创建出类的实例
Constructor<?> con = clazz.getConstructor(String.class);//获得People的构造函数
People p = (People) con.newInstance("hello");//调用people构造函数获得实例
//解析出所有的字段
Field[] f = clazz.getDeclaredFields();
for (Field field :f){
System.out.println(field.toGenericString());
}
//解析出所有方法。
Method[] method = clazz.getMethods();
for(Method th : method){
System.out.println(th.getName().toString());
}
}
}
</span>
People类:
[java]
view plain
copy
<span style="font-family:FangSong_GB2312;font-size:18px;">public class People {
String name ;
int age;
boolean sex;
People(){
}
People(String name){
}
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 boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
}
</span>
输出结果:java.lang.String People.name
int People.age
boolean People.sex
getName
setName
getAge
setAge
isSex
setSex
wait
wait
wait
hashCode
getClass
equals
toString
notify
notifyAll
相关文章推荐
- java线程同步锁
- eclipse快捷键及重置快捷键
- 【FAQ】ubuntu:java opensdk 7 如何升级到 8?
- 用java代码调用名片识别接口示例代码
- REST与Spring mvc(未完成)
- RxJava学习笔记(二)--- 操作符
- java annotation
- java语言基础入门——运算符的介绍
- 一致性哈希算法与Java实现
- 使用欧几里得算法计算两个数的最大公约数
- Java的JSON处理器fastjson使用详解
- 浅析Java中的final关键字
- java transient
- Java 中的抽象类与接口
- [改善Java代码]避开基本类型数组转换列表陷阱
- Spring 基础知识及练习
- 灾备测试
- Axis2+MyEclipse通过WSDL2Java生成wsdl客户端
- 收集的27个java开发常用工具类.基本满足开发需求
- 提高Java 性能的5点 理解+实用