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.…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
