Java的起源与发展

  • 前言
  • 一、发展早期
  • 二、版本历史
  • 三、版本迭代
  • 总结

前言

1990年代初,任职于Sun微系统的詹姆斯·高斯林等人开发了Java语言的雏形Oak,当时的目标是开发一款应用在家用电器等小型系统上的编程语言。由于这些智能化家电的市场需求没有预期的高,Sun公司便放弃了这项计划。随着1990年代互联网的发展,Sun公司看见Oak在互联网上应用的前景,于是决定改造Oak,之后在1995年5月以Java为名称正式发布这款编程语言。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。


一、发展早期

这款语言最初只是Sun公司在1990年12月开始研究的一个内部项目。Sun公司的一个叫做帕特里克·诺顿的工程师被公司自己开发的C++和C语言编译器搞得焦头烂额,因为其中的API极其难用。帕特里克决定改用NeXT,同时他也得到了进入公司的“Stealth计划”项目的机会。

“Stealth计划”后来改名为“Green计划”,詹姆斯·高斯林和麦克·舍林丹(Mike Sheridan)也加入了帕特里克的工作小组。他们和其他几个工程师一起在加利福尼亚州门罗帕克市沙丘路的一个小工作室里面研究开发新技术,瞄准下一代智能家电的程序设计,Sun公司预料未来科技将在家用电器领域大显身手。团队最初考虑使用C++语言,但是很多成员包括Sun公司的首席科学家比尔·乔伊,发现C++和可用的API在某些方面存在很大问题。

工作小组使用的是嵌入式系统,可以用的资源极其有限。很多成员发现C++太复杂以至很多开发者经常错误使用。他们发现C++缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。

根据可用的资金,乔伊决定开发一种集C语言和Mesa语言于一成的新语言,在一份报告上,乔伊把它叫做“未来”,他提议Sun公司的工程师应该在C++的基础上,开发一种面向对象的环境。最初,高斯林试图修改和扩展C++的功能,他自己称这种新语言为C++ ++ --[来源请求],但是后来他放弃了。他将要创造出一种全新的语言,被他命名为“Oak”(橡树),以他的办公室外的橡树命名。

就像很多开发新技术的秘密工程一样,工作小组没日没夜地工作到了1993年的夏天,他们能够演示新平台的一部分了,包括Green操作系统,Oak的程序设计语言,类库及其硬件。最初的尝试是面向一种类PDA设备,被命名为Star7,这种设备有鲜艳的图形界面和被称为“Duke”的智能代理来帮助用户。1992年12月3日,这台设备进行了展示。

同年11月,Green计划被转化成了“FirstPerson有限公司”,它是一个Sun公司的全资子公司,团队也被重新安排到了帕洛阿尔托。FirstPerson团队对建造一种高度交互的设备感兴趣,当时代华纳发布了一个关于电视机顶盒的征求提议书时,FirstPerson改变了他们的目标,作为对征求意见书的响应,提出了一个机顶盒平台的提议。但是有线电视业界觉得FirstPerson的平台给予用户过多的控制权,因此FirstPerson的投标败给了SGI。与3DO公司的另外一笔关于机顶盒的交易也没有成功,由于他们的平台不能在电视工业产生任何效益,公司被并回Sun公司。

后来由于商标搜索显示Oak已被一家显卡制造商注册。于是Oak被改名为Java。

二、版本历史

版本 发布日期 最终免费公开更新时间 最后延伸支持日期
JDK Beta 1995 ? ?
JDK 1.0 1996 年 1 月 ? ?
JDK 1.1 1997 年 2 月 ? ?
J2SE 1.2 1998 年 12 月 ? ?
J2SE 1.3 2000 年 5 月 ? ?
J2SE 1.4 2002 年 2 月 2008 年 10 月 2013 年 2 月
J2SE 5.0 2004 年 9 月 2009 年 11 月 2015 年 4 月
Java SE 6 2006 年 12 月 2013 年 4 月 2018 年 12 月
Java SE 7 2011 年 7 月 2015 年 4 月 2022 年 7 月
Java SE 8 (LTS) 2014 年 3 月 Oracle 于 2019 年 1 月停止更新(商用) Oracle 于 2030 年 12 月停止更新(非商用) AdoptOpenJDK 于 2026 年 5 月或之后停止更新 Amazon Corretto 于 2026 年 5 月或之后停止更新 2030 年 12 月
Java SE 9 2017 年 9 月 OpenJDK 于 2018 年 3 月停止更新 不适用
Java SE 10 2018 年 3 月 OpenJDK 于 2018 年 9 月停止更新 不适用
Java SE 11 (LTS) 2018 年 9 月 AdoptOpenJDK 于 2024 年 10 月或之后停止更新 Amazon Corretto 于 2027 年 9 月或之后停止更新 2026 年 9 月
Java SE 12 2019 年 3 月 OpenJDK 于 2019 年 9 月停止更新 不适用
Java SE 13 2019 年 9 月 OpenJDK 于 2020 年 3 月停止更新 不适用
Java SE 14 2020 年 3 月 OpenJDK 于 2020 年 9 月停止更新 不适用
Java SE 15 2020 年 9 月 OpenJDK 于 2021 年 3 月停止更新 不适用
Java SE 16 2021 年 3 月 OpenJDK 于 2021 年 9 月停止更新 不适用
Java SE 17 (LTS) 2021 年 9 月 待定 待定

三、版本迭代

JDK Alpha 和 Beta:第一个1995年发布的alpha和beta Java公开版本,API和ABI非常不稳定。 支持Java Web浏览器被取名为WebRunner。
JDK 1.0:第一个版本于1996年1月23日发布,叫做为Oak。而真正第一个稳定的版本JDK 1.0.2,被称作Java 1。
JDK 1.11997年2月19日发布。新增了如下内容:

  • AWT事件模型大规模重新编制
  • 加入了内部类别
  • JavaBeans
  • JDBC
  • RMI
  • 能够支持自理的反射能力,在运行时不可能有修改。
  • 针对 Microsoft Windows 平台上运作的版本,附带由Symantec为JavaSoft生产的JIT编译器
  • 支持国际化和Unicode,该功能源自Taligent

J2SE 1.21998年12月8日发布,代号为Playground(竞技场)。 该版本到J2SE 5.0为止的后续版本被更名为Java 2,而版本名称“J2SE”(Java 2平台,标准版)取代JDK以区别J2EE(Java 2平台,企业版) 和J2ME(Java 2 Platform,Micro Edition)基础平台。这是Java的一个非常重要的版本,它将Java平台的大小增加至原先的三倍,在59个程序包中达到了1520个类。主要增加包括:

  • strictfp 关键字
  • 主类别中集成了Swing图像化API
  • 首次为Sun提供的JVM配备JIT编译器
  • Java plug-in(即 Java Applet)
  • Java IDL,一个与CORBA互通的接口描述语言实现
  • Java集合框架

J2SE 1.32000年5月8日,工程代号为Kestrel(美洲红隼)的JDK 1.3发布,这个版本中最著名的改变包括:

  • 包含了HotSpot JVM(HotSpot JVM第一次被发布是在1999年4月,名为J2SE 1.2 JVM)
  • 为了支持与CORBA的选择兼容性而修改了RMI
  • Java命名和目录接口(Java Naming and Directory Interface,缩写JNDI)包含在主程序库中(先前为扩展组件的形式)
  • Java Platform Debugger Architecture (JPDA)
  • JavaSound
  • 用于实现动态代理的类

J2SE 1.42002年2月13日,JDK 1.4发布,工程代号为Merlin(灰背隼)。JDK 1.4同样发布了很多新的技术特性,如正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器等。Java 1.4开放支源和安全性更新于2008年10月终止。Oracle客户的付费的安全性更新也在2013年2月结束。
J2SE 5.0:代号为Tiger(老虎)。这个在2004年9月30日发布的版本原本以1.5编号,也就是仍然使用内部版本编号。这个数字被改变是为了“更好地反映成熟度、稳定性、可扩展性和 J2SE 的安全水准”。这个版本是在JSR 176底下被开发。Tiger增加了若干个重要的新语言功能:

  • 泛型(Generics): 为集合提供编译期间 (静态) 类型安全,且不须为大多数类型转换 (类型转换) (规范在 JSR 14)
  • 元数据(Metadata): 也称作注解。让语言结构(像是类别和方法)能够用额外的资料标记,可以由元数据意识工具处理(规范在 JSR 175)
  • 自动封装与解封装: 在基本的资料类型(如 int)和基本的的外覆类别 (如 Integer) 之间能够自动转换 (规范在 JSR 201)
  • 枚举(Enumerations): 以 enum 关键字创造出一种类型安全,有排序值的清单(如Day.MONDAY、 Day.TUESDAY 等);以前这只能透过非类型安全的恒定整数或自行撰写的类别来达成 (类型安全的枚举模式) (规范在JSR 201)
  • 可变参数函数(Varargs):方法的最后一个参数现在可以用一个类型名称加上三个点宣告(如:void drawtext(String… lines));在调用代码中,类型中参数里任何的数字可以被使用,而它们再放在一个数组来传递给方法,或是其它的调用代码可以传递那个类型的数组
  • 强化 for each 循环:for 循环的语法被用特别的语法扩展了,适用于数组或 Iterable,用于迭代每个成员,如基本的 Collection 类别 (规范在 JSR 201(页面存档备份,存于互联网档案馆))
    改进多线程 Java 程序的运行语义;新的 Java 存储器模型改善了复杂性、 有效性和以前的规格性能
  • 静态导入

Java SE 6:代号为Mustang(野马)。版本发布于2006年12月11日,Sun把原本的名称“J2SE”改为“Java SE”,然后再从版本号中去掉“.0”,而开发者内部编号仍然是1.6.0。这个版本是根据JSR 270(页面存档备份,存于互联网档案馆)开发的。本版本包含的主要更改:

  • 支持旧的Win9x版本下降;非正式地,Java 6 Update 7是Java的最后一个显示为在这些版本的Windows上工作的版本。 这被认为是因为在Update 10版本中的主要更改。
  • 脚本语言支持(Scripting Language Support)(JSR 223):用于与脚本语言紧密集成的通用API,以及内置的Mozilla JavaScript Rhino集成。
  • 核心平台和Swing性能显著的改进。
  • 透过JAX-WS改善的网络服务支持(JSR 224).
  • 支持JDBC 4.0 (JSR 221).
  • Java编译器API (JSR 199):允许Java程序以写程序的方式选择和调用Java编译器的API。
  • 将JAXB升级到版本2.0:包括StAX解析器的集成。
  • 支持pluggable annotations (JSR 269).
  • 改善许多GUI,像是SwingWorker在API中的集成,表格排序和筛选,以及真正的Swing双缓冲(消除模糊区域效果)。
  • 包含JVM改善:同步和编译器性能优化,新算法和对现有垃圾收集算法的升级以及应用程序引导性能。

Java SE 7:代号为Dolphin(海豚),是一个重大的更新,在 2011年7月7日亮相,并在2011年7月28日开放给开发者使用。发展时期被分类成十三个重要阶段,最后一个阶段在2011年6月6日完成。在 Java 7 中新增的功能包括:

  • JVM本身对动态语言的支持:新的invokedynamic字节码指令(JSR-292(页面存档备份,存于互联网档案馆)),与多语言虚拟机(Multi Language Virtual Machine)原型
  • 64位指针压缩(Java 6 中可以使用 XX:+UseCompressedOops 开启)
  • 一些语言方面的小改变(在Coin项目下的一个小群体)
  • JSR 166下的并发实用工具
  • 新的文件 I/O 程序库 (JSR 203 定义) 增加多重文件的支持、文件原始资料和符号链接。新的包为:java.nio.file、java.nio.file.attribute和java.nio.file.spi
  • 使用 Timsort 来为集合与数组排序,取代归并排序
  • 对椭圆曲线加密算法增加标准库级别的支持
  • 一个给Java 2D的XRender传递途径,改进了现代GPUs特有的功能的处理
  • 用于图形功能的新平台API(最初在版本6u10中的实现为不支持的API)
  • 增强了对新网络通信协议(包括SCTP和Sockets Direct Protocol)的标准库级别的支持
  • 更新对XML和Unicode的支持,以符合最新标准
  • Java部署规则集

Java SE 8:Java 8 于2014年3月18日发布,包含了一些原本被项目在 Java 7却延迟的功能。这些功能改进在 JDK Enhancement Proposals (JEPs) 的指导下得到了集成:

  • JSR 335,JEP 126:Lambda项目中提供的语言级匿名函数支持(官方称为 lambda 表达式,非官方亦称闭包);添加默认方法(虚拟扩展组件方法),以允许在不破坏兼容性的情况下向现有接口中新增方法。Java社区中曾经有过针对是否要加入 lambda 表达式支持的辩论。稍后Sun公司宣布 lambda 表达式将会包含在Java中,并请社区协助改善该特性。支持lambda表达式使得针对流中元素的函数式操作成为可能,由此可以实现由 MapReduce 启发的函数式集合操作。默认方法允许API作者添加新的方法到现有接口上,而不会破坏旧的代码中。默认方法还使得多重继承的行为 (不是状态)成为可能,但默认方法的设计意图并非在此。
  • JSR 223,JEP 174:Nashorn项目,一个 JavaScript 运行时,它允许开发人员在应用程序中嵌入 JavaScript 代码
  • JSR 308,JEP 104:在 Java 类型上的注解
  • 无符号整数算术
  • JSR 337,JEP 120:重复注解
  • JSR 310,JEP 150:日期和时间 API,基于Joda-Time日期时间处理库的实现。
  • JEP 178:静态链接 JNI 程序库
  • JEP 153:执行 JavaFX 应用程序(直接执行 JavaFX 的应用程序的 JAR 包)
  • JEP 122:移除了虚拟机内存管理中的永久世代
    Java 8 不再支持 Windows XP,但JDK 8 第 25 版更新仍然可以在 Windows XP安装和运行。先前JDK 8的更新版本可以在XP中运行,但必须通过强制解压安装程序来进行安装。

Java SE 9:在2011年的JavaOne中,Oracle讨论了一些他们希望在2016年于Java 9中发布的功能。Java 9 应当对千兆级堆拥有更好的支持,同时能够更好地集成本机代码,且拥有新的垃圾收集器G1和能够自我调节的JVM。2016年初,Java 9 的发布被重新定为2017年3月;2017年3月时,发布日期又被拖延至2017年7月;后来又因Java执行委员会对Jigsaw项目实现的分歧而最终定为2017年9月21日,在此期间Oracle回应了部分疑问,并对一些重要的技术问题进行了修正。在2017年6月的最后几天,JCP对拟议的模块系统方案达成了共识。

  • JSR 376:在Jigsaw项目中将JDK模块化
  • JEP 222:jshell:Java Shell(一个 Java 交互式顶层构件)
  • JEP 295:AOT编译(通过 Graal VM 实现)
  • JEP 268:XML Catalogs
  • JEP 266:更多的并发更新。[243]包含响应式流的Java实现,及其部分替代品java.util.concurrent.Flow。
  • JEP 193:变量句柄:定义一个标准方法来调用java.util.concurrent.atomic和sun.misc.Unsafe操作的等价物。
  • JEP 282:jlink:Java链接器。该工具可以为模块生成一个包含了其所有依赖项的自定义运行时映像,同时允许生成一个包括运行它的JVM的可执行文件。
  • JavaDB被移出JDK
  • JEP 263:高DPI图像:自动缩放与尺寸自适应。

Java SE 10:OpenJDK 10于2018年3月20日发布。此次更新包含以下12个新特性:

  • JEP 286:局部变量类型推断
  • JEP 317:实验性的基于Java的JIT编译器。这是 Linux x64 下 Graal 动态编译器的集成。
  • JEP 310:应用程序类级别数据共享
  • JEP 322:基于时间的版本命名
  • JEP 307:适用于G1的多线程完全垃圾回收
  • JEP 304:垃圾回收器接口
  • JEP 314:更多的Unicode语言标签扩展
  • JEP 319:内置根证书
  • JEP 312:线程本地握手
  • JEP 316:在可选的内存设备上申请堆内存空间
  • JEP 313:删除本地代码头文件生成器javah
  • JEP 296:将所有JDK分支集成到同一个版本库中

Java SE 11:JDK 11于2018年9月25日发布。Java 11 包含如下更新:

  • JEP 181:针对嵌套成员的访问控制
  • JEP 309:动态类文件常量
  • JEP 315:利用 Aarch64 的特有架构改进其上的性能
  • JEP 318:Epsilon:无操作垃圾收集器
  • JEP 320:移除 Java EE 和 CORBA 模块
  • JEP 321:HTTP Client
  • JEP 323:lambda参数的局部变量语法
  • JEP 324:支持 Curve25519 和 Curve 448 密钥
  • JEP 327:Unicode 10
  • JEP 328:添加Java飞行记录器(JFR),其用于创建性能分析记录
  • JEP 329:ChaCha20 和 Poly1305 加密算法
  • JEP 330:运行单文件源码程序
  • JEP 331:低开销堆分析
  • JEP 332:支持 TLS 1.3
  • JEP 333:添加ZGC(一个可扩展的低延迟垃圾收集器)
  • JEP 335:弃用 Nashorn JavaScript 引擎
  • JEP 336:弃用 Pack200 相关的工具及 API

Java SE 12:JDK 12于2019年3月19日发布。该版本包含较多新特性,例如:

  • JEP 189:Shenandoah:一个实验性的低延迟垃圾收集器
  • JEP 230:细粒度性能评审包
  • JEP 325:Switch 表达式(预览阶段)
  • JEP 334:JVM Constants API
  • JEP 340:仅保留一个 AArch64 平台的移植
  • JEP 341:默认类数据共享归档
  • JEP 344:针对G1,提供可中止的混合垃圾收集
  • JEP 346:针对G1,及时释放已申请但未使用的内存

Java SE 13:JDK 13于2019年9月17日发布。该版本包含以下新特性以及很多的强化和很多的漏洞修补。

  • JEP-350: 动态 CDS 归档
  • JEP-351: ZGC: 取消提交未使用存储器
  • JEP-353: 重新实现旧版 Socket API
  • JEP-354: Switch 表达式(预览阶段)
  • JEP-355: 文本框(预览阶段)

Java SE 14:JDK 14发布于2020年3月17日。Java 14 包含了下方列出的新功能,以及“数百个小改进和数千个漏洞修复”。

  • JEP-305:使用 instanceof 的模式匹配(预览)
  • JEP-343:打包工具(孵化中)
  • JEP-345:在 G1 中,对不均匀的内存访问(NUMA)情况下的内存申请优化
  • JEP-349:JFR Event Streaming
  • JEP-352:使字节缓冲区能够映射到非易失性存储器上
  • JEP-358:有帮助的 NullPointerExceptions
  • JEP-359:记录类(预览)
  • JEP-361:Switch 表达式(标准)
  • JEP-362:弃用 Solaris 和 SPARC 平台上的移植版本
  • JEP-363:移除 Concurrent Mark Sweep (CMS) 垃圾收集器
  • JEP-364:适用于 macOS 的 ZGC
  • JEP-365:适用于 Windows 的 ZGC
  • JEP-366:弃用 ParallelScavenge + SerialOld 的垃圾收集器组合
  • JEP-367:移除 Pack200 相关的工具及 API
  • JEP-368:文本块(第二预览版本)
  • JEP-370:外部内存访问 API(孵化中)

Java SE 15:JDK 15发布于2020年9月15号,包含了下列新特性:

  • JEP-339:Edwards-Curve 数据签名算法(EdDSA)
  • JEP-360:封闭类(预览特性)
  • JEP-371:隐藏类
  • JEP-372:移除了 Nashorn JavaScript 脚本引擎、APIs,以及 jjs 工具
  • JEP-373:重新实现了老的 DatagramSocket API 接口
  • JEP-374:禁用和废除偏向锁
  • JEP-375:模式匹配(第二次预览)
  • JEP-377:ZGC:一个可伸缩、低延迟的垃圾回收器
  • JEP-378:文本块,是一个多行字符串,它可以避免使用大多数转义符号,自动以可预测的方式格式化字符串,并让开发人员在需要时可以控制格式。
  • JEP-379:Shenandoah:一个低停顿时间的垃圾回收器
  • JEP-381:移除了 Solaris 和 SPARC 端口
  • JEP-383:外部内存访问 API(二次孵化)
  • JEP-384:记录类(第二次预览)
  • JEP-385:废除 RMI 激活,以便在将来进行删除

Java SE 16:JDK 16发布于2021年3月17号,包含了下列新特性:

  • JEP-338:Vector API(孵化中)
  • JEP-347:启用了新的C++特性
  • JEP-357:从 Mercurial 迁移到 Git
  • JEP-369:迁移到GitHub
  • JEP-376:ZGC垃圾收集器
  • JEP-380:Unix域套接字通道
  • JEP-386:在x64和AArch64体系结构上,将JDK移植到Alpine Linux以及其它使用musl C库的Linxu发行版上。
  • JEP-387:Elastic Metaspace
  • JEP-388:将 JDK 移植到 Windows / AArch64平台。
  • JEP-389:外部链接器API(孵化中)
  • JEP-390:Warnings for Value-Based Classes
  • JEP-392:打包工具
  • JEP-393:外部内存访问 API (第三次孵化)
  • JEP-394:instanceof的模式匹配
  • JEP-395:记录类
  • JEP-396:默认情况下严格封装JDK
  • JEP-397:密封类,被final修饰的类,密封类不能被继承,防止了恶意的派生。

总结

了解了Java的发展历史,想必你一定会对这个当下非常热门的语言产生了浓厚的兴趣。相信我,Java并不难学,而且学好Java不仅能为我们装备一款强有力的武器,而且还能找到一份薪资不低的工作,何乐而不为呢?接下来,让我们一起走进Java的探索之旅!

上一节:Java夯实基础系列文章目录
下一节:开发环境配置

【编程语言】Java夯实基础(一):Java的起源与发展相关推荐

  1. Java零基础学习Java编程语言基础知…

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.下面就说说Java零基础学习Java编程语言基础知识的几个要点.希望能够对Java编程基础入门学习的新手有帮助 ...

  2. 视频教程-由浅入深Java零基础入门-Java

    由浅入深Java零基础入门 负责过多个软件项目的研发.设计和管理工作,拥有项目管理师认证.项目监理师中级认证.出版过的图书有<微信小程序开发图解案例教程><Axure RP8原型设计 ...

  3. java基础入门传智播客 源码_Java-_2020年版Java零基础视频教程(Java 0基础,Java初学入门)魔鬼讲师老杜出品...

    不会闲聊!!!不会扯淡!!!小UP只会分享与Java相关的学习资源 还记得那年带你Java入门的一声"吼"吗? B站目前播放量已经快到450多万播放量的Java零基础教程的创作者& ...

  4. Java语言基础(Java自我进阶笔记二)

    Java语言基础(Java自我进阶笔记二) 一. 什么是Java 的主类结构? 1. #mermaid-svg-xWTL2A8kDyyRPexH .label{font-family:'trebuch ...

  5. final关键字_夯实基础:Java中final关键字的几种用法

    导语 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构. 关于static请查 ...

  6. java 夯实基础_夯实基础-java equals使用,和 == 的区别

    在研究hashcode的用法,发现自己对equals的理解还不够深,废话少说,继续专研,记录如下: 要想搞清楚equals和==的区别,就先要搞清楚JAVA的数据类型: java的数据类型只要分两大类 ...

  7. java夯实基础-输入输出流

    本文测试java中的字节流.字符流.缓冲流.随机流.文件锁. 一.字符流:Reader和Writer package com.wllfengshu.test;import java.io.File; ...

  8. B站百万播放量Java零基础教程视频(适合Java 0基础,Java初学入门),史上最细Java零基础教学视频

    是否还在为学习Java如何入门而烦恼? 是否还在为Java软件如何安装而烦恼? 是否还在找寻着适合零基础的Java视频教程? 动力节点教学总监老杜159集课堂实录Java零基础视频教程,从初学者角度出 ...

  9. Java SE 基础(4) Java的语言特点

    语言特点 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程 ...

  10. 黑马就业班(01.JavaSE Java语言基础-11.Java基础加强)——基础加强:Junit单元测试、反射、注解

       1.Junit单元测试 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 2. 白盒测试:需要写代码的.关注程序具体的执行流程. Junit使用:白盒测试 步骤: ...

最新文章

  1. 7秒钟的记忆?Facebook提出DL新算法,东南大学90后博士新作
  2. 多波次导弹发射中的规划问题(一) 网络图绘制及数据整理
  3. JavaBean技术
  4. 苹果也像谷歌一样,玩起了自己的X
  5. Node响应中文时解决乱码问题
  6. 【单元测试框架unittest】
  7. 命令行关闭特定服务和调整服务启动方式
  8. 《FLUENT 14流场分析自学手册》——2.2 FLUENT软件介绍
  9. sop8封装尺寸图_IC封装原理及功能特性汇总
  10. 6个强推的思维导图软件
  11. 自定义注解实现Excel导入导出
  12. (25)TracerWarning: Output nr 1. of the traced function does not match the corresponding output of ..
  13. SpringBoot项目实现短信发送接口开发
  14. java牛奶订购系统,Java IO系统
  15. python海龟库如何导入,少儿Python编程培训手册系列之——海龟库基础用法
  16. Java算法训练:沙盘上的字符串
  17. java返回给前端的json数据中带有转义符号如何处理
  18. 测试过程中遇到的那些奇葩bug
  19. 说话不要急,更不能乱,想说什么就说什么,那就是想死
  20. sed实现多行匹配-从字符串a所在行匹配到字符串b所在行结束

热门文章

  1. (收藏)不错的敏捷迭代回顾会步骤
  2. ECSHOP和SHOPEX快递单号查询中通插件V8.6专版
  3. 09 WebGL通过uniform变量修改点的颜色
  4. 我男朋友是产品经理......
  5. 测试绝地求生显卡使用率软件,《绝地求生:大逃杀》全系主流显卡大型评测之显卡需求测试...
  6. sqlserver数据库快照和mysql_解析SQLServer视图、数据库快照_MySQL
  7. oracle公司的crm有哪些主要模块,Oracle CRM 的组成及各模块的功能
  8. OSChina 周六乱弹 ——劳动节仍然在劳动,情人节却没有情人。
  9. 阿里云的oss bucket设置 404 回源规则
  10. unity 安卓端输出日志神器--Reporter插件