java反射(二)

Class类使用

数据类型的类类型

1
2
3
4
5
6
7
8
9
10
Class c1 = int.class;//int类型的类类型
Class c2 = String.class//String类的类类型
//基本数据类型和封装类的类类型不一样
Class c3 = double.class;
Class c4 = Double.class;//c3 与c4是不一样的类类型。
Class c5 = void.class//void也有它的类类型
System.out.println(c1.getName());//输出的时int
System.out.println(c2.getName());//输出的时String类的全名称:java.lang.String
System.out.println(c2.getSimpleClass());//此时输出的时String

这可以认为数据类型也是一种对象,他们可以利用.class来的到他们的类类型,然后通过.getName()方法来取到该类型的名称。

取得一个类中的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void fun(Object obj){
Class c = obj.class;//取得obj对象的类类型
Method []ms = c.getMethod();//取得obj的类中的所有public方法,包括父类继承的
Method []ms2 = c.getDeclaredMethod();//获取所有该类自己声明的方法,不管是什么访问权限
for(int i = 0;i < ms.length;i++){
Class returnType = ms[i].getReturnType();//取得某个方法中的返回值类型
//以上的到得全是方法的类类型即(xxx.class)
System.out.println(returnType.getName());//通过getName()方法取得返回值类型的名称
System.out.print(ms[i].getName()+"(");
Class paramType = ms[i].getParameterTypes();//取得参数列表的参数类型
System.out.print(ms[i].getParameterTypes+",");
System.out.println(")");
}
}

在类中,方法是Method类的对象,这样我们可以通过.getMethod()方法获得方法对象,再将方法的名称输出,从而获得方法名称。再通过.getReturnType().getParameterTypes()这两个方法分别获得返回值类型和参数列表的类型。但是需要注意的是这两个方法获得是数据类型的类类型,我们需要通过使用.getName()方法获得类型的名称,把这些拼接到一起就能得到一个类的所有的方法的完整的信息。