Java反射之——Java获取类的成员函数的信息

本文主要讲述如何获取类的信息,包括类的成员变量和成员函数,首先我们先了解一下,基本的数据类型和void关键字有没有各自的类类型,答案是有的!

一、如何获取基本的数据类型和void关键字的类类型:

代码奉上:

public static void main(String[] args) {
        // 基本的数据类型和void关键字都存在类类型
        Class c1 = int.class;//int类的类类型
        Class c2 = String.class;//string类的类类型,(string类的字节码)
        Class c3 = double.class;
        Class c4 = Double.class;
        Class c5 = void.class;
        System.out.println("c1的名称:"+c1.getName());
        System.out.println("c2的名称:"+c2.getName());//类的全称
        System.out.println("c2的名称:"+c2.getSimpleName());//不包含包名的类的全称
        System.out.println("c3的名称:"+c3.getName());
        System.out.println("c4的名称:"+c4.getName());
        System.out.println("c5的名称:"+c5.getName());
        
    }

输出结果:

c1的名称:int
c2的名称:java.lang.String
c2的名称:String
c3的名称:double
c4的名称:java.lang.Double
c5的名称:void

在这里getName()和getSimpleName()是两个不同的方法,前者表示获取类的名称包括包名,而后者获取的是不含包名的类的名称

二、获取类中方法的信息(包括返回值类型、方法名、参数列表类的类类型):

先普及一下在获取类中方法的信息时,Class提供的几个方法

getName()——获取类的名称(得到方法的名称也是使用该方法)

getMethods()——获取类中所有的public修饰的方法,包括其继承类的公用方法和它所实现接口的方法。获取的是一个数组。

getDeclaredMethods()——对象表示的类或接口自身声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当然也包括它所实现接口的方法。

注:方法也是对象,方法是Method的对象。一个成员方法就是一个Method 对象。

getReturnType()——获取方法的返回值类型,得到的是返回值类型的类类型(如果返回值是string,得到的就是string.class;如果返回值类型是int,得到的就是int.class。然后再调用getName()得到返回值类型的名称)。

getParameterTypes()——获取的是参数类型,得到的是参数列表的类型的类类型(参数列表如果是int,int 得到的就是int.class,int.class 并放到数组中)

代码奉上:

/**
 * 打印类的信息
 * 包括类的成员函数和成员变量
 *
 */
public class MethodUtil {
    public static void printMethod(Object object) {
        //首先获取类的类类型,通过getClass()方法(因为参数是一个对象,获取该对象所属类的信息)
        //注:object类是一切类的父类,因此传递的是哪一个子类的对象,获取到的就是该子类的类类型
        Class c = object.getClass();
        //获取类的全称
        System.out.println("类的全称是:"+c.getName());
        //获取类中的所有的方法,使用数组接收
        Method[] me = c.getMethods();
        for (int i = 0; i < me.length; i++) {
            //获取方法的返回值类型的类类型(返回值是string,得到的就是string.class)
            Class returnType = me[i].getReturnType();
            System.out.print("该方法的返回值类型是:"+returnType.getName()+" ");
            //获取对象的全称
            System.out.print("该方法的名称是:"+me[i].getName()+"(");
            //获取参数列表的类型的类类型(参数列表是string, string 得到的就是string.class, string.class)
            Class[] param = me[i].getParameterTypes();
            for (Class class1 : param) {
                System.out.print("参数列表的类型的类类型是:"+class1.getName()+",");
            }
            System.out.println(")");
        }
    }
}

在main方法中调用:MethodUtil.printMethod("hello");
输出结果:

类的全称是:java.lang.String
该方法的返回值类型是:boolean 该方法的名称是:equals(参数列表的类型的类类型是:java.lang.Object,)
该方法的返回值类型是:java.lang.String 该方法的名称是:toString()
该方法的返回值类型是:int 该方法的名称是:hashCode()
该方法的返回值类型是:int 该方法的名称是:compareTo(参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:int 该方法的名称是:compareTo(参数列表的类型的类类型是:java.lang.Object,)
该方法的返回值类型是:int 该方法的名称是:indexOf(参数列表的类型的类类型是:java.lang.String,参数列表的类型的类类型是:int,)
该方法的返回值类型是:int 该方法的名称是:indexOf(参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:int 该方法的名称是:indexOf(参数列表的类型的类类型是:int,参数列表的类型的类类型是:int,)
该方法的返回值类型是:int 该方法的名称是:indexOf(参数列表的类型的类类型是:int,)
该方法的返回值类型是:java.lang.String 该方法的名称是:valueOf(参数列表的类型的类类型是:int,)
该方法的返回值类型是:java.lang.String 该方法的名称是:valueOf(参数列表的类型的类类型是:long,)
该方法的返回值类型是:java.lang.String 该方法的名称是:valueOf(参数列表的类型的类类型是:float,)
该方法的返回值类型是:java.lang.String 该方法的名称是:valueOf(参数列表的类型的类类型是:boolean,)
该方法的返回值类型是:java.lang.String 该方法的名称是:valueOf(参数列表的类型的类类型是:[C,)
该方法的返回值类型是:java.lang.String 该方法的名称是:valueOf(参数列表的类型的类类型是:[C,参数列表的类型的类类型是:int,参数列表的类型的类类型是:int,)
该方法的返回值类型是:java.lang.String 该方法的名称是:valueOf(参数列表的类型的类类型是:java.lang.Object,)
该方法的返回值类型是:java.lang.String 该方法的名称是:valueOf(参数列表的类型的类类型是:char,)
该方法的返回值类型是:java.lang.String 该方法的名称是:valueOf(参数列表的类型的类类型是:double,)
该方法的返回值类型是:char 该方法的名称是:charAt(参数列表的类型的类类型是:int,)
该方法的返回值类型是:int 该方法的名称是:codePointAt(参数列表的类型的类类型是:int,)
该方法的返回值类型是:int 该方法的名称是:codePointBefore(参数列表的类型的类类型是:int,)
该方法的返回值类型是:int 该方法的名称是:codePointCount(参数列表的类型的类类型是:int,参数列表的类型的类类型是:int,)
该方法的返回值类型是:int 该方法的名称是:compareToIgnoreCase(参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:java.lang.String 该方法的名称是:concat(参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:boolean 该方法的名称是:contains(参数列表的类型的类类型是:java.lang.CharSequence,)
该方法的返回值类型是:boolean 该方法的名称是:contentEquals(参数列表的类型的类类型是:java.lang.CharSequence,)
该方法的返回值类型是:boolean 该方法的名称是:contentEquals(参数列表的类型的类类型是:java.lang.StringBuffer,)
该方法的返回值类型是:java.lang.String 该方法的名称是:copyValueOf(参数列表的类型的类类型是:[C,)
该方法的返回值类型是:java.lang.String 该方法的名称是:copyValueOf(参数列表的类型的类类型是:[C,参数列表的类型的类类型是:int,参数列表的类型的类类型是:int,)
该方法的返回值类型是:boolean 该方法的名称是:endsWith(参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:boolean 该方法的名称是:equalsIgnoreCase(参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:java.lang.String 该方法的名称是:format(参数列表的类型的类类型是:java.util.Locale,参数列表的类型的类类型是:java.lang.String,参数列表的类型的类类型是:[Ljava.lang.Object;,)
该方法的返回值类型是:java.lang.String 该方法的名称是:format(参数列表的类型的类类型是:java.lang.String,参数列表的类型的类类型是:[Ljava.lang.Object;,)
该方法的返回值类型是:void 该方法的名称是:getBytes(参数列表的类型的类类型是:int,参数列表的类型的类类型是:int,参数列表的类型的类类型是:[B,参数列表的类型的类类型是:int,)
该方法的返回值类型是:[B 该方法的名称是:getBytes(参数列表的类型的类类型是:java.nio.charset.Charset,)
该方法的返回值类型是:[B 该方法的名称是:getBytes(参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:[B 该方法的名称是:getBytes()
该方法的返回值类型是:void 该方法的名称是:getChars(参数列表的类型的类类型是:int,参数列表的类型的类类型是:int,参数列表的类型的类类型是:[C,参数列表的类型的类类型是:int,)
该方法的返回值类型是:java.lang.String 该方法的名称是:intern()
该方法的返回值类型是:boolean 该方法的名称是:isEmpty()
该方法的返回值类型是:java.lang.String 该方法的名称是:join(参数列表的类型的类类型是:java.lang.CharSequence,参数列表的类型的类类型是:[Ljava.lang.CharSequence;,)
该方法的返回值类型是:java.lang.String 该方法的名称是:join(参数列表的类型的类类型是:java.lang.CharSequence,参数列表的类型的类类型是:java.lang.Iterable,)
该方法的返回值类型是:int 该方法的名称是:lastIndexOf(参数列表的类型的类类型是:int,)
该方法的返回值类型是:int 该方法的名称是:lastIndexOf(参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:int 该方法的名称是:lastIndexOf(参数列表的类型的类类型是:java.lang.String,参数列表的类型的类类型是:int,)
该方法的返回值类型是:int 该方法的名称是:lastIndexOf(参数列表的类型的类类型是:int,参数列表的类型的类类型是:int,)
该方法的返回值类型是:int 该方法的名称是:length()
该方法的返回值类型是:boolean 该方法的名称是:matches(参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:int 该方法的名称是:offsetByCodePoints(参数列表的类型的类类型是:int,参数列表的类型的类类型是:int,)
该方法的返回值类型是:boolean 该方法的名称是:regionMatches(参数列表的类型的类类型是:int,参数列表的类型的类类型是:java.lang.String,参数列表的类型的类类型是:int,参数列表的类型的类类型是:int,)
该方法的返回值类型是:boolean 该方法的名称是:regionMatches(参数列表的类型的类类型是:boolean,参数列表的类型的类类型是:int,参数列表的类型的类类型是:java.lang.String,参数列表的类型的类类型是:int,参数列表的类型的类类型是:int,)
该方法的返回值类型是:java.lang.String 该方法的名称是:replace(参数列表的类型的类类型是:char,参数列表的类型的类类型是:char,)
该方法的返回值类型是:java.lang.String 该方法的名称是:replace(参数列表的类型的类类型是:java.lang.CharSequence,参数列表的类型的类类型是:java.lang.CharSequence,)
该方法的返回值类型是:java.lang.String 该方法的名称是:replaceAll(参数列表的类型的类类型是:java.lang.String,参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:java.lang.String 该方法的名称是:replaceFirst(参数列表的类型的类类型是:java.lang.String,参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:[Ljava.lang.String; 该方法的名称是:split(参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:[Ljava.lang.String; 该方法的名称是:split(参数列表的类型的类类型是:java.lang.String,参数列表的类型的类类型是:int,)
该方法的返回值类型是:boolean 该方法的名称是:startsWith(参数列表的类型的类类型是:java.lang.String,参数列表的类型的类类型是:int,)
该方法的返回值类型是:boolean 该方法的名称是:startsWith(参数列表的类型的类类型是:java.lang.String,)
该方法的返回值类型是:java.lang.CharSequence 该方法的名称是:subSequence(参数列表的类型的类类型是:int,参数列表的类型的类类型是:int,)
该方法的返回值类型是:java.lang.String 该方法的名称是:substring(参数列表的类型的类类型是:int,)
该方法的返回值类型是:java.lang.String 该方法的名称是:substring(参数列表的类型的类类型是:int,参数列表的类型的类类型是:int,)
该方法的返回值类型是:[C 该方法的名称是:toCharArray()
该方法的返回值类型是:java.lang.String 该方法的名称是:toLowerCase(参数列表的类型的类类型是:java.util.Locale,)
该方法的返回值类型是:java.lang.String 该方法的名称是:toLowerCase()
该方法的返回值类型是:java.lang.String 该方法的名称是:toUpperCase()
该方法的返回值类型是:java.lang.String 该方法的名称是:toUpperCase(参数列表的类型的类类型是:java.util.Locale,)
该方法的返回值类型是:java.lang.String 该方法的名称是:trim()
该方法的返回值类型是:void 该方法的名称是:wait()
该方法的返回值类型是:void 该方法的名称是:wait(参数列表的类型的类类型是:long,参数列表的类型的类类型是:int,)
该方法的返回值类型是:void 该方法的名称是:wait(参数列表的类型的类类型是:long,)
该方法的返回值类型是:java.lang.Class 该方法的名称是:getClass()
该方法的返回值类型是:void 该方法的名称是:notify()
该方法的返回值类型是:void 该方法的名称是:notifyAll()
该方法的返回值类型是:java.util.stream.IntStream 该方法的名称是:chars()
该方法的返回值类型是:java.util.stream.IntStream 该方法的名称是:codePoints()
 

我们也可以获取其他类的方法,比如Integer类,在此就不编写啦。

猜你喜欢

转载自blog.csdn.net/qq_42296486/article/details/84782745
今日推荐