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(); } } }