一.什么是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. layui select 禁止点击

    $('select').attr('disabled', 'disabled'); form.render('select'); 注意事项: 1. 必须写 layui.use([form]) 2. 先 ...

  2. python 项目自动生成 requirements.txt 文件

    生成 requirements.txt 文件的目的: 安装 pthon 项目时需要把此项目所有依赖的第三方包安装完成.项目依赖的第三方包统一放到 requirements.txt 文件中即可. 怎么自 ...

  3. “全栈2019”Java多线程第八章:放弃执行权yield()方法详解

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

  4. [CSS3] :nth-child的用法

    :nth-child(2)选取第几个标签,“2可以是你想要的数字” .demo01 li:nth-child(2){background:#090} :nth-child(n+4)选取大于等于4标签, ...

  5. Rabbitmq 消息对列 生产者与消费者的具体实现 springboot

    RabbitMQ 基本介绍 RabbitMQ的设计理念是.只要有接收消息的队列. 邮件就会存放到队列里. 直到订阅人取走. . 如果没有可以接收这个消息的消息队列. 默认是抛弃这个消息的.. 我实现的 ...

  6. SpringBoot 异步线程简单三种样式

    引用:在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x ...

  7. python --爬虫基础 --爬猫眼top 100 使用 requests 库的基本操作

    import requests import re import json import time def get_page(url): # 获取页数 headers = { 'User-Agent' ...

  8. django 运行报错汇总

    记录自己在使用django开发过程中遇到的问题,不间断更新. (1) 独立运行普通Python脚本调用django中定义的类报错 报错信息: django.core.exceptions.Improp ...

  9. docker微服务部署之:二、搭建文章微服务项目

    docker微服务部署之:一,搭建Eureka微服务项目 一.新增demo_article模块,并编写代码 右键demo_parent->new->Module->Maven,选择M ...

  10. Log中关于zVideoApp与zChatApp之间的消息传递可以搜索以下字符串

    [CSSBConfIPCAgent::OnMessageReceived]  (这是zVideoApp端的) 和 [CSSBPTIPCListener::OnMessageReceived]      ...