------- android培训、java培训、期待与您交流! ----------
-
在一些通用的框架中,很多情况下,我们并不知道程序的源码,所能拿到的往往是一些class文件,在这种情况下,如果想要知道源程序的构造,反射,可以帮我们实现。
反射:就是把java类中的各种成分映射成相应的java类。
一个java类中的组成部分field、method、constructor、package等信息都可以用反射API的一个实例对象来表示通过调用Class类的想对应的方法,都可以拿到相对应的实例对象。当然了,用反射的编程手法与编程思想去编写代码,都应该首先拿到各个字节码所对应的Class实例对象。有下面三种方法:
1)类名.class.
2)对象.class
3)Class.forName("类名")
学习反射,就应该跟一般方式对比着学,通过两种方式的不同,来体会反射的重大意义
例:
public class ReflectTest
{
public static void main(String[] args)throws Exception
{
String str="basketball";
changStringValue(str);
}
privae static void changStringValue(Object obj)throws Exception
{
Field[] fields=obj.getClass().getFields();
for(Field field:fields)
{
if(field.getType()==String.class)
{
String oldValue=(String)field.get(obj);
System.out.println(oldValue);
String newValue=oldValue.replace("b","a");
System.out.println(newValue);
field.set(obj,newValue);
System.out.println(field.get(obj));
}
}
}
}
这个小例子虽然短小,但反映出了反射的本质所在。
当然了,刚才的这个小代码仅仅是反射的一个简单应用而已,在基础加强视频中,反射还将影响着javabean,spring框架,在java的常用框架中,也都是采用反射的原理来实现的,反射的更多更复杂的功能,还需要我们在以后的日子里共同学习。
反射:就是把java类中的各种成分映射成相应的java类。
一个java类中的组成部分field、method、constructor、package等信息都可以用反射API的一个实例对象来表示通过调用Class类的想对应的方法,都可以拿到相对应的实例对象。当然了,用反射的编程手法与编程思想去编写代码,都应该首先拿到各个字节码所对应的Class实例对象。有下面三种方法:
1)类名.class.
2)对象.class
3)Class.forName("类名")
学习反射,就应该跟一般方式对比着学,通过两种方式的不同,来体会反射的重大意义
例:
public class ReflectTest
{
public static void main(String[] args)throws Exception
{
String str="basketball";
changStringValue(str);
}
privae static void changStringValue(Object obj)throws Exception
{
Field[] fields=obj.getClass().getFields();
for(Field field:fields)
{
if(field.getType()==String.class)
{
String oldValue=(String)field.get(obj);
System.out.println(oldValue);
String newValue=oldValue.replace("b","a");
System.out.println(newValue);
field.set(obj,newValue);
System.out.println(field.get(obj));
}
}
}
}
这个小例子虽然短小,但反映出了反射的本质所在。
当然了,刚才的这个小代码仅仅是反射的一个简单应用而已,在基础加强视频中,反射还将影响着javabean,spring框架,在java的常用框架中,也都是采用反射的原理来实现的,反射的更多更复杂的功能,还需要我们在以后的日子里共同学习。