JVM类加载过程 1.概述 从类的生命周期而言,一个类包括如下阶段: 加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序进行,而解析阶段则不一定...文件 相对于类生命周期的其他阶段而言,加载阶段(准确地说,是加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,因为开发人员既可以使用系统提供的类加载器来完成加载,也可以自定义自己的类加载器来完成加载...如果类中没有静态变量或静态代码块,那么clinit方法将不会被生成。 2. 在执行clinit方法时,必须先执行父类的clinit方法。 3. clinit方法只执行一次。...();调用构造方法 x++;//x=1 因为此时x的值为连接的准备阶段赋的默认值0,然后++变成1 y++;//y=1 因为此时y的值为连接的准备阶段赋的默认值0,然后++变成1...x++;//x=1 因为此时x的值为连接的准备阶段赋的默认值0,然后++变成1 y++;//y=1 因为此时y的值为初始化阶段赋的初值,只是这个初值刚好等于默认值0而已,然后++变成1
生命周期各个阶段详解 clean 生命周期阶段 描述 pre-clean 执行一些清理前需要完成的工作。 clean 清理上一次构建生成的文件。...5 插件 Maven 三套生命周期定义各个阶段不做任何实际工作,实际工作都是由插件来完成的,每个生命周期阶段都是由插件的目标来完成。...插件绑定 内置绑定 为实现快速构建,Maven 有一套内置的插件绑定。三套生命周期的插件绑定具体如下(其实是各个生命周期阶段与插件的目标的绑定)。...下面是默认绑定插件与生命周期关系图: 自定义绑定 自定义绑定允许我们自己掌控插件目标与生命周期的结合。以生成项目主代码的源码 jar 为例。...使用到的插件和它的目标为:maven-source-plugin:jar-no-fork。将其绑定到 default 生命周期阶段 verify 上(可以任意指定三套生命周期的任意阶段)。
生命周期各个阶段详解 clean 生命周期阶段 描述 pre-clean 执行一些清理前需要完成的工作。 clean 清理上一次构建生成的文件。...插件 Maven 三套生命周期定义各个阶段不做任何实际工作,实际工作都是由插件来完成的,每个生命周期阶段都是由插件的目标来完成。...内置绑定 为实现快速构建,Maven 有一套内置的插件绑定。三套生命周期的插件绑定具体如下(其实是各个生命周期阶段与插件的目标的绑定)。...自定义绑定 自定义绑定允许我们自己掌控插件目标与生命周期的结合。以生成项目主代码的源码 jar 为例。 使用到的插件和它的目标为:maven-source-plugin:jar-no-fork。...将其绑定到 default 生命周期阶段 verify 上(可以任意指定三套生命周期的任意阶段)。
在JVM中一个类的生命周期包括了:加载、验证、准备、解析、初始化、使用、卸载7个阶段,其中验证、准备和解析统称为连接 加载 加载是第一阶段,因为此时的虚拟机中还没有class的相关信息,必须将class...加载的过程主要分为以下3个步骤: 根据类的全限定名取得类的二进制流 注意这里指定的是类的二进制流而不是说.class文件,由此可知这是个典型的面向接口编程呀,基于这个机制,我们可以把类放在任何地方。...比如:在核心代码从数据库中获取、动态代理生成的类、JSP等其他文件转换 讲类的二进制流转化为方法区的运行时数据结构 在堆中生成类对应的java.lang.Class对象 验证 验证阶段所做的操作类似于我们的一个接口接收到外部的请求之后首先需要做的事...: a=0b=0L 而final类型的变量则没有这一步骤,设置初始值的时候跳过零值设置初始值 解析 解析阶段主要是将符合引用替换为直接引用 符合引用是使用一组符合来描述所引用的目标,简单来说是一个假的地址...,引用的目标可能还没加载到内存中 直接引用则是一个直接指向目标的指针,真实的地址 解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用 初始化 初始化阶段主要是为类的静态变量
类的整个生命周期的7个阶段是:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using...在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问入口。...保证跳转指令不会跳转到方法体以为的字节码指令上。保证方法体上的类型转换是有效的,例如:可以把一个子类对象赋值给父类数据类型,但是不能把父类对象赋值给子类数据类型。...的值在准备阶段被设置的初始值为0而不是666,因为此时尚未开始执行任何Java方法,而把value赋值为666的putstatic指令是程序编译后,存放于类构造器()方法之中,所以把value...上面说到在“通常情况”下初始值是零值,在非“通常情况”下也就是类字段属性中存在常量属性的时候,那么在准备阶段类变量就会被初始化为常量属性所指定的值。
[I] 构造React组件的两种方法 React.createClass() class MyComponent extends React.Component [II] React组件的几个生命周期阶段...以告知React加载内容的位置 在此次调用中,React开始处理传递来的元素,并生成组件实例 该元素的type属性指向组件,用来生成实例,并向其传递props 3.3 初始化和构造函数 在从元素初始化组件的过程中...() 是第一个真正的生命周期方法 该方法仅在初始化渲染之前被调用一次 因为是在render()之前调用,所以无法访问DOM等原生UI 因为子元素等尚未创建,也无法访问refs 可以对this.props...,区别在于每次更新过程,该方法都会被调用 因为此时重新渲染尚未完成,所以组件可以访问到旧的UI和即将过期的refs,可以在此时发起CSS动画等,也是调度事件的好时机 可以比较新老props和state,...根据每个元素上生成或指定的keys(https://facebook.github.io/react/docs/lists-and-keys.html),判断其是新建、删除还是需要更新 对于keys相同的元素
仓库管理 生命周期 插件和目标 继承 聚合 Maven 的核心程序中仅仅定义了抽象的生命周期,而具体的操作则是由 Maven 的插件来完成的。...比 如,运行 mvn clean,这个 clean 是 Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean 阶段。 5.6.2....Clean 生命周期 Clean 生命周期一共包含了三个阶段: pre-clean:执行一些需要在 clean 之前完成的工作 clean:移除所有上一次构建生成的文件 post-clean:执行一些需要在...:将生成的站点文档部署到特定的服务器上 这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大 的功能,Manager 比较喜欢...插件和目标 Maven 的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的 每个插件都能实现多个功能,每个功能就是一个插件目标 Maven 的生命周期与插件目标相互绑定,以完成某个具体的构建任务
借助maven可以将一个项目拆分成多个工程 项目中需要的jar必须要手动”复制”,”粘贴”到WEB-INF/lib目录下,带来的问题是:同样的jar包文件重复出现在不同的项目工程中,浪费空间。...”仓库”中的指定位置 部署:将动态web工程生成的war包复制到servlet容器的指定目录下,使其可以运行 maven核心概念 约定的目录结构 POM 坐标 依赖 仓库 生命周期/插件/目标 继承 耦合...,但是具体的工作必须由特定的插件来完成,而插件本身并不包含在maven的核心程序中。...:servlet.jar 生命周期 各个环节构建的顺序:不能打乱顺序,必须按照既定的正确顺序来执行,maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的,maven无论现在要执行生命周期的哪一个阶段...插件和目标 生命周期的各个阶段紧紧定义了要执行的任务是什么 各个阶段和插件的目标是对应的 相似的目标由特定的插件来完成 可以将目标看做”调用插件功能的命令” 依赖 依赖的传递性 如果A依赖B,B依赖C
,compile就是目标的名称 @phase :默认将该目标绑定至default声明周期的某个阶段,这样在配置使用插件目标时,就无需声明phase,如maven-surefire-plugin的test...目标带有@phase tes标注 @requiresDependencyResolution :在运行mojo之前必须解析所有指定范围的依赖,如maven-surefire-plugin的test目标带有...如果是本插件目标,则直接调用目标名称,否则,使用“prefix:goal” @execute phase="":在运行该目标前,让maven先运行一个并行的生命周期,到指定的阶段为止。...到phase执行完,才执行插件目标 @execute lifecycle="" phase = "":在运行该目标前,让maven先运行一个自定义的生命周期,到指定的阶段为止。...maven生命周期的哪个阶段触发执行 插件可在如下阶段触发执行 @Parameter这个功能的作用有两个 It provides hooks to allow the user to adjust
(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。...) 使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些过程规范为一个生命周期,如下所示是生命周期的各各阶段: ?...一组标准集合 maven 将整个项目管理过程定义一组标准,比如:通过 maven 构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。...插件(plugin)目标(goal) maven 管理项目生命周期过程都是基于插件完成的。 3.2 idea 开发 maven 项目 在实战的环境中,我们都会使用流行的工具来开发项目。...system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用。
的test目标带有@phase tes标注 @requiresDependencyResolution :在运行mojo之前必须解析所有指定范围的依赖,如maven-surefire-plugin...的test目标带有requiresDependencyResolution test标注,表示执行测试前,所有测试范围的依赖必须得到解析 @requiresProject :该目标是否必须在一个...如果是本插件目标,则直接调用目标名称,否则,使用“prefix:goal” @execute phase="":在运行该目标前,让maven先运行一个并行的生命周期,到指定的阶段为止。...到phase执行完,才执行插件目标 @execute lifecycle="" phase = "":在运行该目标前,让maven先运行一个自定义的生命周期,到指定的阶段为止...maven生命周期的哪个阶段触发执行 插件可在如下阶段触发执行 [image.png] @Parameter这个功能的作用有两个 It provides hooks to allow the user
三种生命周期 下面列出了default、clean和site生命周期的所有构建阶段,这些阶段按照指定的顺序执行。...注意:执行某个生命周期的某个阶段不会影响其它的生命周期!...如果要同时执行多个生命周期的阶段可在命令行输入多个命令,中间以空格隔开,例如: clean package 该命令执行clean生命周期的clean阶段和default生命周期的package阶段。...Site生命周期 执行阶段 描述说明 pre-site 在实际的项目站点生成之前执行过程 site 生成项目的站点文档 post-site 执行确定站点生成的过程,并为站点部署做好准备...site-deploy 将生成的站点文档部署到指定的web服务器
Maven 的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。有三套相互独立的生命周期,各个构建环节执行顺序不能打乱,必须按照既定的正确顺序来执行。...mvn -clean,也就等同于 Clean 生命周期中的第一个阶段 mvn pre-clean clean。...这里我们强调一下:「在maven中,只要在同一个生命周期,你执行后面的阶段,那么前面的阶段也会被执行,而且不需要额外去输入前面的阶段」。...这里经常用到的是 site 阶段和 site-deploy 阶段,用来生成和发布 maven 站点,这是 Maven 比较强大的功能,文档及统计数据自动生成。...Maven 插件原理 什么是 Maven 插件 上面我们讲了 Maven 的生命周期,我们知道 Maven 的核心是生命周期,生命周期指定了 Maven 命令执行的流程顺序。
jar:jar:jar插件的jar目标 Archetype:快速生成项目骨架,感觉和SpringBoot的Starter很像,都是一堆jar包的集合 第四章 背景案例 略 第五章 坐标和依赖 Maven...一样,使用此依赖范围必须通过systemPath元素显示地指定依赖文件的路径,systemPath可使用环境变量,例如${java.home}/lib/rt.jar。...项目,maven内置绑定了一些核心的生命周期与插件目标 支持自定义绑定 Maven 生命周期的阶段与插件的目标之间的绑定关系 clean 生命周期 clean 生命周期的阶段 插件的目标...生命周期阶段 插件目标 执行任务 process-resources maven-resources-plugin:resources 复制主资源文件至主输出目录 compile maven-compiler-plugin...site 生命周期 site 生命周期的阶段 插件的目标 pre-site site maven-site-plugin:site post-site site-deploy
类加载时机 类的生命周期 类从加载到内存到写在出内存,生命周期包括: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initialization...在一个阶段的执行过程中调用,激活另外一个阶段 加载的时机根据JVM不同而不同 有且只有以下5种情况必须初始化: 遇到new, getstatic, putstatic I或者incokestatic...类加载过程 2.1 加载 加载阶段,JVM做三件事: 通过一个类的全限定名来获取此类的二进制字节流 将这个字节流代表的静态存储结构转化为方法区的运行时数据结构 在内存中生成一个代表这个类的java.lang.Clas...保证跳转指令不会跳转到方法体以外的字节码指令上 保证方法体中的类型转换有效 4.符号引用验证:在连接的第三个阶段——解析阶段发生。...父类的()方法肯定会执行,所以父类的静态语句块要先于子类的变量赋值操作 ()对于类或者接口不是必须的,如果一个类没有静态语句块也没有对变量的赋值操作,编译器可以不生成<clinit
这个实例化对象有一个生命周期,也就是所谓的Servlet生命周期。 Servlet生命周期分为三个阶段: 初始化阶段 有两种情况下会进入初始化阶段,这个阶段是Servlet生命周期的开始。...然后可以通过调用HttpRequest对象的有关方法获取http请求信息,同时也可以再调用HttpResponse对象的有关方法,生成响应数据,最后web服务器把响应结果反馈给客户端。...以上这个接收服务端请求并反馈处理结果的过程就是响应客户请求阶段。 终止(结束)阶段 有两种方式可以进入终止阶段,这个阶段也就是Servlet生命周期的结束。...——建议客户访问其他URL或访问方式 304——客户端已经执行了GET,但文件未变化 305——请求的资源必须从服务器指定的地址得到 306——前一版本HTTP中使用的代码,现行版本中不再使用 307—...上面这种直接通过URL访问的默认是get访问类型,可以看到请求头内容里的第一段写的就是GET类型。我们可以写一个简单的表单,指定post访问类型,看看访问后请求头会显示什么: Html代码示例: ?
本地依赖,不在maven中央仓库 这个必须和systemPath结合使用,用来指定本地依赖的位置 <!...maven的生命周期有三个部分组成,分别为clean生命周期,site生命周期,default生命周期 生命周期调用的特点 三大生命周期中也会包含各个阶段,并且各个阶段是有序进行的,maven为了实现构建的自动化...,编译、测试、打包、部署 包括如下的23个生命周期阶段: 生命周期阶段 描述 validate 检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到。...process-classes 处理编译生成的文件,例如 Java Class 字节码的加强和优化。 generate-test-sources 生成编译阶段需要包含的任何测试源代码。...包含以下阶段 pre-site:执行一些需要在生成站点文档之前完成的工作 site:生成项目的站点文档 post-site:执行一些需要生成站点文档之后完成的工作 site-deploy:将生成站点文档部署到特定的服务器上
1.3、使用Maven的好处 Maven中使用约定,约定java源代码代码必须放在哪个目录下,编译好的java代码又必须放到哪个目录下,这些目录都有明确的约定。...clean生命周期每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean是Clean生命周期的一个阶段。...Clean生命周期一共包含了三个阶段: pre-clean 执行一些需要在clean之前完成的工作 clean 移除所有上一次构建生成的文件 post-clean 执行一些需要在clean之后立刻完成的工作...将生成的站点文档部署到特定的服务器上 这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成...Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务,例如compile就是插件maven-compiler-plugin的一个插件目标。
default是处理你项目部署的;clean生命周期是清楚你项目的;site生命周期是生成你的项目文档的。...default生命周期由一下的阶段组成: validate:验证项目正确性和所有需要的信息是否正确; compile:编译项目源代码; test:用单元测试框架测试编译后的代码,测试阶段不需要代码打包和部署...你只需要调用最后一个执行的命令即可。 下面的命令可以清除本地构建并重新打包发布到远程仓库: mvn clean deploy 每一个构建阶段都是由插件目标组成的,一个插件目标代表着一个特殊的工作。...它可以被绑定到多个构建阶段中,如果插件目标没有绑定到构建阶段中, 可以直接使用命令去执行。它们执行的顺序取决于命令的顺序。...super pom中的配置在你的pom中是有效的。
领取专属 10元无门槛券
手把手带您无忧上云