java-反射示例
2013-09-17 11:30
120 查看
package cd.itcast.day1; import java.lang.reflect.Constructor; /** * 反射:就是得到类型的描述实例 * * @author Administrator * * 练习: * ReflectDemo cd.itcast.day1.User * 任意传入一个类型,解析这个类型的结构 * * 1,Class c=Class.forName(args[0]); * 2,getPackage(); * 3,getSimpleName(); * 4,getDeclearFields(); * 5,getDeclareConstrcutors(); * 6,getDeclareMethods(); */ public class ReflectDemo { public static void main(String[] args) throws Exception { /** * Class:是所有类(接口)的描述 得到一个类型的描述有三种方式 1,通过类型.class得到 2,通过类型的实例得到 * 3,通过类的全限定名得到类型 * * 直接使用类型.class没有执行类的静态代码快 */ // Class c=User.class; // System.out.println(c); // User u=new User(); // Class c=u.getClass(); // System.out.println(c); Class<?> c = Class.forName("cd.itcast.day1.User"); // test(c); // test2(); /** * Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) * 在反射里面,得到构造方法,方法,字段都有两对方法, getXXX:代表的这个类上面能得到的所有的(包括从父类继承的)public的XXX * getDeclaredXXX:代表的是这个类里面自己声明的所有的 XXX * */ // test3(c); test4(c); System.out.println(c.getName()); System.out.println(c.getSimpleName()); Class c2=User.class; /** * 判断给定的类是否是当前类的子类 * 给定的类:参数中的类 * 当前的类:调用isAssignableFrom方法的类 */ System.out.println(c2.isAssignableFrom(Employee.class)); System.out.println(c2.newInstance()); Class c3=Domain.class; Constructor con=c3.getDeclaredConstructors()[0]; con.setAccessible(true); System.out.println(con.newInstance()); } /** * 方法 */ private static void test4(Class<?> c) throws Exception { Method[] ms=c.getDeclaredMethods(); System.out.println(Arrays.toString(ms)); Method m=c.getDeclaredMethod("getName"); System.out.println(m); Method setter=c.getDeclaredMethod("setName",String.class); User u=new User(); setter.invoke(u, "xxx"); String s=(String)m.invoke(u); System.out.println(s); Method staticm=c.getDeclaredMethod("getDefaultName"); System.out.println(staticm); //执行静态方法 String ret=(String)staticm.invoke(null); System.out.println(ret); } /** * 得到字段 * * @param c * @throws Exception */ private static void test3(Class<?> c) throws Exception { Field[] fs = c.getFields(); System.out.println(Arrays.toString(fs)); User u = new User(); Field f = c.getDeclaredField("name"); /** * 获取私有字段赋值权限.私有字段不能直接赋值,需要调用setAccessible方法. */ f.setAccessible(true); f.set(u, "aaaa"); System.out.println(u.getName()); } private static void test2() throws Exception { Class<User> uc = User.class; Constructor<User> c = uc.getConstructor(); User u = c.newInstance(); System.out.println(u); } private static void test(Class<?> c) throws Exception { // 得到类的所有构造器 Constructor<?>[] cs = c.getConstructors(); System.out.println(Arrays.toString(cs)); // 报错:NoSuchMethodException Constructor<?> cc = c.getConstructor(Long.class, String.class); System.out.println(cc); /** * Constructor用来描述构造方法的类型 */ int i = cc.getModifiers(); System.out.println(i); System.out.println(cc.getName()); // 得到参数的类型列表 System.out.println(Arrays.toString(cc.getParameterTypes())); // 使用构造方法创建这个类的实例 Object o = cc.newInstance(20l, "abc"); User u = (User) o; System.out.println(u.getName()); } }
相关文章推荐
- Java反射10 : 代理Proxy学习示例
- JAVA反射汇总和示例
- dark认为比较好比较全的java反射详解示例
- Java注解教程:自定义注解示例,利用反射进行解析
- Android中Java反射技术的使用示例
- Java -- 反射示例
- Android中Java反射技术的使用示例
- [转载]Java 反射机制(包括组成、结构、示例说明等内容)
- java反射android的r文件的示例
- java中利用反射实现的几个小示例
- java反射代码示例
- Java反射08 : 成员方法Method学习示例
- Java反射详解及应用示例
- Java反射05 : 修饰符Modifier静态方法学习示例
- Java注解教程:自定义注解示例,利用反射进行解析
- JAVA反射示例三——远程方法调用事例
- Java注解:自定义注解示例,利用反射进行解析
- Android中Java反射技术的使用示例
- Java利用反射获取object的属性和值代码示例
- java反射示例