Java开发的基石:JDK
Java开发的基石:JDK
- 前言
- 一、引入
- 二、JDK的发展历程
- 三、JDK主要目录结构解析
- 四、JDK的使用
前言
本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!
一、引入
JDK是Java Development Kit的缩写,是Java开发工具的核心组件。JDK包含了Java编译器、Java运行时环境、Java API类库和其他工具,用于开发、编译、运行和调试Java应用程序。JDK是Java开发的基础,是Java程序员必须掌握的工具之一。
二、JDK的发展历程
JDK有很多版本,每个版本都有自己的特点和功能。目前,最新的稳定版本是JDK 17,而最广泛使用的版本是JDK 8。下面是JDK的版本历史:
JDK 1.0
:Java的第一个版本,于1996年1月发布。JDK 1.1
:于1997年2月发布,增加了内部类、JavaBean、RMI等功能。JDK 1.2
:于1998年12月发布,引入了Swing、Java 2D和JavaBeans组件体系结构。JDK 1.3
:于2000年5月发布,增加了Java Sound、Java Naming and Directory Interface (JNDI) 和Java Platform Debugger Architecture (JPDA) 等功能。JDK 1.4
:于2002年2月发布,增加了Java Web Start、Java Management Extensions (JMX) 和Java Native Interface (JNI) 扩展功能。JDK 5
:于2004年9月发布,增加了Java语言的自动装箱、泛型、枚举和注解等特性。JDK 6
:于2006年12月发布,增强了JDBC、Java Web Services和Java Compiler API等功能。JDK 7
:于2011年7月发布,引入了新的语言特性、NIO 2.0和Fork/Join Framework等功能。JDK 8
:于2014年3月发布,增加了Lambda表达式、Stream API和Date Time API等新特性。JDK 9
:于2017年9月发布,增加了模块化、REPL和HTTP/2支持等新特性。JDK 10
:于2018年3月发布,增加了局部变量类型推断、应用类数据共享和垃圾回收器接口等新功能。JDK 11
:于2018年9月发布,增加了HTTP Client API、ZGC垃圾回收器和Epsilon垃圾收集器等新特性。JDK 12-16
:于2019年3月至2021年3月期间发布,引入了新的语言特性、JVM特性和垃圾收集器等功能。JDK 17
:于2021年9月发布,增加了Sealed类、Pattern Matching for switch、Vector API和Foreign Function and Memory API等新特性。
从JDK1.4到JDK5,命名格式为何如此大变化?
JDK命名从1.4变成5的主要原因是,JDK5这个版本引入了许多新特性,发生了巨大变化,为了更好地反映Java技术的发展和进步,以更直观的方式展示Java的版本号。
三、JDK主要目录结构解析
在JDK 8中,JDK的主要目录结构如下:
jdk1.8.0/
├── bin/
│ ├── appletviewer
│ ├── extcheck
│ ├── idlj
│ ├── jar
│ ├── jarsigner
│ ├── java
│ ├── javac
│ ├── javadoc
│ ├── javafxpackager
│ ├── javah
│ ├── javap
│ ├── java-rmi.cgi
│ ├── javaws
│ ├── jcmd
│ ├── jconsole
│ ├── jdb
│ ├── jinfo
│ ├── jmap
│ ├── jps
│ ├── jrunscript
│ ├── jsadebugd
│ ├── jstack
│ ├── jstat
│ ├── jstatd
│ ├── keytool
│ ├── native2ascii
│ ├── orbd
│ ├── pack200
│ ├── policytool
│ ├── rmic
│ ├── rmid
│ ├── rmiregistry
│ ├── schemagen
│ ├── serialver
│ ├── servertool
│ ├── tnameserv
│ ├── unpack200
│ └── wsgen
├── include/
│ └── *.h
├── jre/
│ ├── bin/
│ ├── lib/
│ ├── plugin/
│ ├── COPYRIGHT
│ ├── LICENSE
│ ├── README
│ └── THIRDPARTYLICENSEREADME.txt
├── lib/
│ ├── tools.jar
│ ├── dt.jar
│ ├── jconsole.jar
│ ├── missioncontrol
│ ├── visualvm
│ ├── ant-javafx.jar
│ ├── ant-junit.jar
│ ├── ant-launcher.jar
│ ├── ant.jar
│ ├── jfxswt.jar
│ ├── javafx-mx.jar
│ ├── jfr
│ ├── jfr.jar
│ ├── jfxrt.jar
│ └── management-agent.jar
├── src.zip
├── COPYRIGHT
├── LICENSE
└── README.html
下面是这些目录的作用:
-
bin/
:该目录包含了Java开发和执行所必需的核心工具和实用程序。其中包括javac
用于编译Java源代码、java
用于运行Java应用程序、jar
用于创建和操作Java归档文件等工具。还有其他的工具用于故障排除和调试,例如jconsole
、jvisualvm
、jstack
等等。 -
include/
:该目录包含了用于使用Java Native Interface (JNI) 开发本地扩展所需的C头文件。JNI是一种编程框架,允许Java应用程序调用用C或C++编写的本地代码。 -
jre/
:该目录包含了Java Runtime Environment (JRE),用于运行Java应用程序。JRE包括Java虚拟机 (JVM)、类库和其他运行Java应用程序所需的文件。jre/bin/
目录包含了用于启动JRE的可执行文件,例如java
、javaw
和javaws
。 -
lib/
:该目录包含了Java库和工具,例如tools.jar
、jfxswt.jar
、jfxrt.jar
等等。这些文件通常用于开发Java应用程序。其中tools.jar
是开发Java应用程序所需的核心库,它包含了Java编译器 (javac
) 和其他开发工具。jfxswt.jar
和jfxrt.jar
是JavaFX 库的一部分,用于开发富客户端应用程序。 -
src.zip
:该文件是JDK的源代码压缩包,包含了Java开发工具和库的源代码。这些源代码可以用于学习JDK的内部实现和调试。 -
COPYRIGHT
:该文件包含了JDK的版权声明。 -
LICENSE
:该文件包含了JDK的许可证。 -
README.html
:该文件包含了JDK的基本信息和使用说明。
这些目录包含了Java开发和执行所必需的工具、库、文件和源代码。其中,bin/
目录是最重要的一个目录,因为它包含了Java的核心工具,可以在终端中使用。
四、JDK的使用
-
要使用JDK进行Java开发,需要将JDK安装到计算机上,并配置Java环境变量(具体怎么安装,网上教程一大把)。安装完JDK后,可以使用命令行工具或集成开发环境(IDE)进行Java开发。
-
在命令行中,可以使用javac编译Java源代码,生成字节码文件,然后使用java命令运行字节码文件。例如:
javac HelloWorld.java
java HelloWorld
- 在IDE中,可以使用IDE提供的代码编辑器、自动完成、调试器等功能,大大提高开发效率和代码质量。常见的Java IDE包括Eclipse、IntelliJ IDEA和NetBeans等。
- 除了Java开发,JDK还提供了丰富的工具和组件,用于性能优化、调试和诊断等。例如,jstat可以监控JVM的性能指标,jmap可以生成堆转储文件,jdb可以进行Java程序的调试等等。
相关文章:
Java开发的基石:JDK
Java开发的基石:JDK 前言一、引入二、JDK的发展历程三、JDK主要目录结构解析四、JDK的使用 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快&…...

使用langchain与你自己的数据对话(三):检索(Retrieval)
之前我已经完成了使用langchain与你自己的数据对话的前两篇博客,还没有阅读这两篇博客的朋友可以先阅读一下: 使用langchain与你自己的数据对话(一):文档加载与切割使用langchain与你自己的数据对话(二):向量存储与嵌入 今天我们…...

DEVICENET转ETHERNET/IP网关devicenet协议
捷米JM-EIP-DNT,你听说过吗?这是一款自主研发的ETHERNET/IP从站功能的通讯网关,它能够连接DEVICENET总线和ETHERNET/IP网络,从而解决生产管理系统中协议不同造成的数据交换互通问题。 这款产品在工业自动化领域可谓是一大利器&…...

GPT一键化身「AI助理」——自定义指令功能
最近GPT又更新了一个超实用的功能——自定义指令,启用后,你可以给GPT设置一些固定指令,让它记住或扮演某个角色,比如客服、律师、投资管理师、老师、营养师...... 这样,我们就不再需要每次都要打开新的聊天,…...
深入理解Promise
原文合集地址如下,有需要的朋友可以关注 本文地址 合集地址 什么是Promise 当谈论 Promise 时,可以将其比喻为一种承诺或契约,用于处理异步操作的结果。异步操作是指那些不会立即完成的操作,比如从服务器获取数据、读取文件、发送网络请求等等。通常情况下,这些操作需…...

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析
2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题一Python代码分析 【2023 年…...

redis-cluster 创建及监控
集群命令 cluster info:打印集群的信息。 cluster nodes:列出集群当前已知的所有节点(node)的相关信息。 cluster meet <ip> <port>:将ip和port所指定的节点添加到集群当中。 cluster addslots <slot…...

vue+ivew model框 select校验遇到的问题
iview model 点击关闭,校验没有通过也会关闭 解决办法: 第一步:自定义页脚内容 <div slot"footer"><Button type"primary" click"confirmCarryOver()">确认</Button><Button click&qu…...

mybatis_分页
目的: 减少数据处理量,提高效率 普通sql: 语法:select * from user limit startIndex,pageSize; SELECT * from user limit 3; #[0,n] mybatis_sql: 接口: //分页查询List<User> getUserByLimit(Map<…...

轻量级Firefox Send替代方案Gokapi
想不到一个域名的变动会影响这么大,访问量出现断崖式下跌。由此可见,平时的访问应该只是一些 RSS 的访问而已。 上面是 Pageviews,下面是 Uniques 今天略有回升 难怪那些大公司要花钱买域名了,不过老苏是个佛系的人,一…...
多次发请求优化为发一次请求
优化 getUserInfo 请求 要求 getUserInfo 是个通用接口,在各个模块里面都有可能使用 requestUserInfo 模拟的是请求服务端真正获取用户信息的方法 业务背景 在一个页面有 A, B, C 等多个功能模块,A, B, C 模块渲染执行顺序不可控每个模块都会调用 get…...

彻底搞懂CPU的特权等级
x86 处理器中,提供了4个特权级别:0,1,2,3。数字越小,特权级别越高! 一般来说,操作系统是的重要性、可靠性是最高的,需要运行在 0 特权级; 应用程序工作在最上层,来源广泛、可靠性最低,工作在 3 特权级别。 中间的1 和 2 两个特权级别,一般很少使用。 理论上来讲,…...

JVM对象在堆内存中是否如何分配?
1:指针碰撞:内存规整的情况下 2:空闲列表: 内存不规整的情况下 选择那种分配方式 是有 java堆是否规整而决定的。而java堆是否规整是否对应的垃圾回收器是否带有空间压缩整理的能力决定的。 因此当使用Serial,ParNew等带有压缩整理过程的收…...

【小白慎入】还在手动撸浏览器?教你一招分分钟自动化操作浏览器(Python进阶)
大家好啊,辣条哥又来猛货了! 小白慎入! 目录 环境安装1 测试样例2 基本配置2.0 基本参数2.1 设置窗口2.2 添加头部2.3 网页截图2.4 伪装浏览器 绕过检测2.5案例演示 触发JS2.6 boss直聘cookie反爬绕过实践2. 7滚动到页面底部 3 进阶使用4 数…...
Unity UGUI的TouchInputModule (触摸输入模块)组件的介绍及使用
Unity UGUI的TouchInputModule (触摸输入模块)组件的介绍及使用 1. 什么是TouchInputModule组件? TouchInputModule是Unity中的一个UGUI组件,用于处理触摸输入事件。它可以让你的游戏在移动设备上实现触摸操作,如点击、滑动、缩放等。 2. …...

SpringMVC启动时非常缓慢,显示一直在部署中,网页也无法访问,,,Artifact is being deployed, please wait...
写了一个基本的SpringMVC程序进行测试,结果启动时一直显示在等待部署完毕,,, but这个地方一直显示转圈圈。。 后来通过url访问时网页一直转圈圈。。也就是等待响应。。 看了一会儿,也不知道哪儿错了,&…...

Docker 镜像操作
Docker镜像操作 我们已经介绍了容器操作,今天来了解下 Docker镜像 以及 镜像操作 。让我们一起开启镜像之旅吧。 Docker镜像 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库…...
linux下有关mysql安装和登录的一些问题记录
1. 输入mysql -u root -p出现报错 ERROR 2002 (HY000): Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2) 前提:MySQL可执行文件位于/usr/local/mysql/bin目录中,如果MySQL安装路径不同,需要相应修改命令…...

DS18B20的原理及实例代码(51单片机、STM32单片机)
一、DS18B20介绍 DS18B20数字温度传感器是DALLAS公司生产的单总线器件,用它来组成一个测温系统具有线路简单,体积小,在一根通信线上可以挂很多这样的数字温度传感器,十分方便。 温度传感器种类众多,应用在高精度、高可…...
两种单例模式
1.单例模式分为两种,饿汉模式和懒汉模式.以下是饿汉模式: public class SingleTonHungry {private static SingleTonHungry singleTonHungry new SingleTonHungry();private SingleTonHungry() {}public static SingleTonHungry getInstance() {return singleTonHungry;} }2.…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...