您的位置:首页 > 编程语言 > Java开发

java中的反射简单理解

2017-07-03 11:15 267 查看
先看看书上怎么说的



据我了解反射原理在java框架里面大量被使用,例如spring但是我也没看spring源码不知其实现过程,现在也就简单学习一下吧。基本的东西:

package com.reflect.exercise;

public class Apple {
public int weight =6 ;
public String adress = "japan";

public  void testApple(){

System.out.println("testApple start");
}
}


写一个类

用反射来操作它:

package com.reflect.exercise;

import java.lang.reflect.Field;

import javassist.Modifier;

public class ReflectCalss {

public static void main(String[] args) throws ClassNotFoundException {

Apple a = new Apple();
//反射获取名称
System.out.println(a.getClass().getName());

//三种获取class 的对象的方式

Class c1 = Apple.class;

System.out.println(c1);

Class c2 = a.getClass();

System.out.println(c2);

Class c3  = c1.forName("com.reflect.exercise.Apple");

//调用类的方法,不用new方法

try {
Apple  an = (Apple) c3.newInstance();

an.testApple();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//获取类的属性

Field [] field = c3.getDeclaredFields();

System.out.println(field);
//循环把属性拿出来

for(int i = 0 ;i<field.length;i++){

//拿到属性的名称
System.out.println(field[i].getName());
//获取属性类型

b46f
System.out.println(field[i].getType());
//权限修饰符
int mo = field[i].getModifiers();
String priv = Modifier.toString(mo);

System.out.println(priv);

}

}

}


操作数组:

package com.reflect.exercise;

import java.lang.reflect.Array;
public class TestReflect {
public static void main(String[] args) throws Exception {
int[] temp = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] newTemp = (int[]) arrayInc(temp, 15);
print(newTemp);
String[] atr = { "a", "b", "c" };
String[] str1 = (String[]) arrayInc(atr, 8);
print(str1);
}
// 修改数组大小
public static Object arrayInc(Object obj, int len) {
Class<?> arr = obj.getClass().getComponentType();
Object newArr = Array.newInstance(arr, len);
int co = Array.getLength(obj);
System.arraycopy(obj, 0, newArr, 0, co);
return newArr;
}
// 打印
public static void print(Object obj) {
Class<?> c = obj.getClass();
if (!c.isArray()) {
return;
}
System.out.println("数组长度为: " + Array.getLength(obj));
for (int i = 0; i < Array.getLength(obj); i++) {
System.out.print(Array.get(obj, i) + " ");
}
System.out.println();
}
}


参考地址:

http://baike.xsoftlab.net/view/209.html#3_1 (感觉这个人写的很全面也很好了)

书上面还有反射和泛型的使用,反射和javabean之间的使用,有机会了解一下在写了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java