一.什么是Java语言

  Java是于1996年由Sun公司发布的一种极富创造力的面向对象的程序设计语言。它不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

二.Java的特点

  Java的设计者编写了颇具影响力的白皮书,用来解释设计的初衷和Java的特性。这一小节将会对这些术语进行解释。

  1. 简单性
      Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,而是引用。并提供了自动的垃圾回收,使得程序员不必为内存管理而担忧。
  2. 面向对象
      Java语言实现了面向对象中类、对象、借口、继承等概念。为了简单起见,Java只支持类之间的单继承,但支持接口间的多继承,并支持类与接口之间的实现机制。总之,Java语言是一个完全面向对象的程序设计语言。
  3. 分布式
      Java有丰富的库用于处理像HTTP和FTP之类的TCP/IP协议。Java应用能够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。
  4. 健壮性
      Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
  5. 安全性
      Java适用于网络/分布式环境。为了达到这个目标,Java在安全方面投入了很大的精力,使得Java可以构建防病毒、防篡改的系统。并且,在遭遇多次高调攻击以后,浏览器开发商和Oracle都越来越谨慎。Java浏览器插件不相信任何远程代码,除非代码有数字签名而且用户同意执行这个代码。
  6. 体系结构中立
      编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,这些编译后的代码可以在很多处理器上运行。Java编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易地在任何机器上解释执行,而且还可以动态地翻译成本地机器代码。
  7. 可移植性
      与C和C++不同,Java规范中没有“以来具体实现”的地方。基本数据类型的大小及有关运算都做了明确的说明。例如,Java中的int永远都是32位的整数,而在C/C++中,int可能是16位整数、32位整数。也可能是编译器提供商指定的其他大小。
  8. 解释型
      Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在链接阶段被载入到运行环境中。
  9. 高性能
      尽管对解释后的字节码性能已经比较满意,但在有些场合下还需要更加高效的性能。字节码可以(在运行时刻)动态地翻译成对应运行这个应用的特定CPU的机器码。
  10. 多线程
      多线程可以带来更好的交互响应和实时行为。如今,我们非常关注并发性,因为摩尔定律行将完结。我们不在追求更快的处理器,而是着眼于获得更多的处理器,而且要让它们一直保持工作。Java在这方面表现很出色,可以很好地胜任这个工作。
  11. 动态性
      从各种角度看,Java与C或C++相比更加具有动态性。库中可以自由地添加新方法和实例变量,而对客户端没有任何影响。在Java中找出运行时类型信息十分简单。

三.Java的发展简史

  Java的历史要追溯到1991年,由Patrick Naughton和James Gosling(人称“高司令”,也称“Java之父”)带领的Sun公司的工程师小组想要设计一种小型的计算机语言,主要应用于消费类电子产品设备。由于这种设备的处理能力和内存都很有限,所以语言必须非常小且能够生成非常紧凑的代码。另外,由于不同的厂商会选择不同的CPU,因此这种语言的关键是不与任何特定的体系结构捆绑在一起。这个项目被命名为“Green”。
  代码短小、紧凑且与平台无关,这些要求促使开发团队设计一个可移植的语言,可以为虚拟机生成中间代码。Gosling把这种语言称为“Oak”。Sun公司的人后来发现Oak是一种已有的计算机语言的名字,于是将其改名为Java。事实证明这是一个很有灵感的选择。
  1992年夏天,Green项目发布了它的第一个产品,称之为“*7”,这是一种类PDA设备。这个产品具有鲜艳的图形界面和被称为“Duke”的智能代理来帮助用户。遗憾的是,Sun公司对生产这个产品并不感兴趣,Green项目组的人员必须找出其他的方法来将它们的技术推向市场。然而,没有一个标准消费品电子公司对此感兴趣。于是,Green项目组竞标了一个提供视频点播等新型服务的有线电视盒的项目,但没有成功。同年11月,Green项目被转换成了“First Person公司”,一个Sun公司的全资子公司。
  First Person公司花费了1993年一整年和1994年的上半年,一直在苦苦寻求其技术的买家。然而,一个也没找到。1994年,First Person公司解散了。
  当这一切在Sun公司发生的时候,万维网也在日渐发展壮大。万维网的关键是把超文本页面转换到屏幕上的浏览器。1994年大多数人都在使用Mosaic,这是一个1993年出自伊利诺伊大学超级计算中心的非商业化的Web浏览器。在经历了一场历时三天的头脑风暴的讨论之后,Gosling团队决定改变努力的目标,这次他们决定将该技术应用于万维网。Gosling意识到万维网需要一个中性的浏览器,它不依赖于任何硬件平台和软件平台。它应是一种实时性较高,可靠安全,有交互功能的浏览器。于是Gosling决定用Java开发一个新的Web浏览器。
  实际的浏览器是由Patrick Naughton和Jonathan Payne开发的,并演变为HotJava浏览器。为了炫耀Java语言超强的能力,HotJava浏览器采用Java编写。设计者让HotJava浏览器具有在网页中执行内嵌代码的能力。1995年5月23日,Sun公司推出Java语言,用Java实现的HotJava浏览器显示了Java的独特魅力,引发了人们延续至今的对Java的狂热追逐。
  1996年初,Sun公司发布了Java1.0。人们很快意识到Java1.0不能用来进行真正的应用开发。坦率地说,Java1.0并没有为其黄金时期的到来做好准备。后来的Java1.1弥补了其中的大多数明显的缺陷,大大改进了反射能力,并为GUI变成增加了新的事件处理模型。不过它仍然具有够很大的局限性。
  1998年12月4日,Java迎来了一个里程碑式的版本Java1.2,Sun在这个版本中把Java技术体系拆分为3个方向,分别是面向桌面应用开发的J2SE(Java 2 Platform,Standard Edition)、面向企业级开发的J2EE(Java 2 Platform,Enterprise Edition)和面向手机等移动终端开发的J2ME(Java 2 Platform,Micro Edition)。后来发布的标准版的1.3和1.4版本对最初的Java2版本做了某些改进,因此它们分别被称为J2SE1.3和J2SE1.4。
  5.0版本是自1.1版本以来对Java语言做出重大改进的版本。这一版本本来被命名为J2SE1.5,但是为了表示这个版本的重要性,J2SE1.5被更名为Java5.0。这个版本添加了泛型类型,其挑战性在于添加这一特性并没有对虚拟机做出任何修改。另外,还有几个受C#启发的很有用的语言特性:“for each”循环、自动装箱和注解。
  版本6(没有后缀.0)于2006年末发布。这个版本没有对语言方面进行改进,但是改进了其他性能,并增强了类库。
  随着数据中心越来越依赖于商业硬件而不是专用服务器,Sun公司终于沦陷,并于2009年被Oracle收购。Java的开发停滞了很长一段时间。知道2011年Oracle发布了Java的一个新版本,Java7,其中只做了一些简单的改进。
  2014年,Java8终于发布,在近20年终这个版本有了最大的改变。Java8提供了一种函数式编程方式,可以很容易地表述并发执行的计算。所有编程语言都必须与时俱进,Java在这方面显示出非凡的能力。
  Java9原计划于2016年9月发布,后来由于Jigsaw模块系统推迟到2017年3月,后来又被推迟到同年7月,最后终于在2017年9月发布。
  Oracle公司为了加快Java的发布频率,从Java9开始,将每半年发布一个新版本。2018年3月,Java10发布。截止到笔者撰写这篇文章时,Java11已于上个月,也就是2018年9月发布。与Java9和Java10不同(两者均只提供半年的技术支持),Java11提供长期支持服务(Long Term Support),直到2023年9月,Oracle都会为Java11提供技术支持,而补丁和安全警告等扩展支持将持续到2026年。新的长期支持版本每三年发布一次,因此,下一个长期支持版本将于2021年发布。
  对于初学者来说,不必纠结于选择哪个版本的Java来学习。因为对这些版本来说,最基础的知识点都是一样的。至于每个版本中增加的那些新特性,可以在学习完基础知识以后再去了解。在后续的教程中,笔者将会选择安装最新的Java11。有关JDK的安装将在下篇文章中进行介绍。

四.推荐的书籍

  在笔者学习Java的过程中,阅读了很多关于Java基础的书。我在刚开始学习Java时,曾浏览了贴吧、知乎等论坛上不少关于Java初学者该选择什么书的帖子,很多人都推荐《Java编程思想》。但是,我个人不是很推荐初学者一上来就抱着这本书啃。不可否认,这本书是一本非常优秀的书,但这本书适合学习Java一到两年,有一定基础和理解的读者。因此,我在这里推荐另外两本书,分别是《Head First Java》和《Java核心技术 卷一 基础知识》。

1.Head First Java


  这本书适合纯小白看,图文并茂,简单易懂,读起来非常轻松搞笑。书中有非常多插图和有趣的例子,寓教于乐,对于没有基础的同学非常友好。不过篇幅较长,知识点比较零碎,个人不是很喜欢这种风格,但是内容确实面面俱到,是一本不可多得的好书。需要注意的是,这本书是基于Java5.0的。

2.Java核心技术 卷一 基础知识


  这本书相比起《Head First Java》来说更加传统,目录也非常明确。内容紧凑详实,满满的都是干货。不过书中没有练习题,这是为人诟病的一方面。不过瑕不掩瑜,在基础知识方面确实很详细。这本书基于Java8,书中讲到了Java8中新增的lambda表达式。个人比较推荐这一本。
  本文中提到的《Head First Java》、《Java核心技术 卷一 基础知识》和《Java编程思想》这三本书,笔者都收藏了pdf版本(均有目录),需要的读者可以在下面评论里留下邮箱,我会及时将pdf发出。

Java基础教程(1)--概述的更多相关文章

  1. Java基础教程:注解

    Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...

  2. Java基础教程:面向对象编程[1]

    Java基础教程:面向对象编程 内容大纲 Java语言概述 Java语言特点 1.Java为纯面向对象的语言,它能够直接反映现实生活中的对象.总之,Everything is object! 2.平台 ...

  3. Java基础教程(18)--继承

    一.继承的概念   继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...

  4. Java基础教程(12)--深入理解类

    一.方法的返回值   当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...

  5. Java基础教程:网络编程

    Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...

  6. Java基础教程(5)--变量

    一.变量 1.变量的定义   正如上一篇教程<Java基础教程(4)--面向对象概念>中介绍的那样,对象将它的状态存在域中.但是你可能仍然有一些疑问,例如:命名一个域的规则和惯例是什么?除 ...

  7. Java基础教程:Lambda表达式

    Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...

  8. Java基础教程:泛型基础

    Java基础教程:泛型基础 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚 ...

  9. Java基础教程:多线程基础(1)——基础操作

    Java:多线程基础(1) 实现多线程的两种方式 1.继承Thread类 public class myThread extends Thread { /** * 继承Thread类,重写RUN方法. ...

随机推荐

  1. POJ的练习题

    http://wenku.baidu.com/link?url=PT1gkBWC3eXuzzs0QqWklC0VNYkf5ynxBFguXPGYR22l1D2tXmQ4VjnsWvbFyvj1fqGi ...

  2. 【OCP题库】最新CUUG OCP 12c 071考试题库(65题)

    65.(22-16) choose the best answer: The CUSTOMERS table has the following structure: You need to writ ...

  3. “全栈2019”Java异常第十八章:Exception详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  4. leecode刷题(17)-- 实现StrStr

    leecode刷题(17)-- 实现StrStr 实现StrStr 描述: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串 ...

  5. 【文文殿下】[51nod1469] 淋漓尽致子串

    SAM的经典应用 一个状态的SIze==1绝对不合法. 一个状态在parent树上有一个Size>1的后继绝对不合法(前面可以再补字符) 一个状态可以转移到Size>1的节点绝对不合法,因 ...

  6. 常见的HTTP请求应答返回码列表

        200      OK 请求成功.一般用于GET与POST请求 300 Multiple Choices 多种选择.请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例 ...

  7. DataList用法总结

    设计模版: 页眉<HeaderTemplate>   </HeaderTemplate> 页脚<FooterTemplate> </FooterTemplat ...

  8. 【bug】记一个有趣的“bug”

    产品经理在使用我们用户功能的是,需要查询一个用户,知道这个用户的id,我说支持模糊查询的. 他输入"余XX",点击查询,怎么都查不出这个用户. 我到用户表里确认,确实有这个ID的用 ...

  9. C#接口实现多态

    我比较喜欢对感兴趣的理论进行反复的理解甚至理解背诵下来,接下来再复习一下什么叫多态(哈哈哈) 多态:在同一粒度视图下对相同类型的事物不做区别的统一操作 接下来看一下接口和引擎类是如何实现多态的: 一. ...

  10. Python数据结构之序列及其操作

    数据结构是计算机存储,组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合. 在Python中,最基本的数据结构为序列(sequence).序列中的每个元素都有编号:从0开始递增 ...