java中的反射简单理解
2017-07-03 11:15
267 查看
先看看书上怎么说的
据我了解反射原理在java框架里面大量被使用,例如spring但是我也没看spring源码不知其实现过程,现在也就简单学习一下吧。基本的东西:
写一个类
用反射来操作它:
操作数组:
参考地址:
http://baike.xsoftlab.net/view/209.html#3_1 (感觉这个人写的很全面也很好了)
书上面还有反射和泛型的使用,反射和javabean之间的使用,有机会了解一下在写了
据我了解反射原理在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之间的使用,有机会了解一下在写了
相关文章推荐
- 理解Spring框架---利用,xml,java反射简单实现Spring
- java反射简单理解
- Java 反射的简单学习(学习之后自己的理解)
- 简单理解java.lang.IllegalStateException异常:简单分析和简单解决方案
- 简单理解java.lang.IllegalStateException异常:简单分析和简单解决方案
- 一个小java反射程序,简单的调用方法。
- java反射及简单例子
- Java String 的简单理解
- JSP应用 java反射简单实现
- 通过JAVA反射实现简单的ORM,将查询结果封装为对象
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解
- java反射技术的简单使用
- 简单理解java.lang.IllegalStateException异常:简单分析和简单解决方案
- Java反射之JDK动态代理实现简单AOP
- 对JAVA简单的理解
- java中关于static的简单理解
- 关于java反射的一些理解
- 简单理解java.lang.IllegalStateException异常
- 深入理解Java的内省与反射
- java 反射机制(一)简单实例