目录
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
的形式返回它们。
- 确定此对象所表示的类或接口实现的接口,并以