最近多看了一些书,发现之前一些没时间好好学习懂的内容,都开始慢慢理解了
可以这么理解,java是编译型语言,像python是解释性语言,编译型语言的特点是必须编译后才能运行,而解释性语言则是边执行边解释
java反射机制给java提供了这么一种动态编译的方案
1 获取类的相关信息,获取所有方法名,变量名等信息
2 使用反射生成并操作对象(还在研究中)
反射是需要获取对应class类的,在任何一个object类中,默认的一个方法就是getclass这个就是与其相关的
首先,来看下获取反射类的方法,一共三种
1 class.forName()
2 xx.class
3 xx.getclass()
class Reflect{
public String myname = "reflect";
private String pmyname = "preflect";
protected String protectname = "protect";
public String getString(){
return "i am reflect";
}
}
public class test {
public void dosomething(){
try {
//方法1
Class a = Class.forName("java.lang.reflect.Field");
//Object object = a.newInstance();
Field[] ret = a.getDeclaredFields();
StringBuffer sb = new StringBuffer();
//Modifier 是修饰符工具类,返回类的修饰符
//getModifiers 返回public private等修饰符代表的int数据
//getSimpleName返回底层类名,如Reflect, getName返回实体类名,包括包名,如com.test.Reflect
sb.append(Modifier.toString(a.getModifiers())+" "+a.getSimpleName());
for(Field field:ret){
sb.append("\n");
sb.append(Modifier.toString(field.getModifiers())+" ");
sb.append(field.getType().getSimpleName()+" ");
sb.append(field.getName()+" ");
}
Log.d("wangqing",sb.toString());
//方法2
Class b = java.lang.reflect.Field.class;
//方法3
Reflect instance = new Reflect();
Class c = instance.getClass();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}