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-反射越来越多的被应用,本代码示例描述了如何提高反射效率
java反射机制+代码示例.rar 看一遍我就明白这是怎么一回事了~~
Java反射的demo案例,适合初学者理解,包含基础的各种反射(构造器、属性、方法等),本资源仅用于学习交流。
Java反射机制:反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能。
中科院培训的java反射的PPT 和 java 反射的示例代码 供大家分享 , 谢谢 !
通过源码演示java中反射的用法。 下载后直接导入eclipse工程。
关于Java反射的示例,使用Java描写,一个相对单一简单的例子。
Java反射相当的文档及示例Java反射相当的文档及示例
JAVA 反射PPT的示例代码;经典示例。
Java的反射的测试代码
讲述java 反射机制的典型示例,通过学习应该能很好的掌握
利用反射,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个属性和方法。本源码示例了如何通过反射获取一个类的属性和方法,如何通过反射调用对象的属性和方法。
本实例是一个最简单的 Java 反射实例 ,分步介绍 和综合介绍 加注释的 希望能与大家交流
java中的反射机制的示例,反射在java的开发过程中是经常用到的,会使你的代码更灵活,更优秀.
一个java普通工程,反射的所有方法和实例都有,,另外还有注释,可以帮助理解
在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...
代码范例列表 第1章 ... useArray2.java 用反射机制使用数组示例2 第10章 示例描述:本章学习泛型。 demoBounds.java 演示有界类型 demoForceChange.java 演示强制类型转换 demoGeneric.java ...
Java反射机制学习总结,附带程序示例。
Java-Inspector 使用 JDOM 库通过反射编写的 Java 对象检查器以及与 XML 文件之间的序列化器和反序列化器。 ##笔记 使用示例对象来测试序列化、反序列化、XML 模块。
主要介绍了java反射机制示例,需要的朋友可以参考下