目的 :便于java底层操作 。 功能性的类一般使用动态加载
Class类的使用
·任何类都是Class类的实例对象
·Class类对象三种表示方式 某一个实例对象
Foo foo1 = new Foo()
(1)任何类都有隐含的静态成员变量 class
Class c1 = 其他任何类类名.class 如Foo.class
(2) 已知某个类的对象通过 getClass获得
Class c2 = foo1.getClass()
c1,c2表示Foo类的类类型 这个类表示自己也是个对象,自己也能实例化其他对象
(3)直接 Class.forName("com.imooc.,reflect.Foo")
可以通过类类型创建类的实例
Foo foo = (Foo)c1.newInstance()
需要有无参数的构造方法
动态加载类
编译加载类:静态加载类
运行加载类:动态加载类
·运行时加载 方法二 forName返回加载的类类型 。 也就是字符串代表的类
进一步完善
获取方法信息
获取某个类的名称 返回值类型 参数列表
ClassUtil.java文件
import java.lang.reflect.Method;
public class ClassUtil {
public static void printClassMessage(Object obj){
Class c = obj.getClass();
System.out.println("类的名称是"+c.getName());
Method[] ms = c.getMethods();
//获取所有public函数 包括父类继承来的
Method[] ms2 = c.getDeclaredMethods();
//获取所有自己声明的方法
for(int i=0;i<ms.length;i++){
//getReturnType获取方法返回值类型的类类型 如int.class
//int.class.getName才可以得到int
Class returntype = ms[i].getReturnType();
System.out.print(returntype.getName()+" ");
//某个具体的方法对象 getName() 获取方法名
System.out.print(ms[i].getName()+"(");
// 获取参数类型 ---参数列表的类型的类类型
Class[] paramTypes = ms[i].getParameterTypes();
for (Class class1 : paramTypes) {
System.out.print(class1.getName()+",");
}
System.out.println(")");
}
}
}
ClassDemo.java文件
package com.imooc.reflect;
public class ClassDemo {
public static void main(String[] args) {
String s = "Hello";
ClassUtil.printClassMessage(s);
Integer n1 =1;
ClassUtil.printClassMessage(n1);
}
}