1.获取Class对象的三种方式
①通过类名获取 类名.class
②通过对象获取 对象名.getClass()
③通过全限定类名获取(必须添加完整包名)
public static void main(String[] args) {
List list = new ArrayList();
System.out.println(List.class);//interface java.util.List
/*
* list.getClass()返回值为一个Class类的对象,
* 在输出时,自动调用Class类中的toString()方法,做相关逻辑处理,
* 然后输出interface java.util.List或者class java.util.ArrayList等字符串
*/
System.out.println(list.getClass());//class java.util.ArrayList
//list.getClass().getName()返回值为一个字符串
System.out.println(list.getClass().getName());//java.util.ArrayList
System.out.println(ArrayList.class);//class java.util.ArrayList
System.out.println(List.class == list.getClass());//false
System.out.println(list.getClass() == ArrayList.class );//true
}
2.反射
Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的內部信息,并能直接操作任意对象的内部属性及方法。
Java反射机制主要提供了以下功能:
- 在运行时构造任意一个类的对象
- 在运行时获取任意一个类所具有的成员变量和方法
- 在运行时调用任意一个对象的方法(属性)
- 生成动态代理
Class 是一个类; 一个描述类的类.
封装了描述方法的 Method,
描述字段的 Filed,
描述构造器的 Constructor 等属性.