class的获得方式
1.直接通过类的静态属性.class得到。如:Date.class
2.通过对象的方法:getClass()得到,在Object中有这个方法。
3.通过类的字符串全名,得到类对象。调用Class.forName("完全限定类名") ,会有ClassNotFoundException异常。注:三种方式得到的类对象,是同一个对象
class的常用方法
1.getName() 得到类的完全限定类名。如:java.util.Date
2.getSimpleName() 得到类名。 如:Date
class的组成部分
一个类包含:构造方法,成员变量,成员方法
Class中使用:Constructor表示构造方法,Field表示成员变量,Method表示成员方法
Constructor构造方法
代表一个构造方法,通过构造方法实例化对象。
Constructor<T> | getConstructor(Class<?>... parameterTypes) |
Constructor<T> | getDeclaredConstructor(Class<?>... parameterTypes) |
Constructor<?>[] | getConstructors() |
Constructor<?>[] | getDeclaredConstructors() |
注:有Declared的可以得到所有声明的方法,没有Declared的只能得到公有的方法私有的构造方法在调用前设置: setAccessible(true);
反射创建对象
Constructor对象.newInstance(方法的参数值);
Method成员方法
反射机制中,把类中的成员方法使用类Method表示。
Method | getMethod(String name, Class<?>... parameterTypes) |
Method | getDeclaredMethod(String name, Class<?>... parameterTypes) |
Method[] | getMethods() |
Method[] | getDeclaredMethods() |
1.调用实例方法
method对象.invoke(对象, 方法的参数值);
2.调用静态方法
method对象.invoke(null, 参数); //静态方法的调用
Field成员变量
反射机制中,把类中的成员变量使用类Field表示
Field | getField(String name) |
Field | getDeclaredField(String name) |
Field[] | getFields() |
Field[] | getDeclaredFields() |
1.给基本类型赋值
setDouble(对象, 值)8种基本类型都有相应的方法:set基本类型(对象,值)
2.给引用类型赋值
set(对象,值)将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
3.获得属性
getName() 得到变量的名字
getType() 得到变量的类型,返回Class对象
整合案例
Empolyee
public class Emoplyee { |
Main
public static void main(String[] args) throws Exception {
|