Class类:
类是对象 java.lang.Class的实例对象 它的实例就是每一个对象所属的类 那这个对象怎么表示呢?
//第一种
User.class int.class String.class..... Integer.calss 完全跟int不一样 void.class关键字
//第二种 已知对象
user.getClass();
//第三种
class.forNmae("java.util.Date");
以上三种方法都可以通过newInstance()方法创建对象 如果不知道具体创建的对象是哪个 就可以用多态
动态加载类(运行时刻):
第三种是动态加载类 newInstance()
静态加载类(编译时)
new创建对象是编译时加载 如果找不到类就会报错
基本API通过这些api 拿到类的全部信息
public static void main(String[] args) throws ClassNotFoundException {
Class d=Demo2.class;
Method [] m=d.getMethods();//父 子的所有public方法
Method [] m1=d.getDeclaredMethods();//只有自己的所有方法 不管访问权限
/**
- 获取返回值 方法名 获取参数类型
- import java.lang.reflect.Method;
-
*/
for(int i=0;i<m.length;i++)
{
Class returnType=m[i].getReturnType();
Class []par=m[i].getParameterTypes();
System.out.println(returnType.getName());} /***
- 成员变量
- import java.lang.reflect.Field;
/
Field[] fs=d.getFields();//public的 父子
Field [] fss=d.getDeclaredFields();//不问返回值 自己
for(Field field:fss)
{
Class typeNmae=field.getType();
}
/
构造函数
import java.lang.reflect.Constructor;
/
Constructor []cs=d.getDeclaredConstructors();
}
方法的反射操作:
@SuppressWarnings("unchecked")
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Class d=Demo2.class;
/ - 如何获取某一个方法===方法的名称和参数列表决定一个方法
-
method.invoke(名称,参数)
*/
try {
Method m=d.getMethod("say", new Class[]{int.class,int.class});//方法反射就是用m对象来进行方法调用 效果完成相同 //传对象 Demo2 demo=new Demo2(); m.invoke(demo, new Class[]{int.class,int.class});//返回值本来方法返回什么就是什么 } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); }