前言

每年技术媒体都会评选最受欢迎的编程语言,Java总是高居前位。自然,没有办法说一个语言绝对比另一种语言好,这个话题一如既往地会引起大家无谓的争论不休。对别的行业的人来讲也许会觉得莫名其妙,但是对我们程序员来讲,捍卫某种语言是一件很动感情的事情。就跟捍卫自己的母校一样,只能自己说不好,别人不能说不好的。

Java从正式出生以来(1995.05.23),已经过了24年时间了,它现在仍在全世界广泛被使用,拥有大量程序员和工作机会,这一个事实毫无疑义地证明了Java的成功。

但是,大家切记的是,讨论Java,不能当它只是一门编程语言,它还是一个平台,同时是一个生态。我二十多年前在Sun公司技术研发中心的时候,一个工作任务之一就是告诉大家Java不仅仅是一门语言。我们的技术总监曾经说,如果一定要认为Java是一门语言,可以说“Java是服务端的语言”。我把这个历史说出来,就是让大家在学习语言的时候记住Java有其更加广泛的空间。

不过,本系列讲座又确实主要从语言本身的层面介绍Java。针对的对象是初步了解Java语言的程序员,如本专业的大学毕业生或者是从事编程工作一年时间的程序员们。希望对Java语言有一个进阶的理解。

我本人曾经身在Sun Java团队之中,虽然没有为Java发展做出什么贡献,没有开辟新大陆,就像是一个跟随哥伦布船队的小船员,也是见证了一段历史,而对新大陆热爱的心却一直在澎拜。希望这个系列讲座为Java布道,对后来的年轻人能有所帮助。

就跟世界上任何自然语言一样,人为发明约定的编程语言也是不断与时皆进的。从一个婴儿慢慢长大成人。

我们来看看Java的成长历史。

Java前传

1990年,Sun公司启动“Green计划”,旨在开发智能家电的嵌入式控制系统。

1991年,Green项目组发现家用设备太多样化,C++移植过于繁琐,无法统一编程,Gosling决定开发一种新的可移植语言,开头想叫C-,后来命名为“Oak”。名字来自于办公室窗口的一棵树。

1994年,Gosling将Oak更名为Java,名字来自于工作间隙Gosling去饮水机冲咖啡时候的一闪念。接着团队完成JVM实现,完成第一个Java编译器,完成Java实现的浏览器WebRunner(后来的HotJava)。这个团队总共三个人。

这就是创世时刻的样子。

Java发布史

1995年5月23日,Sun公司正式发布Java语言,这一天是JAVA的生日。

1996年JDK1.0发布,这是重要里程碑,标志着它成为一种独立的开发工具。在1996年5月底,Sun公司于美国旧金山举行了首届JavaOne大会,这成为历史上传统的经典盛会。

1998年12月,第二代Java平台的企业版J2EE发布。

1999年6月,Java2被分成三个版本:J2SE(标准版)、J2EE(企业版)、J2ME(微型版),有一个重要的里程碑,标志着Java的应用开始普及。

2001年9月24日,J2EE1.3发布

2002年2月,J2SE1.4发布,各种开源框架大量出现。

2004年9月30日18:00PM,J2SE1.5发布,成为java语言发展史上的又一里程碑。

2005年6月,Java SE 6.0发布,三个版本分别改为:JavaSE, JavaEE,, JavaME。

2009年4月20日,Oracle以74亿美元收购Sun公司,并取得了Java的版权

2011年7月,JavaSE7发布。

2014年3月,JavaSE8发布。

Java特性演化史

1996年,JDK 1.0主要包括的特性:Applet、AWT等。在网页上动态变换的小动画震惊了整个Internet技术圈。

1997年,JDK 1.1,引入了一些后来常用的技术点,如:JAR文件格式、JDBC、JavaBeans、RMI,Inner Class和Reflection。

1998年12月4日,史诗巨献的JDK 1.2发布,包含的主要技术,如EJB、Java Plug-in、Java IDL、Swing等以及后来常用的Collections集合类

2000年中,JDK 1.3发布,主要改进和引入了一些类库上,如数学运算和新的Timer API,JNDI服务,CORBA IIOP,Java 2D

2002年,JDK 1.4发布,标志着Java的成熟,引入了一些新技术特性,如正则表达式、NIO、日志类、XML解析器等。

2004年,JDK 1.5发布,改进包括了自动装箱、泛型、动态注解、枚举、可变长参数、foreach循环,还提供了java.util.concurrent并发包等。

2006年12月11日,JDK 1.6发布,并改用Java SE 6、Java EE 6、Java ME 6的命名方式。重大的改进包括动态语言支持、提供编译API等。虚拟机层面,包括锁与同步、垃圾收集、类加载等方面的算法都有很多改动。

后来,由于经济危机和收购案,Java发展遇到诸多挫折,Java7难产。

2011年Oracle发布的Java7采用了B计划,没有按照原先的设计推出。重要的改进包含:动态类型语言在 JVM 上的执行效率得到大幅提升,G1 垃圾回收器性能, 主要用于 Server 端,核心类库改进: ClassLoader, URLClassLoader, Concurrent, i18n

2014年,发布Java8,主要的改进是终于引入了Lambda表达式

2018年,发布Java11,主要是增强如下功能:本地变量类型推断,集合加强,Optional 加强,HTTP Client API。化繁为简,一个命令编译运行源代码。这是最近的一个LTS,将支持到2026年。

历史评价

Java是一个划时代的跨平台产品,这个最基础最根本的设计初衷已经完全达到;

Java衍生出来的框架及其生态是世界上最成功的技术平台之一,这一点超出了设计初衷;

Java最功败垂成的设计是EJB,这是Java企业版本中最重大最着力的技术革新,由于设计和实现的复杂,推广困难,被悉尼大学的Rod Johnson这个音乐学博士单枪匹马挑下马,最后完败于轻量级框架。

Java是Sun公司及James Gosling对人类的伟大贡献,而没有获取到什么利益。


本系列讲座,我打算讲到下面的一些主题:

  • - Generic Programming
  • - Reflection
  • - Proxy
  • - ClassLoader
  • - Inner Class
  • - Event
  • - Lambda
  • - RE
  • - Multi-Thread
  • - Collections
  • - IO
  • - Annotation
  • - Script

编程,不仅仅是学,还是做,说到底是一个手工艺活儿。

曾经有好些入门的年轻人问我如何编得一手好程序?我的回答总是“无他无他,惟手熟尔。”要想提高编程水平,唯一的方法就是动手去编。只要结合“眼”“脑””手”三者,不断学,不断想,不断做,就能大有成效。坚持两三年,迈上一个崭新的台阶,到了那时,定会体会到“虽人不我知,而胸中自有沟壑”的美妙境界。

荀子云:学不可以已。

java生日正则表达式_Java语言十五讲相关推荐

  1. java生日正则表达式_Java编程基础15——正则表达式常用工具类

    1_正则表达式的概述和简单使用 A:正则表达式 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. 作用:比如注册邮箱,邮箱有用户名和密码,一般会 ...

  2. java生日正则表达式_Java正则表达式详解

    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单.如果你不熟悉这个术语,那么"正则表达式"(Regular Expres ...

  3. java生日正则表达式_java之正则表达式、日期操作

    正则表达式和日期操作 正则表达式简介 正则表达式就是使用一系列预定义的特殊字符来描述一个字符串的格式规则,然后使用该格式规则匹配某个字符串是否符合格式要求. 作用:比如注册邮箱,邮箱有用户名和密码,一 ...

  4. Java语言十五讲(前言)

    特此声明:本文为本人公司郭总原创书籍的前言,该书已出版,传送门 ->>>>Java编程十五讲 本人微信公众号内已更新完成.喜欢学习的小伙伴可以搜索微信公众号:程序员Hotel ...

  5. Java语言十五讲——前言

    前言 每年技术媒体都会评选最受欢迎的编程语言,Java总是高居前位.自然,没有办法说一个语言绝对比另一种语言好,这个话题一如既往地会引起大家无谓的争论不休.对别的行业的人来讲也许会觉得莫名其妙,但是对 ...

  6. java ip正则表达式_java如何用正则表达式判断IP格式

    java如何用正则表达式判断IP格式 发布时间:2020-06-25 18:24:25 来源:亿速云 阅读:174 作者:Leah 本篇文章给大家分享的是有关java如何用正则表达式判断IP格式,小编 ...

  7. java 自定义正则表达式_java中正则表达式实例详解

    Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * ...

  8. java未来发展潜力_Java语言未来是否还有发展前景

    首先,从当前Java语言的技术布局情况和行业应用情况来看,未来在较长一段时间内,Java语言都将是IT互联网行业内非常重要的编程语言之一,而且由于Java语言在大数据.云计算和物联网等领域也都有比较广 ...

  9. Java语言十五讲(第十二讲 Multi-Thread多线程12.2)

    实例变量如balance在线程间是共享的.有的时候,我们真的需要线程级别的变量,不希望共享,也是有办法的.Java里面有ThreadLocal变量. 比如,我们的线程从inventory里面拿东西,上 ...

最新文章

  1. 【重磅】斯坦福李飞飞《注意力与Transformer》总结,84页ppt开放下载!
  2. 基于单幅图像一致性学习的弱光视频增强(CVPR2021)
  3. Extjs4 常用布局总结
  4. C++知识点19——使用C++标准库(再谈string——string的初始化、赋值、添加、删除、访问)
  5. SPL--Serializable
  6. 开发顺序工作流时注意的几个事项
  7. Regex Tester (免费有用)
  8. [云炬python3玩转机器学习笔记] 3-3Numpy数据基础
  9. bash-shell中使用的特殊字符总结
  10. swagger使用指南
  11. c++tcp接收文件缓存多大合适_要是有人问我 TCP, 我能怎么扯
  12. jupyter notebook中创建环境、安装使用pytorch
  13. CCF NOI1041 志愿者选拔
  14. 創業團隊基建工具選擇
  15. slf4j+logback使用
  16. 如何解决系统存储卡找不到,难一格式化的问题
  17. 设计Instagram
  18. 因涉政内容导致域名被封禁
  19. 解读场景化视频制作工具的实现过程
  20. 信息系统项目管理师-项目沟通管理

热门文章

  1. 重新配置Domino服务器
  2. 5种获取RSS全文输出的方法
  3. 网上无意中看到的一句话。。。
  4. WhoIsOnline ;) - 解读CNForum源码中在线用户统计
  5. C++-实现matlab的meshgird(OpenCV)
  6. redis mysql 事务_Mysql与Redis事务
  7. 计算机应用设计的目的意义,高等教育自学考试计算机及应用专业+本科毕业设计(论文)的目的与要求...
  8. 分析mysql慢查询_mysql慢查询的分析方法_MySQL
  9. Python中可变长度的参数args和**kwargs
  10. 为什么说劝人报名IT培训班的人,不是坏就是蠢?