`

java-反射示例

    博客分类:
  • java
阅读更多
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-反射越来越多的被应用,本代码示例描述了如何提高反射效率

    java反射机制+代码示例

    java反射机制+代码示例.rar 看一遍我就明白这是怎么一回事了~~

    Java反射示例代码.rar

    Java反射的demo案例,适合初学者理解,包含基础的各种反射(构造器、属性、方法等),本资源仅用于学习交流。

    java反射示例代码

    Java反射机制:反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能。

    java 反射ppt 和 code 示例

    中科院培训的java反射的PPT 和 java 反射的示例代码 供大家分享 , 谢谢 !

    java类反射示例源码

    通过源码演示java中反射的用法。 下载后直接导入eclipse工程。

    JAVA反射示例

    关于Java反射的示例,使用Java描写,一个相对单一简单的例子。

    Java反射相当的文档及示例

    Java反射相当的文档及示例Java反射相当的文档及示例

    JAVA 反射PPT的示例代码

    JAVA 反射PPT的示例代码;经典示例。

    Java的反射demo示例

    Java的反射的测试代码

    java reflection反射机制示例

    讲述java 反射机制的典型示例,通过学习应该能很好的掌握

    java反射源码示例+注释详细

    利用反射,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个属性和方法。本源码示例了如何通过反射获取一个类的属性和方法,如何通过反射调用对象的属性和方法。

    最简单java 反射原理示例

    本实例是一个最简单的 Java 反射实例 ,分步介绍 和综合介绍 加注释的 希望能与大家交流

    java中的反射机制的示例

    java中的反射机制的示例,反射在java的开发过程中是经常用到的,会使你的代码更灵活,更优秀.

    java反射实例代码

    一个java普通工程,反射的所有方法和实例都有,,另外还有注释,可以帮助理解

    Java反射技术的一般应用

    在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...

    Java开发技术大全(500个源代码).

    代码范例列表 第1章 ... useArray2.java 用反射机制使用数组示例2 第10章 示例描述:本章学习泛型。 demoBounds.java 演示有界类型 demoForceChange.java 演示强制类型转换 demoGeneric.java ...

    Java反射机制学习总结

    Java反射机制学习总结,附带程序示例。

    Java-Inspector:Java 反射和序列化程序

    Java-Inspector 使用 JDOM 库通过反射编写的 Java 对象检查器以及与 XML 文件之间的序列化器和反序列化器。 ##笔记 使用示例对象来测试序列化、反序列化、XML 模块。

    java反射机制示例

    主要介绍了java反射机制示例,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics