Java类的加载机制和反射机制

Java类的加载机制和反射机制
一、 Java类的加载机制
jvm把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成jvm可以直接使用的java类型 的过程。
1、 加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结 构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口。
2、 链接:将java类的二进制代码合并到jvm的运行状态之中的过程,链接过程又分为3个过程:

  1. 验证:确保加载的类信息符合jvm规范,没有安全方面的问题。
  2. 准备:正式为类变量(static变量)分配内存并设置类变量初始值的阶段,这些内存都将在方法区中进行分配
  3. 解析:虚拟机常量池内的符号引用替换为直接引用的过程。(比如String s =“aaa”,转化为 s的 地址指向“aaa”的地址)
    3、 初始化:初始化阶段是执行类构造器方法的过程。类构造器方法是由编译器自动收集类中的所有类变 量的赋值动作和静态语句块(static块)中的语句合并产生的。
    1、 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先初始化其父类的初始 化
    2、 虚拟机会保证一个类的构造器方法在多线程环境中被正确加锁和同步
    3、 当访问一个java类的静态域时,只有真正声明这个静态变量的类才会被初始化。
    二、 Java类的生命周期
    在这里插入图片描述

三、 Java类的反射机制
在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够 调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的 功能就称为java语言的反射机制。通俗点讲,通过反射,该类对我们来说是完全透明的,想要获取任何 东西都可以。
1、 Class类的常用类
1、 修饰符:static
返回值类型:Class
方法(形参):forName(String className)
说明:返回与带有给定字符串名的类 或接口相关联的 Class 对象。
2、 修饰符:static
返回值类型:class
方法(形参):forName(String name, boolean initialize, ClassLoader loader)
说明:使用给定的类加载器,返回与 带有给定字符串名的类或接口 相关联的 Class 对象。
3、 返回值类型:ClassLoader
方法(形参):getClassLoader()
说明:返回该类的类加载器。
4、 返回值类型:Constructor
方法(形参):getConstructor(Class… parameterTypes)
说明:返回一个 Constructor 对象, 它反映此 Class 对象所表示的 类的指定公共构造方法。
5、 返回值类:Constructor[]
方法(形参):getConstructors()
说明:返回一个包含某些 Constructor 对象的数组,这 些对象反映此 Class 对象所表 示的类的所有公共构造方法。
6、 返回值类:Constructor
方法(形参):getDeclaredConstructor(Class… parameterTypes)
说明:返回一个 Constructor 对象, 该对象反映此 Class 对象所表 示的类或接口的指定构造方 法。
7、 返回值类:Constructor[]
方法(形参):getDeclaredConstructors()
说明:返回 Constructor 对象的一个 数组,这些对象反映此 Class 对象表示的类声明的所有构造 方法。
8、 返回值类:Field
方法(形参):getDeclaredField(String name)
说明:返回一个 Field 对象,该对象反 映此 Class 对象所表示的类或 接口的指定已声明字段。
9、 返回值类:Field[]
方法(形参):getDeclaredFields()
说明:返回 Field 对象的一个数组,这 些对象反映此 Class 对象所表 示的类或接口所声明的所有字 段。
10、 返回值类:Method
方法(形参):getDeclaredMethod(String name, Class… parameterTypes)
说明:返回一个 Method 对象,该对 象反映此 Class 对象所表示的 类或接口的指定已声明方法。
11、 返回值类:Method[]
方法(形参):getDeclaredMethods()
说明:返回 Method 对象的一个数 组,这些对象反映此 Class 对 象表示的类或接口声明的所有 方法,包括公共、保护、默认 (包)访问和私有方法,但不 包括继承的方法。
12、 返回值类:Field
方法(形参):getField(String name)
说明:返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的 指定公共成员字段。
13、 返回值类型:Field[]
方法(形参):getFields()
说明:返回一个包含某些 Field 对象的 数组,这些对象反映此 Class 对象所表示的类或接口的所有 可访问公共字段。
14、 返回值类型:Method
方法(形参):getMethod(String name, Class… parameterTypes)
说明:返回一个 Method 对象,它反 映此 Class 对象所表示的类或 接口的指定公共成员方法。
15、 返回值类型:Method []
方法(形参):getMethods ()
说明:返回一个包含某些 Method 对 象的数组,这些对象反映此 Class 对象所表示的类或接口 (包括那些由该类或接口声明 的以及从超类和超接口继承的 那些的类或接口)的公共 member 方法。
四、 多线程基础
1、 几乎所有的操作系统都支持进程的概念,所有运行中的任务通常对 应一个进程(Process)。当一个程序 进入内存运行时,即变成一个进程。进程是处于运行过程中的程序,并且具有一定的独立功能,进程是 系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。
独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一 个进程都拥有自己私有 的地址空间。在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空 间。
动态性:进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的 指令集合。在进程中加入了时间的概念。进程具有自己的生命周期和各种不同的状态,这些概念在 程序中都是不具备的。
并发性:多个进程可以在单个处理器上并发执行,多个进程之间不会互相影响。
2、 大部分操作系统都支持多进程并发运行,现代的操作系统几乎都支持同时运行多个任务。
3、 多线程则扩展了多进程的概念,使得同一个进程可以同时并发处理多个任务。线程(Thread)也被称作 轻量级进程(Lightweight Process),线程是进程的执行单元。就像进程在操作系统中的地位一样,线 程在程序中是独立的、并发的执行流。当进程被初始化后,主线程就被创建了。对于绝大多数的应用程 序来说,通常仅要求有一个主线程,但也可以在该进程内创建多条顺序执行流,这些顺序执行流就是线 程,每个线程也是互相独立的。
4、 线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程可以拥有自己 的堆栈、自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享该进程 所拥有的全部资源。因为多个线程共享父进程里的全部资源,因此编程更加方便;但必须更加小心,因 为需要确保线程不会妨碍同一进程里的其他线程线程可以完成一定的任务,可以与其他线程共享父进程中的共享变量及部分环境,相互之间协同来完成进程所要完成的任务。
进程:进程是系统进行资源分配和调度的基本单位,可以将进程理解为一个正在执行的程序
线程:线程是程序执行的最小单位,一个进程可由一个或多个线程组成。
总结:操作系统可以同时执行多个任务,每个任务就是进程; 进程可以同时执行多个任务,每个任务就 是线程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值