java反射获取变量
⑴ java中反射是什么
JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制。
Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态语言的一个关键性质。
Java反射的功能是在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调用任意一个对象的方法,生成动态代理。
(1)java反射获取变量扩展阅读:
JAVA中反射实例:
1、Class superClass=clazz.getSuperclass();//获取父类。
System.out.println("getSuperclass:"+superClass)。
2、Class[] interfaces=clazz.getInterfaces();//获取实现接口。
System.out.println("getInterfaces:"+interfaces.length)。
3、Constructor[] cons=clazz.getConstructors();//构造方法。
System.out.println("getConstructors:"+cons.length)。
参考资料来源:网络: JAVA反射机制
⑵ java 中怎么获得以该字符串命名的变量
实现以上场景,在java中有多种方法,最直接方式的是通过反射获取,但是反射有较大的性能损耗,一般不建议用在运行阶段反射,大多开源框架是在初始化的时候通过反射来实例化。
1、通过反射获取
packagetest;
importjava.lang.reflect.Field;
publicclassDemo2{
publicstaticvoidmain(String[]args),IllegalAccessException,NoSuchFieldException,SecurityException{
Stringop="strA";
Testt=newTest();
///通过类的字节码得到该类中声明的所有属性,无论私有或公有
Fieldstrs=Test.class.getDeclaredField(op);
//设置访问权限(这点对于有过android开发经验的可以说很熟悉)
strs.setAccessible(true);
//得到私有的变量值
String[]as=(String[])strs.get(t);
System.out.println(as.length);
}
}
classTest{
privateString[]strA=newString[]{"a","b","c"};
privateString[]strB=newString[]{"d","e","f"};
}
2、通过map设置获取
packagetest;
importjava.util.HashMap;
importjava.util.Map;
publicclassDemo2{
publicstaticvoidmain(String[]args),IllegalAccessException,NoSuchFieldException,SecurityException{
Map<String,String[]>map=newHashMap<String,String[]>();
map.put("strA",newString[]{"a","str","c"});
map.put("strB",newString[]{"d","e","f"});
Stringop="strB";
Stringresult=map.get(op)[0];//"d"
}
}
以上两种方法虽然都能实现需求,但是在实际情况中还是得看具体的情况来界定选择。
⑶ 如何利用java反射顺序的从一个java类中得到其中定义的成员变量名或者方法
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
System.out.println("name====="+fieldName);
String firstLetter = fieldName.substring(0, 1).toUpperCase();
// 获得和属性对应的getXXX()方法的名字
String getMethodName = "get" + firstLetter + fieldName.substring(1);
// 获得和属性对应的getXXX()方法
Method getMethod = classType.getMethod(getMethodName, new Class[]{});
// 调用原对象的getXXX()方法
Object value = getMethod.invoke(object, new Object[]{});
System.out.println("value===="+value);
}
⑷ java中如何通过反射获取类的属性
简单的方法如下:
Class<?> cls=Class.forName(className);////////////////////////通过类的名称反射类
Object obj=cls.newInstance();//////////////////////对象实例化
Field field=cls.getField(fieldName);/////这个对应的是属性
fieldValue=field.get(obj);////这个就是属性的值
⑸ java怎么通过反射获得所有的属性的值
Class<?> clazz = ref.getClass();
Method method=clazz.getMethod("getLength");
System.out.println(method.invoke(ref));