自学内容网 自学内容网

java反射Class类的api

目录

Class类

1.构造器相关

1)Constructor getConstructor(Class... parameterTypes):

2)Constructor[] getConstructors():

3)Constructor getDeclaredConstructor(Class... parameterTypes):

4)Constructor[] getDeclaredConstructors():

5)案例:获取构造器

1.代码

2.效果

2.字段(成员变量)相关

1)Field getField(String name):

2)Field[] getFields():

3)Field getDeclaredField(String name):

4)Field[] getDeclaredFields():

案例:获取字段

1.代码

2.效果

3.方法相关

1)Method getMethod(String name, Class... parameterTypes):

2)Method[] getMethods():

3)Method getDeclaredMethod(String name, Class... parameterTypes):

4)Method[] getDeclaredMethods():

5)案例:获取所有的方法

1.代码

2.效果

4.类信息相关

1)String getName():

2)Package getPackage():

3)Class getSuperclass():

4)Class[] getInterfaces():

5)TypeVariable>[] getTypeParameters():

6)boolean isInterface():

7)boolean isArray():

8)boolean isPrimitive():

9)T newInstance() throws InstantiationException, IllegalAccessException:

10)案例:获取类信息

1.代码

2.效果

5.注解相关

1) A getAnnotation(Class annotationClass):

2)Annotation[] getAnnotations():

3)boolean isAnnotationPresent(Class annotationClass):

案例:获取注解

1.代码

2.效果

6.泛型相关

1)Type getGenericSuperclass():

2)Type[] getGenericInterfaces():


Class类

  Class类在Java中是一个非常重要的类,它代表了运行时类的信息。每个类都有一个对应的Class对象,该对象包含了与类相关的元数据信息。Class类提供了许多方法来获取这些信息,如构造器、字段(成员变量)、方法等。下面是Class类的一些主要方法及其参数说明:

1.构造器相关

  • 1)Constructor<T> getConstructor(Class<?>... parameterTypes):

    • 返回具有指定参数类型公共构造函数
  • 2)Constructor<?>[] getConstructors():

    • 返回公共构造函数的数组
  • 3)Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes):

    • 返回具有指定参数类型的声明构造函数(无论访问级别)。
  • 4)Constructor<?>[] getDeclaredConstructors():

    • 返回所有声明的构造函数(无论访问级别)。

5)案例:获取构造器

1.代码

实体类

package org.xiji.c;

import java.util.Objects;

public class Cat {
    private String name;

    private String color;

    private int age;

    public Cat() {
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cat cat = (Cat) o;
        return age == cat.age && Objects.equals(name, cat.name) && Objects.equals(color, cat.color);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, color, age);
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Cat(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;
    }
}

测试类

package org.xiji.c;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class MyCatT {
    public static void main(String[] args) throws ClassNotFoundException, InvocationTargetException, InstantiationException, IllegalAccessException {


        //通过类获取
        Class<?> myClass = Class.forName("org.xiji.c.Cat");

        //获取所有构造
        Constructor<?>[] constructors = myClass.getConstructors();
        //遍历构造
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }
        System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------)");
        Cat cat = (Cat) constructors[0].newInstance("X", "black", 3);

        System.out.println(cat);
        //无参数构造
        System.out.println("无参数构造");
        Cat cat1 = (Cat) constructors[1].newInstance();
        cat1.setName("ZZ");
        cat1.setAge(6);
        cat1.setColor("black");
        System.out.println(cat1);

    }
}

2.效果

2.字段(成员变量)相关

  • 1)Field getField(String name):

    • 返回具有指定名称的公共字段。
  • 2)Field[] getFields():

    • 返回公共字段的数组
  • 3)Field getDeclaredField(String name):

    • 返回具有指定名称声明字段(无论访问级别)。
  • 4)Field[] getDeclaredFields():

    • 返回所有声明的字段(无论访问级别)。

案例:获取字段

1.代码
package org.xiji.c;

import java.lang.reflect.Field;

public class MyCatThree {
    public static void main(String[] args) throws ClassNotFoundException {

        System.out.println("获取所有的字段");
        Class<?> myClass = Class.forName("org.xiji.c.Cat");
        System.out.println("获取属性不限字段方法getDeclaredFields()");
        System.out.println("获取公共属性用getFields()");
        Field[] fields = myClass.getDeclaredFields();

        System.out.println(fields.length);
        for (Field field : fields) {
            System.out.println(field);
            System.out.println(field.getName());
            System.out.println(field.getType());

            System.out.println(field.getModifiers());
            System.out.println("--------------------------------");

            System.out.println(field.getDeclaringClass());
            System.out.println("获取注解");
            System.out.println(field.getAnnotations());

        }
    }
}

cat类

package org.xiji.c;

import java.util.Objects;

public class Cat {
    private String name;

    private String color;

    private int age;

    public Cat() {
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cat cat = (Cat) o;
        return age == cat.age && Objects.equals(name, cat.name) && Objects.equals(color, cat.color);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, color, age);
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Cat(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;
    }
}

2.效果

3.方法相关

  • 1)Method getMethod(String name, Class<?>... parameterTypes):

    • 返回具有指定名称和参数类型列表的公共方法
  • 2)Method[] getMethods():

    • 返回公共方法的数组,包括继承的方法。
  • 3)Method getDeclaredMethod(String name, Class<?>... parameterTypes):

    • 返回具有指定名称和参数类型列表的声明方法(无论访问级别)。
  • 4)Method[] getDeclaredMethods():

    • 返回所有声明的方法(无论访问级别)。

5)案例:获取所有的方法

1.代码
package org.xiji.c;

import java.lang.reflect.Method;

public class MyCatAll {

    public static void main(String[] args) throws ClassNotFoundException
    {
        System.out.println("获取所有的方法");
        System.out.println("获取方法不限方法getDeclaredMethods();");
        System.out.println("获取公共方法用getMethods();");
        Class<?> myClass = Class.forName("org.xiji.c.Cat");

        Method[] methods = myClass.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println(method.getName());
            System.out.println(method.getReturnType());
            System.out.println(method.getParameterTypes());
            System.out.println(method.getModifiers());
            System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------)");
        }

    }
}

cat类

package org.xiji.c;

import java.util.Objects;

public class Cat {
    private String name;

    private String color;

    private int age;

    public Cat() {
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cat cat = (Cat) o;
        return age == cat.age && Objects.equals(name, cat.name) && Objects.equals(color, cat.color);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, color, age);
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Cat(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;
    }
}

2.效果

4.类信息相关

  • 1)String getName():

    • 返回此Class对象表示的实体(类、接口、数组类或原始类型)的名称
  • 2)Package getPackage():

    • 获取此类的
  • 3)Class<? super T> getSuperclass():

    • 返回表示此类直接超类的Class对象。
  • 4)Class<?>[] getInterfaces():

    • 确定此对象所表示的类或接口实现的接口
  • 5)TypeVariable<Class<T>>[] getTypeParameters():

    • 返回类型变量的数组
  • 6)boolean isInterface():

    • 判断这个类是否为接口
  • 7)boolean isArray():

    • 判断这个类是否为数组类
  • 8)boolean isPrimitive():

    • 判断这个类是否为基本类型
  • 9)T newInstance() throws InstantiationException, IllegalAccessException:

    • 创建Class对象表示的类的新实例

10)案例:获取类信息

1.代码
package org.xiji.c;

public class GetMyCatClassInfo {
    public static void main(String[] args) throws ClassNotFoundException
    {
        Class<?> clazz = Class.forName("org.xiji.c.Cat");
        System.out.println(clazz.getTypeName());

        System.out.println(clazz.getName());
        System.out.println(clazz.getSimpleName());
        System.out.println(clazz.getPackage());
        System.out.println(clazz.getSuperclass());
        System.out.println(clazz.getDeclaredFields());
        System.out.println(clazz.getDeclaredMethods());
        System.out.println(clazz.getDeclaredConstructors());
        System.out.println(clazz.getModifiers());
        System.out.println(clazz.getAnnotations());


    }
}

2.效果

5.注解相关

  • 1)<A extends Annotation> A getAnnotation(Class<A> annotationClass):

    • 如果存在这样的注解,则返回此元素上存在的指定类型的注解,否则返回null。
  • 2)Annotation[] getAnnotations():

    • 返回此元素上的所有注解
  • 3)boolean isAnnotationPresent(Class<? extends Annotation> annotationClass):

    • 如果此元素上有指定类型的注解,则返回true,否则返回false。

案例:获取注解

1.代码
package org.xiji.c;


import javax.management.MXBean;


@MXBean

public class Dog {
    private String name;
    private String color;
    private int age;


}

2.效果

6.泛型相关

  • 1)Type getGenericSuperclass():

    • 返回表示此Class所表示的实体(类、接口、基本类型或void)的直接超类的Type
  • 2)Type[] getGenericInterfaces():

    • 确定此对象所表示的类或接口实现的接口,并以Type的形式返回它们。


原文地址:https://blog.csdn.net/2301_76862031/article/details/142824905

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!