Java类加载器与Java反射

java

一、Java类加载器

当程序要使用某个类时,如果该类还没有被加载到内存中,JVM会通过加载、连接、初始化三个步骤,实现对这个类的初始化。

  • 加载

       将class文件读入JVM内存,并创建一个Class对象,任何类被使用时只有一个Class对象。

  • 连接

       验证是否有正确的内部结构,并和其他类协调一致

       准备负责为类静态成员分配内存,并设置默认初始化

       解析该类的二进制数据中的符号引用替换为直接引用

  • 初始化

     初始化相关步骤

二、Java反射

反射是在运行时根据指定的类获取类的信息。

对于任意一个类,都能够知道这个类的属性和方法;对于任意一个对象,都能够调用它的任意方法与属性。

要想了解一个类,必须先要获得字节码文件对象Class对象。

2.1 通过反射获取Class

获取Class对象的三种方式

  • 对象.getClass
  • 类名.class
  • Class.forName

import agent.Person;

/**

* 对象.getClass

* 类名.class

* Class.forName

*/

public class Reflect {

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

//方式一 对象.class

Person person = new Person();

System.out.println("对象.class "+ person.getClass());

//方式二:类名.class

System.out.println("类名.class "+Person.class);

//方式三:class.forName

System.out.println("class.forName "+Class.forName("agent.Person"));

}

}

2.2 通过反射获取实现接口及父类

import agent.Person;

public class Reflect2 {

public static void main(String[] args) {

//获取运行时类

Class cl = Person.class;

//获取类实现的接口

Class[] interfaces = cl.getInterfaces();

for (Class cls : interfaces){

//获取类接口的名称

System.out.println(cls.getName());

}

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

for (Class cls : interfaces){

//获取类接口的名称的简称

System.out.println(cls.getSimpleName());

}

//获取父类

Class class1 = cl.getSuperclass();

System.out.println(class1);

}

}

2.2 通过反射获取构造

 获取构造方法

getConstructors

getDeclaredConstructors

创建对象

newInstance()

con.newInstance()

以上是 Java类加载器与Java反射 的全部内容, 来源链接: utcz.com/z/394320.html

回到顶部