# Java高级之Class类 **Repository Path**: fpfgitmy_admin/java-high-class ## Basic Information - **Project Name**: Java高级之Class类 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-04-28 - **Last Updated**: 2021-04-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### Class类的理解 + 类的加载过程: 1. 程序经过javac.exe命令以后,会生成一个或多个字节码文件(.class结尾), 2. 接着我们用java.exe命令对某个字节码文件进行解释运行。相当于将某个字节码文件加载到内存中,此过程就称为类的加载 3. 加载到内存中的类,我们就称为**运行时类**,此运行时类,就作为class的一个实例 + Class的实例就对应者一个运行时类 + 加载到内存中的运行时类,会缓存一定的时间,在此时间之内,可以通过不同的方法来获取此运行时类 + 类本身也是对象(万事万物皆对象) #### 获取Class实例的4种方式 + 使用方式三较多(反射:体现运行时的动态性),其他方式已经定义好了 1. 方式一:调用运行时类的属性 2. 方式二:通过运行时类的对象,调用getClass() 3. 方式三:调用Class的静态方法:forName(Stirng classPath) 4. 方式四:使用类的加载器:ClassLoader ``` package com.felixfei.study.test; import com.felixfei.study.model.Person; /** * @describle 获取Class实例的4种方式 */ public class TestClass { public static void main(String[] args) throws ClassNotFoundException { // 方式一:调用运行时类的属性 Class class1 = Person.class; System.out.println("获取到的Class=" + class1); // 方式二:通过运行时类的对象,调用getClass() Person person = new Person(); Class class2 = person.getClass(); System.out.println("获取到的Class=" + class2); // 方式三:调用Class的静态方法:forName(Stirng classPath),跟流一样,可能出现找不到这个类,所以抛出异常 Class class3 = Class.forName("com.felixfei.study.model.Person"); System.out.println("获取到的Class=" + class3); // 方式四:使用类的加载器:ClassLoader ClassLoader classLoader = TestClass.class.getClassLoader(); Class class4 = classLoader.loadClass("com.felixfei.study.model.Person"); System.out.println("获取到的class=" + class4); System.out.println("是指向同一个对象=" + (class1 == class2)); System.out.println("是指向同一个对象=" + (class1 == class3)); System.out.println("是指向同一个对象=" + (class1 == class4)); } } ``` #### 哪些类型可以有Class对象 1. class:外部类,成员(成员内部类、静态内部类),局部内部类,匿名内部类 2. interface:接口 3. []:数组 4. enum:枚举 5. annotation:注解@interface 6. primitvice type:基本数据类型 7. void ``` package com.felixfei.study.test; import java.lang.annotation.ElementType; /** * @describle 获取Class实例的4种方式 */ public class TestClass { public static void main(String[] args) { Class objectClass = Object.class; Class comparableClass = Comparable.class; Class aClass = String[].class; Class elementTypeClass = ElementType.class; Class overrideClass = Override.class; Class integerClass = int.class; Class voidClass = void.class; Class classClass = Class.class; int[] ints = new int[10]; int[] ints1 = new int[100]; Class aClass1 = ints.getClass(); Class aClass2 = ints1.getClass(); // 只要数组的元素类型与维度一样,就是同一个Class System.out.println(aClass1 == aClass2); } } ```