直接入正题

第一章:Java的历史和演变

必须要清楚一个概念,计算机语言的创新和发展取决于以下两个基本原因:



~适应环境和用途的变化



~实现编程艺术的改善和提高



当设计一种计算机语言的时候,要经常取舍,权衡一些因素:


~易用性和功能


~安全性与效率


~稳定性与可扩展性



1.1 Java的前世

1.1.1 C语言,现代编程语言的诞生



C语言的诞生震惊了整个计算机界,因为它从根本上改变了编程的方式和思路。


它是人们对结构化、高效率、(在创建系统程序时能够取代汇编代码的)高级语言需求的直接结果。



早期的计算机语言(如BASIC,COBOL,以及FORTRAN),并没有遵循结构化设计原则。


利用GOTO作为程序控制的主要手段,写出来的代码像“意大利面条”那样混乱,不好理解,调试。



程序员通常需要在品质不同的计算机语言之间进行选择。如


~FORTRAN可以编写高效的科学计算应用程序,但是编写系统程序不方便


~BASIC易于学习,但是功能不强大,并且缺少结构化设计


~汇编语言可以生成高效的代码,但是不易于学习,使用效率低,而且调试困难



发展才是硬道理,所以C语言的诞生是计算机界编程技术发展的结果。



1.1.2 下一阶段:C++,对C语言的改进



通过使用结构化编程语言,程序员第一次能够比较容易地编写出相对复杂的程序。


但是,即使是结构化编程语言,一旦项目达到一定的规模,它的复杂性就会超出程序能够管理的范围。


所以出现了一种编程思想,面向对象编程(Object-Oriented Programming,oop)。


对C语言添加面向对象的特征,便扩展成了C++。由于C++构建于C语言,所以包含C语言的所有特征、特性和优点。



1.2 Java诞生



很多人以为Java的推动力是Internet,但实际上,主要动机是对平台独立语言的需要。


这种语言可用于开发能够嵌入到各种消费类电子设备的软件。许多不同类型的CPU作为控制器。


由于C语言和C++是被设计成针对特定目标进行编译的,尽管可以为各种类型的CPU编译C++程序,但是这需要一个完整的以该CPU为目标的C++编译器,创建编译器很耗费时间而且不经济。


后来,可移植的,平台独立的语言——Java诞生了,这种语言可以生成在不同环境下运行于各种CPU上的代码。


随着Internet的发展,Java被推到了计算机语言设计的前沿,因为Web也需要可移植的程序。


毕竟,Internet是由各种各样的、分布式的系统构成的,这些系统,使用各种类型的计算机、操作系统和CPU。


虽然Java从C语言和C++继承了许多特性,深受C++的影响,但是两者只是相似,并不能等同。两者既不向上兼容也不向下兼容,将会长期共存。



1.3 Java改变Internet的方式



Internet将Java推到了编程的最前沿,本着互利共惠的原则,Java也影响着Internet



1.3.1 Java applet



Java applet 是一种特殊类型的Java程序,是为了能够在Internet上传送而设计的,可以在兼容Java的Web浏览器上自动运行。


而且,applet可以根据需要自动下载,不需要用户的进一步交互。


如果用户单击包含applet的链接,就会自动下载applet,并在浏览器上运行。


本质上,applet使得可以将某些功能从服务器端移到客户端。



1.3.2 安全性



每次下载程序时,都有一定的风险,因为下载的代码可能包含病毒。问题的核心是恶意代码能够导致损害,因为它已经获得对系统资源的未授权访问。


为了使Java能够在客户端计算机上安全的下载并执行applet,需要阻止applet进行这样的攻击。


Java通过将applet限制在Java执行环境中,并且不允许访问计算机的其他部分来实现这种保护。



1.3.3 可移植性



就applet而言,同一个applet必须能够在连接到Internet上的大量不同类型的CPU、操作系统和浏览器环境中下载并执行。


下面会讲通过什么方法使Java能够在不同的系统中执行



1.4 字节码文件



Java解决安全性和可移植性的关键是:Java编译器的输出不是可执行文件,而是字节码文件。


字节码是高度优化的指令集合,这些指令由Java运行时系统执行,Java运行时系统也被称为Java虚拟机(Java Virtual Machine,JVM)



如果将Java程序编译成字节码,那么只需要针对每种平台实现Java虚拟机,就可以使其更容易在广大范围的可变环境中运行。


虽然Java虚拟机在不同平台的细节有所不同,但是只要存在运行时包,都可以理解相同的字节码文件,在该系统中执行。


因为JVM是可控的,所以能够包含程序并防止它在系统外产生负效应。



1.5 servlet:服务器端的Java



servlet是在服务器上执行的小程序。


就像applet动态扩展了web浏览器的功能一样,servlet扩展了web服务器的功能


而且servlet可以被编译成字节码文件,由JVM执行,有高度的可移植性,


只要服务器支持JVM和servlet容器,相同的servlet可以用于各种不同的服务器环境。



1.6 Java的关键特性


~简单性


~安全性


~可移植性


~面向对象


~健壮性


~多线程


~体系结构中立


~解释执行


~高性能


~分布式


~动态性



1.7 Java的演变历程


就是不同版本的演变,不同版本新加的特性等。



第二章 Java综述

2.1 面向对象编程(在Java中处于核心地位)

2.1.1 两种范式



~面向过程模型


~面向对象编程


2.1.2 抽象



面向对象的本质元素之一是抽象。通过抽象管理复杂性。


例如,汽车。可以将其复杂的组成(驾驶系统、制动系统,音响系统等)抽象成汽车这个对象



2.1.3 opp三原则


封装、继承、多态


1.封装



封装是把代码及其操作的数据绑定在一起的机制,并且保证代码和数据既不会受到外部干扰,也不会被误用。


就像一个黑盒,可以阻止盒子外部定义的代码随意访问内部的代码和数据。而是通过已知的方法、接口去访问内部代码和数据。



封装的基础是类。类定义了一组对象共享的结构和行为(数据和代码)。有时把对象叫做类的实例。


关于类以后会详细说明



2.继承



继承是一个对象获得另外一个对象的属性的过程,支持层次化管理的概念。


通过继承,对象只需要定义自己在所属类中独有的属性,可以从父类中继承通用的属性。


关于继承以后会详细说明



3. 多态


多态是允许将一个接口用于一类通用动作的特性。具体使用哪个动作与应用场合有关。


多态的概念经常被表达为“一个接口,多种方法”


关于多态以后会详细说明



2.2 一些基本元素

2.2.1 空白符



在Java中,空白符可以是空格、制表符、换行符



2.2.2 标识符



标识符用于命名事物,例如类、变量以及方法。


标识符可以由大写和小写字母、数字、下划线、美元符号等字符组成的任意字符序列(不能以数字开头)


Java是大小写敏感的



2.2.3 字面值



在Java中,常量的值是通过使用表示常量的字面值创建的。



2.2.4 注释



单行注释:


//注释内容



多行注释:


/*


注释内容


*/



文档注释:


/**


注释内容


*/



2.2.5 分隔符

()    []    {}    ;    ,    .  


2.2.6 Java关键字


关键字是由Java定义的值,不能用作标识符


abstract                    continue                        For                        new                      switch


assert                       default                           goto                      package               synchronized


boolean                   do                                    if                            private                  this


break                        double                           implements        protectded           throw


byte                           else                                import                  public                   throws


case                         enum                             instanceof           return                   transient


catch                        extends                          int                          short                    try


char                          final                                interface               static                    void


class                        finally                             long                       strictfp                  volatile


const                        float                               native                     super                   while