摘要:
现在,我们来思考一个问题,类加载器负责加载Java核心库的类,加载我们编写的应用类,但类加载器本身也是一个类,那么又是谁来加载类加载器呢? 内建于JVM中的根类加载器会加载java.lang.ClassLoader以及其他的Java平台类。 当JVM启动时,一块特殊的机器码会运行,它会加载扩展类加载 阅读全文
摘要:
日常开发中,我们会在类中的方法引用其他的类,如果A类的方法引用了B类,那么加载器在加载A类时,所引用的类或者对象是怎么加载呢? 这里我们预先生成两个类MyCat和MySample: package com.leolin.jvm; public class MyCat { public MyCat() 阅读全文
摘要:
一个类加载器对象主要用于负责加载类,当我们将一个字符串形式的类名作为参数,传给类加载器的方法去加载类的时候,类名必须满足Java所规定的二进制名字。什么是二进制名字呢?比如下面几个例子: java.lang.String javax.swing.JSpinner$DefaultEditor java 阅读全文
摘要:
Java类加载器 Java虚拟机自带的加载器: 根类加载器(Bootstrap):该加载器没有父加载器,它负责加载虚拟机中的核心类库。根类加载器从系统属性sun.boot.class.path所指定的目录中加载类库。类加载器的实现依赖于底层操作系统,属于虚拟机的实现的一部分,它并没有集成java.l 阅读全文
摘要:
来看下面的代码,我们通过MyParent4这个类来创建数组,看看是否会执行MyParent4的静态代码块: package com.leolin.jvm; public class MyTest4 { public static void main(String[] args) { MyParent 阅读全文
摘要:
类的加载、连接、初始化 在Java代码中,类型的生命周期分为五个步骤: 加载 连接 初始化 使用 卸载 Java作为编译型语言,与其他编译型语言不同的是,很多编译型语言类型的加载、连接、初始化都是在编译阶段,而Java是在程序运行期间完成的,这位我们提供了更大的灵活性,比如我们可以在Java运行期间 阅读全文
摘要:
聚合 考虑这样一个场景,如果我们要开发一个电商系统,按照现在流行的微服务架构,肯定是希望前端和后端独立成两个项目分别进行开发和部署,但前端和后端很多时候有共同的业务。比如,笔者就曾经遇到后端可以帮助用户下单,逻辑与前端用户下单的业务逻辑一致,如果两个项目独立开发,那么下单的代码势必要在两个项目中重复 阅读全文
摘要:
何为坐标 前面说过,Maven的一大功能是管理项目依赖。为了能自动化地解析任何一个Java构件,Maven就必须将它们唯一标识,这就依赖管理的底层基础——坐标。 关于坐标(Coordinate),大家最熟悉的定义应该来自于立体几何。在一个立体坐标系中,该立体空间内的任何一个点,都能够用坐标(x,y, 阅读全文
摘要:
编写POM 像Make的Makefile、Ant的build.xml一样,Maven项目的核心是pom.xml。POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。现在先为Hello World项目编写一个简单的pom.xm 阅读全文
摘要:
在Windows上安装Maven 在安装Maven之前,先确保你的电脑上已安装JDK,由于网上安装JDK的教程不尽其数,所以就不再重复。打开Windows命令行,来检查Java安装: 我们到Maven的官网去下载Maven文件,笔者在写这篇文章的时候,最新的Maven版本是3.6.3的压缩包,解压之 阅读全文