Java 中的 java.lang.Class 类2024年9月10日 | 阅读 25 分钟 Java 的 **java.lang.Class** 类是 Java 反射 API 的一个基本组成部分,它允许软件工程师在编码过程中检查和修改类。作为 java.lang 包的一部分,它特指 Java 应用程序中的一个特定类。从 Class 类实例化的对象代表了当前正在运行的 Java 程序中的类和接口。Java 的 "Class" 类提供了诸如 Boolean、Byte、Char、Short、Int、Long 和 FloatingPoint 值等基本数据类型。与其他大多数类不同,"Class" 没有公共构造函数,而是在运行时由 Java 虚拟机 (JVM) 在执行过程中创建。 Java 中的 Class 类充当了当前运行的 Java 程序中类和接口的表示。它提供了各种方法来检索有关类的信息,包括其名称、超类、实现的接口和方法。 Class 类的方法
示例文件名: ClassInfoExample.java 输出 The class name is: java.lang.String The simple class name is: String The superclass is: java.lang.Object The interfaces implemented are: [interface java.io.Serializable, interface java.lang.Comparable, interface java.lang.CharSequence] Is it possible to assign String to Object? false 创建 Class 对象在 Java 中创建 Class 对象可以通过多种方法实现。以下是三种常用的方法: 1. Class.forName("className") Class.forName(String className) 方法是 Class 类的一个静态工厂方法。它为提供的类名(字符串形式)创建一个 Class 对象。类名必须包含完整的路径,即我们要查找的特定类的完全限定名。 语法 2. MyClass.class 在类名后附加 .class 会引用代表该类的 Class 对象。当类名在编译时已知时,可以使用此方法。它经常与原始数据类型一起使用。 语法 3. obj.getClass() `getClass()` 方法属于 Object 类。当使用它时,它会给出对象的实际类。当我们在程序运行时想要确定类类型时,它很有用。 语法 方法String toString()该方法将 Class 对象转换为字符串,通过添加 "class" 或 "interface",然后是空格,最后是对象所属类的完整名称。如果 Class 对象代表基本数据类型,则方法返回该类型的名称;否则,它返回 "void"。 语法 参数
返回值
覆盖
文件名: StringDemo.java 输出 Output String 1: Hello World Output String 2: Welcome to javatpoint Class<?> forName(String className)它返回与给定字符串名称的类或接口关联的 Class 对象。 语法 参数
返回值
异常: 该方法可能会抛出以下异常
文件名: ClassLoadingExample.java 输出 Loaded Class Name: java.util.ArrayList Class<?> forName(String className,boolean initialize, ClassLoader loader)该方法还提供了与给定字符串名称标识的类或接口关联的 Class 对象,并利用提供的类加载器。指定的类加载器负责加载类或接口。如果未指定 `loader` 参数或其为 null,则在初始化过程中(仅当 `initialize` 参数设置为 `true` 且类尚未经过初始化时)将通过引导类加载器加载该类。 语法 参数
返回值
抛出
文件名: DynamicClassLoadingDemo.java 输出 Class represented by loadedClass: class java.lang.String T newInstance()`newInstance()` 方法会创建一个由调用对象代表的类的新实例。它是一种无需显式使用 `new` 关键字即可动态实例化对象的方法。新实例的类型基于调用方法的对象的类型。请记住,此方法假定类有一个默认(无参数)构造函数,并且如果此条件不满足或出现其他实例化问题,它可能会抛出异常。 语法 类型参数
参数
返回值
抛出
boolean isInstance(Object obj)该方法检查给定对象是否可以赋值给此 Class 代表的类型。它与 Java 中的 instanceof 运算符类似,用于验证指定对象是否与它所代表的类兼容。 语法 参数
返回值
文件名: BooleanExample.java 输出 Is sampleString an instance of String? : true Is sampleDouble an instance of String? : false boolean isAssignableFrom(Class<?> cls)boolean isAssignableFrom 方法用于检查一个类是否可以代替另一个类使用。如果当前对象所代表的类与指定的类 (`cls`) 相同,或者是指定类的超类或超接口,则返回 true。否则,返回 false。 语法 参数
返回值
抛出
文件名: ExampleBoolean.java 输出 Is ExampleBoolean assignable from Thread class? : true Is ExampleBoolean assignable from String class? : false boolean isInterface()boolean isInterface() 方法用于确定 Class 对象所代表的类或接口是否为接口。 语法 返回值
文件名: booleanisInterface.java 输出 Is String an interface? : false Is Runnable an interface? : true boolean isPrimitive()boolean isPrimitive() 方法用于确定 Class 对象所代表的类是否为原始数据类型。 语法 返回值
文件名: booleanisPrimitive.java 输出 Is int a primitive type? : true Is String a primitive type? : false boolean isArray()它用于确定 Class 对象是否代表一个数组类。如果类是数组类,则该方法返回 true,否则返回 false。 语法 参数
返回值
文件名: ArrayCheckExample.java 输出 The class represented by [I is an array: true The class represented by ArrayCheckExample is an array: false boolean isAnonymousClass()当且仅当当前类是匿名类时,该方法才返回 true。匿名类类似于局部类,主要区别在于它没有指定名称。 语法 参数
返回值
文件名: AnonymousExample.java 输出 Class Name = AnonymousExample Is this an Anonymous Class? false boolean isLocalClass()isLocalClass() 方法用于确定一个类是否在方法内部声明,从而使其成为局部类。如果类是局部的,则返回 true,否则返回 false。 语法 参数
返回
文件名: LocalClassExample.java 输出 Class Name = LocalClassExample Is this a LocalClass? false boolean isMemberClass()isMemberClass() 方法是 Java 中 Class 类的一部分,用于确定该类是否代表一个成员类(非局部、非匿名)类。成员类是在另一个类或接口中直接定义的类。 语法 参数
返回
文件名: MemberClassExample.java 输出 The class name is: MemberClassExample Is this class a member class? false boolean isEnum()它用于确定 Class 对象是否代表一个枚举类型。 语法 参数
返回值
文件名: EnumCheckExample.java 输出 TrafficLight is an Enum class: true EnumCheckExample is an Enum class: false boolean isAnnotation()它用于确定 Class 对象是否代表一个注解类型。如果类是注解类型,则该方法返回 true,否则返回 false。 语法 参数
返回值
文件名: AnnotationCheckExample.java 输出 MyAnnotation is an annotation type: true AnnotationCheckExample is an annotation type: false String getName()它用于获取 Class 对象所代表的类、接口、数组或原始类型的完全限定名。该方法返回一个包含名称的 String。 语法 参数
返回值
文件名: GetNameExample.java 输出 Name of class String: java.lang.String String getSimpleName()getSimpleName() 方法属于 Java 中的 java.lang.Class 类,用于检索源代码中指定的底层类的名称。如果底层类是匿名的,则该方法返回一个空字符串。对于数组,简单名称是从组件类型派生的,后跟 "[]" 以表示数组。具体来说,对于具有匿名组件类型的数组,简单名称表示为 "[]"。 语法 参数
返回值
文件名: GetSimpleNameExample.java 输出 Simple name of class String: String Simple name of class Integer: Integer ClassLoader getClassLoader()它用于获取 Class 对象所代表的类或接口的类加载器。该方法返回加载该类或接口的 ClassLoader 对象。 语法 参数
返回值
抛出
文件名: GetClassLoaderExample.java 输出 Class loader for String class: null Class loader for current class: jdk.internal.loader.ClassLoaders$AppClassLoader@5cb0d902 TypeVariable<Class<T>>[ ] getTypeParameters()它用于获取一个 TypeVariable 对象数组,该数组表示泛型类或接口(由 Class 对象代表)声明的类型参数。 语法 参数
返回值
抛出
文件名: TypeVariableDemo.java 输出 Type parameter of List class: E Class<? super T> getSuperclass()它用于获取 Class 对象,该对象代表 Class 对象所代表的类或接口的超类。如果此 Class 对象所代表的类是接口,则该方法返回 null。 语法 参数
返回值
文件名: GetSuperclassExample.java 输出 Instance 1 is an object of type: SuperClass Superclass of Instance 1: java.lang.Object Instance 2 is an object of type: SubClass Superclass of Instance 2: SuperClass Type getGenericSuperclass()Type getGenericSuperclass() 方法检索代表实体(可以是类、接口、原始类型或 void)的直接超类的 Type,该实体由此 Class 实例封装。 语法 参数
返回值
抛出
文件名: GenericTypeDemo.java 输出 java.util.ArrayList Class<?>[] getInterfaces()`java.lang.Class.getInterfaces()` 方法用于识别此对象所代表的类或接口所实现的接口。 语法 返回值
文件名: GetInterfacesExample.java 输出 Interfaces implemented by java.lang.String: java.io.Serializable java.lang.Comparable java.lang.CharSequence Type[] getGenericInterfaces()它用于获取 Type 对象数组,该数组代表当前 Class 对象所代表的类或接口实现的泛型接口。 语法 返回值
抛出
文件名: GetGenericInterfacesExample.java 输出 Interfaces implemented by Set interface: java.util.Collection Package getPackage()它用于检索当前 Class 对象所代表的类或接口的包。 语法 返回值
文件名: GetPackageExample.java 输出 Package of java.lang.String: java.lang Field[] getFields()Java 中的 `getFields()` 方法是 `Field` 类的一部分,用于检索 `Field` 对象数组,这些对象代表特定类或接口的字段。 语法 参数
返回
抛出
文件名: GetFieldsExample.java 输出 Below are the fields of Integer class: public static final int java.lang.Integer.MIN_VALUE public static final int java.lang.Integer.MAX_VALUE public static final java.lang.Class java.lang.Integer.TYPE public static final int java.lang.Integer.SIZE public static final int java.lang.Integer.BYTES Class<?>[ ] getClasses()它用于获取 Class 对象数组,代表当前 Class 对象类(Class object class)的公共成员类和接口。 语法 返回
抛出
文件名: GetClassesExample.java 输出 Public Member Classes of GetClassesExample: Method[] getMethods()它用于检索 Method 对象数组,这些对象反映当前 Class 对象所代表的类或接口的公共方法。它包括类本身及其超类和接口的公共方法。 语法 返回
抛出
文件名: GetMethodsExample.java 输出 Public Methods of MyClass: method1 method2 wait wait wait equals toString hashCode getClass notify notifyAll Constructor<?>[] getConstructors()它用于检索 Constructor 对象数组,这些对象反映当前 Class 对象所代表的类或接口的所有公共构造函数。 语法 返回
抛出
文件名: ConstructorsExample.java 输出 Constructors of Boolean class:public java.lang.Boolean(boolean) public java.lang.Boolean(java.lang.String) Field getField(String fieldName)它用于获取一个 Field 对象,该对象反映当前 Class 对象所代表的类或接口的指定公共成员字段。 语法 参数
返回值
抛出
文件名: ExampleGetField.java 输出 Public field in Integer class with MIN_VALUE name: public static final int java.lang.Integer.MIN_VALUE Method getMethod(String methodName,Class… parameterTypes)该方法检索一个 `Method` 对象,提供有关当前 `Class` 对象所代表的类或接口的特定公共方法的全面反射详细信息。 语法 参数
返回值
抛出
文件名: ExampleMethodGetMethod.java 输出 Details of the 'length' method in the String class: Method Name: length Return Type: int Constructor<?> getConstructor(Class<?>… parameterTypes)该方法获取一个 Constructor 对象,该对象代表当前 Class 对象所指示类的特定公共构造函数。parameterTypes 参数是一个 Class 对象数组,指定构造函数的参数类型,并按声明的顺序排列。 语法 参数
返回
抛出
文件名: ExampleConstructor.java 输出 Constructor in Integer class with String parameter: public java.lang.Integer(java.lang.String) throws java.lang.NumberFormatException T cast(Object obj)该方法将一个对象转换为此 `Class` 对象所指示的类或接口。 语法 参数
返回
文件名: ExampleTCast.java 输出 Casting Result: Hello, World! <U> Class<? extends U> asSubclass(Class<U> clazz)该方法将此 Class 对象转换为代表指定类对象所代表的类的子类。 语法 参数
返回值
抛出
文件名: ExampleClassExtends.java 输出 Integer class cast as a subclass of Number: java.lang.Integer 下一主题Java 中的反向层序遍历 |
我们请求您订阅我们的新闻通讯以获取最新更新。