问题描述
Employee是一个类,getName和raiseSalary是该类中的方法,现在通过Class类的getMethod方法获得获得这两个方法的方法指针,调用如下Java codeMethod m1=Employee.class.getMethod("getName");Method m2=Employee.class.getMethod("raiseSalary",double.class);请问Employee.class.getMethod的class表示什么,去掉class可以么?
解决方案
Employee.class.getMethod 通过反射机制来获取 Employee 类中的方法,跟 Employee e = new Employee(); e.getClass().getMethod 是一样的效果的getMethod是Class中的方法,当然不能去掉class了JAVA反射机制是在运行状态中,对于任意一个类,都能够得到这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 概括一下: 反射就是让你可以通过名称来得到对象(类,属性,方法)的技术。 例如我们可以通过类名来生成一个类的实例; 知道了方法名,就可以调用这个方法;知道了属性名就可以访问这个属性的值。
解决方案二:
通俗地说,就是这样子。。。。。。。java里有一个类叫做Class类,我们每次定义一个类的时候,比如User类,虚拟机加载的时候就会生成一个Class类的对象,User.class,通过User.class就可以知道user这个类有哪些属性和方法,然后才能载入这个User类,供我们调用java反射也是基于这个class类Method m1=Employee.class.getMethod("getName"); 这个就是说通过Employee.class这个对象的getMethod方法,获取到Employee类定义的getName方法
解决方案三:
引用public final class Class<T>extends Objectimplements Serializable, GenericDeclaration, Type, AnnotatedElementClass 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。 Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
解决方案四:
Class<Employee> clazz=Employee.class;Method m1=clazz.getMethod("getName"); Method m2=clazz.getMethod("raiseSalary",double.class); getMethod是Class类的方法