宗策

导航

java反射机制

package seday18c;

import java.lang.reflect.Method;

/**
 * java反射机制
 * java反射机制是一种动态机制,它允许我们加载一个类实例化一个类,调用方法或操作属性从编码期间确定转为在运行期间确定。
 * 这样做可以大大提高代码的灵活度,但是反射有更大的资源开销。所以不能过度依赖反射。
 */
public class ReflectDemo1 {

	public static void main(String[] args) {
		/*
		 * Class类
		 * Class类的每一个实例用于表示JVM已经加载的一个类。并且在JVM内部每个被加载的类都有且只有一个Class的实例与之对应。
		 * 通过类对象我们可以:
		 * 获取其表示的类的名字,构造方法,方法,属性,并可以快速实例化。
		 * 获取一个类的类对象有以下方式:
		 * 1:直接通过类的静态属性class得到。比如像获取String的类对象,可以: Class cls = String.class; 
		 * 2:通过Class的静态方法forName加载:Class cls = Class.forName("java.lang.String");
		 * 3:通过类加载器ClassLoader     
		 */
		try { 
			//方式一:直接通过类的静态属性class得到
			Class clss = Integer.class;
			String names=clss.getName();//获取类名
			System.out.println(names);//打印名称
			Method [] method1=clss.getDeclaredMethods();//获取本类定义的方法(不含超类继承的方法)
			System.out.println(method1.length);//长度
			//遍历
			for(Method method2 : method1) {
				System.out.println(method2.getName());//打印
			}
			System.out.println("----------------------------------");//打印分割线
			//方式二:通过Class的静态方法forName加载Integer
			Class cls =Class.forName("java.lang.Integer");
			String name=cls.getName();//获取类名
			System.out.println(name);
			//获取所有方法(含从超类继承的方法)
			//Method[] methods = cls.getMethods();
			//获取本类定义的方法(不含超类继承的方法)
			Method [] methods=cls.getDeclaredMethods();
			//长度
			System.out.println(methods.length);
			//遍历
			for(Method method : methods) {
				System.out.println(method.getName());
			}

		} catch (ClassNotFoundException e) {

			e.printStackTrace();
		}
	}
}

  

posted on 2020-04-08 14:40  宗策  阅读(160)  评论(0编辑  收藏  举报