KK觉得下面的内容不必看完,尤其是在没有用到的前提下,因为了看了也记不住,还有对JAVA程序对C、C++的鄙视态度提出抗议,JAVA是为了解决电视冰箱微波炉的问题为生(当然是没有解决,如果用C早解决了^_^,并且现在的家电还是以C为主要解决方案,但是JAVA也在伴随android崛起哦!!),好吧,程序员间的互相鄙视其实是跟意识形态的互相批判一样扯蛋的,各有各的用武之地,KK可不希望看到skynet诞生。
概述
§1.1Java语言出现的背景、影响及应用前景
一、背景
最近一年多来,在Internet上出现的特别吸引人的事件就是Java语言和用 Java编写的浏览器HotJava。
1991年,SUN MicroSystem公司的JameGosling、BillJoe等人,为在电 视、控制烤面包箱等家用消费类电子产品上进行交互式操作而开发了一个名为Oak 的软件(即一种橡树的名字),但当时并没有引起人们的注意,直到1994年下半 年,Internet的迅猛发展,环球信息网WWW的快速增长,促进了Java语言研制的 进展,使得它逐渐成为Internet上受欢迎的开发与编程语言,一些著名的计算机 公司纷纷购买了Java语言的使用权,如MicroSoft、IBM、Netscape、Novell、 Apple、DEC、SGI等,因此,Java语言被美国的著名杂志PCMagazine评为1995 年十大优秀科技产品,(计算机类就此一项入选),随之大量出现了用Java编写的 软件产品,受到工业界的重视与好评,认为"Java是八十年代以来计算机界的一件 大事",微软总裁比尔·盖茨在悄悄地观察了一段时间后,不无感慨地说:"Java是 长时间以来最卓越的程序设计语言",并确定微软整个软件开发的战略从PC单机时 代向着以网络为中心的计算时代转移,而购买Java则是他的重大战略决策的实施部 署。
因此,Java的诞生必将对整个计算机产业发生深远的影响,对传统的计算模型 提出了新的挑战。
SUNMicroSystem公司的总裁ScottMcNealy认为Java为Internet和WWW开 辟了一个崭新的时代。
环球信息网WWW的创始人Berner事务部信息发展局、台湾信息技术研 究所等单位牵头,成立了一个"Java联盟",参加的有22个在台湾相当著名的计算 机公司,并在台北建立一个"Java开发中心",在新竹建立一个"Java语言实验室", 以掀起台湾开发与应用Java语言的热潮。
香港则在今年4月就举行了全岛的Java杯比赛,在计算机界掀起了学习 Java的热潮(尤其是在大学生们中,出现了一批Java迷)。
有人预言:Java将是网络上的"世界语",今后所有的用其他语言编写的软 件统统都要用Java语言来改写。
二、Java语言对软件开发技术的影响
工业界不少人预言:"Java语言的出现,将会引起一场软件革命",这是因为 传统的软件往往都是与具体的实现环境有关,换了一个环境就需要作一番改动,耗 时费力,而Java语言能在执行码(二进制码)上兼容,这样以前所开发的软件就 能运行在不同的机器上,只要所用的机器能提供Java语言解释器即可。
Java语言将对未来软件的开发产生影响,可从如下几个方面考虑:
1软件的需求分析:可将用户的需求进行动态的、可视化描述,以提供设计 者更加直观的要求。而用户的需求是各色各样的,不受地区、行业、部门、爱好的 影响,都可以用Java语言描述清楚。
2软件的开发方法:由于Java语言的面向目标的特性,所以完全可以用O-O 的技术与方法来开发,这是符合最新的软件开发规范要求的。
3Java语言的动画效果远比GUI技术更加逼真,尤其是利用WWW提供的巨大 动画资源空间,可以共享全世界的动态画面的资源。
4软件最终产品:用Java语言 开发的软件可以具有可视化、可听化、可操 作化的效交互、动画与动作",要它停就停,要它继续就继续,而这是在电影与电 视播放过程中难以做到的。
5其它:使用Java语言对开发效益、开发价值都有比较明显的影响。
三、工业界对Java语言的评价
1996年5月29~31日,在美国旧金山召开了一个全世界Java语言开发者 大会,(JavaOneDeveloperConfer-ence),出席会议的多达6500多人,来自工业 界的超过一半,有人评价说:"这是近年来计算机界最光辉的一次盛会",一些工 业界的老总们相当看好Java语言,认为它的使用将会引起一场软件革命。从软件 的设计风格、设计方法、设计目标到设计过程,都会产生彻底的变革,"甚至会改 变此星球的生活方式"。
在这次会上,Java的创始人之一JamesGosling说:"Java不仅仅只是 applets,它能做任何事情",Dta咨询公司的高级软件工程师RichKadel说:"Java 不仅仅是一种程序设计语言,更是现代化软件再实现的基础;Java还是未来新型 OS的核心;将会出现Java芯片;将构成各种应用软件的开发平台与实现环境,是 人们必不可少的开发工具,……"。
由于各界都看好它,因此,各大公司都纷纷表示支持Java,Intel、Xerox 公司声言将把Java嵌入到他们的产品中去。就连华尔街金融界也在投入资金人力 用Java开发电子贸易、金融软件。
所以有人说:"现在第三方的开发商都团结在Java大旗周围了!",纷纷推出 用Java开发的各种软件产品,以期尽快地占领市场。
四、Java语言的应用前景
Java语言有着广泛的应用前景,大体上可以从以下几个方面来考虑其应用:
1所有面向对象的应用开发,包括面向对象的事件描述、处理、综合等;
2计算过程的可视化、可操作化的软件的开发;
3动态画面的设计,包括图形图像的调用;
4交互操作的设计(选择交互、定向交互、控制流程等);
5Internet的系统管理功能模块的设计,包括Web页面的动态设计、管理 和交互操作设计等;
6Intranet(企业内部网)上的软件开发(直接面向企业内部用户的软件);
7与各类数据库连接查询的SQL语句实现;
8其它应用类型的程序。
§1.2Java的特点
Java是一个广泛使用的网络编程语言,它是一种新的计算概念。
首先,作为一种程序设计语言,它简单、面向对象、不依赖于机器的结构、 具有可移植性、鲁棒性、安全性、并且提供了并发的机制、具有很高的性能。其 次,它最大限度地利用了网络,Java的小应用程序(applet)可在网络上传输而 不受CPU和环境的限制。另外,Java还提供了丰富的类库,使程序设计者可以很 方便地建立自己的系统。
下面我们分别从这三个方面来讨论Java的特点,然后通过把Java与C, C++相比进一步指出它所具有的优点。
一、Java语言
Java语言有下面一些特点:简单、面向对象、分布式、解释执行、鲁棒、 安全、体系结构中立、可移植、高性能、多线程以及动态性。
1.简单性
Java语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的 任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程 序。Java略去了运算符重载、多重继承等模糊的概念,并且通过实现自动垃圾 收集大大简化了程序设计者的内存管理工作。另外,Java也适合于在小型机上运 行,它的基本解释器及类的支持只有40KB左右,加上标准类库和线程的支持也 只有215KB左右。库和线程的支持也只有215KB左右。
2.面向对象
Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的 接口模型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息 隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类 所提供的方法,实现了代码的复用。
3.分布性
Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户 可以通过URL地址在网络上很方便地访问其它对象。
4.鲁棒性
Java在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误 的产生。它提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易 产生的错误。通过集成的面向对象的例外处理机制,在编译时,Java提示出可能 出现但未被处理的例外,帮助程序员正确地进行选择以防止系统的崩溃。另外, Java在编译时还可捕获类型声明中的许多常见错误,防止动态运行时不匹配问题 的出现。
5.安全性
用于网络、分布环境下的Java必须要防止病毒的入侵。Java不支持指针, 一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用 "特洛伊"木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易 产生的错误。
6.体系结构中立
Java解释器生成与体系结构无关的字节码指令,只要安装了Java运行时 系统,Java程序就可在任意的处理器上运行。这些字节码指令对应于Java虚拟 机中的表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平 台运行。
7.可移植性
与平台无关的特性使Java程序可以方便地被移植到网络上的不同机器。 同时,Java的类库中也实现了与不同平台的接口,使这些类库可以移植。另外, Java编译器是由Java语言实现的,Java运行时系统由标准C实现,这使得Java 系统本身也具有可移植性。
8.解释执行
Java解释器直接对Java字节码进行解释执行。字节码本身携带了许多 编译时信息,使得连接过程更加简单。
9.高性能
和其它解释执行的语言如BASIC、TCL不同,Java字节码的设计使之能 很容易地直接转换成对应于特定CPU的机器码,从而得到较高的性能。
10.多线程
多线程机制使应用程序能够并行执行,而且同步机制保证了对共享数据 的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定 的行为,而不需要采用全局的事件循环机制,这样就很容易地实现网络上的实 时交互行为。
11.动态性
Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入 新的方法和实例变量而不会影响用户程序的执行。并且Java通过接口来支持 多重继承,使之比严格的类继承具有更灵活的方式和扩展性。
二、JavaApplet
Java语言的特性使它可以最大限度地利用网络。Ap-plet是Java的小应 用程序,它是动态、安全、跨平台的网络应用程序。JavaApplet嵌入HTML语 言,通过主页发布到Internet。网络用户访问服务器的Applet时,这些Applet 从网络上进行传输,然后在支持Java的浏览器中运行。由于Java语言的安全机 制,用户一旦载入Applet,就可以放心地来生成多媒体的用户界面或完成复杂的 计算而不必担心病毒的入侵。虽然Applet可以和图像、声音、动画等一样从网 络上下载,但它并不同于这些多媒体的文件格式,它可以接收用户的输入,动态 地进行改变,而不仅仅是动画的显示和声音的播放。
三、丰富的类库
Java提供了大量的类以满足网络化、多线程、面向对象系统的需要。
1.语言包提供的支持包括字符串处理、多线程处理、例外处理、数学函 数处理等,可以用它简单地实现Java程序的运行平台。
2.实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。
3.输入输出包用统一的"流"模型来实现所有格式的I/O,包括文件系统、 网络、输入
4.低级网络包用于实现Socket编程。
5.抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件, 包括窗口、菜单、滚动条、对话框等,使得Java可以移植到不同平台的机器。
6.网络包支持Internet的TCP/IP协议,提供了与In-ternet的接口。 它支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程序设计。
四、Java和C、C++
对于变量声明、参数传递、操作符、流控制等,Java使用了和C、C++ 相同的传统,使得熟悉C、C++的程序员能很方便地进行编程。同时,Java为 了实现其简单、鲁棒、安全等特性,也摒弃了C和C++中许多不合理的内容。
1.全局变量
Java程序中,不能在所有类之外定义全局变量,只能通过在一个类中定 义公用、静态的变量来实现一个全局变量。例如:
ClassGlobalVar{ public static global_var; }
在类GlobalVar中定义变量global_var为public static,使得其它类 可以访问和修改该变量。 Java对全局变量进行了更好的封装。而在C和C++中,依赖于不加封装 的全局变量常常造成系统的崩溃。
2.Goto
Java不支持C、C++中的goto语句,而是通过例外处理语句try,Catch, final等来代替C、C++中用goto来处理遇到错误时跳转的情况,使程序更可读 且更结构化。
3.指针
指针是C、C++中最灵活,也是最容易产生错误的数据类型。由指针所进行 的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显 式类型转换后,可以访问一个C++中的私有成员,从而破坏安全性,造成系统的 崩溃。而Java对指针进行完全的控制,程序员不能直接进行任何指针操作,例如 把整数转化为指针,或者通过指针释放某一内存地址等。同时,数组作为类在Java 中实现,良好地解决了数组访问越界这一C、C++中不作检查的错误。
4.内存管理
在C中,程序员通过库函数malloc()和free()来分配和释放内存,C++ 中则通过运算符new和delete来分配和释放内存。再次释放已释放的内存块或 未被分配的内存块,会造成系统的崩溃;同样,忘记释放不再使用的内存块也 会逐渐耗尽系统资源。而在Java中,所有的数据结构都是对象,通过运算符new 为它们分配内存堆。通过new得到对象的处理权,而实际分配给对象的内存可能 随程序运行而改变,Java对此自动地进行管理并且进行垃圾收集,有效防止了由 于程序员的误操作而导致的错误,并且更好地利用了系统资源。
5.数据类型的支持
在C、C++中,对于不同的平台,编译器对于简单数据类型如int,float 等分别分配不同长度的字节数,例如:int在IBMPC中为16位,在VAX-11中为 32位,这导致了代码的不可移植性,但在Java中,对于这些数据类型总是分 配固定长度的位数,如对int型,它总占32位,这就保证了Java的平台无关性。
6.类型转换
在C、C++中,可以通过指针进行任意的类型转换,常常带来不安全性, 而Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的 转换。
7.头文件
C、C++中用头文件来声明类的原型以及全局变量、库函数等,在大的系 统中,维护这些头文件是很困难的。而Java不支持头文件,类成员的类型和访 问权限都封装在一个类中,运行时系统对访问进行控制,防止对私有成员的操 作。同时,Java中用import语句来与其它类进行通讯,以便使用它们的方法。
8.结构和联合
C、C++中的结构和联合中所有成员均为公有,这就带来了安全性问题。 Java中不包含结构和联合,所有的内容都封装在类中。
9.预处理
C、C++中用宏定义来实现的代码给程序的可读性带来了困难。在Java 中,不支持宏,它通过关键字final来声明一个常量,以实现宏定义中广泛使 用的常量定义。
基本概念:
1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构 是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why。所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对封装对象数据,很大 限度上提高复用率。
2.OOP中最重要的思想是类,类是模板是蓝图,从类中构造一个对象,即创建了这个类的一个实例(instance)。
3.封装:就是把数据和行为结合起在一个包中)并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)。
4.通过扩展一个类来获得一个新类叫继承(inheritance),而所有的类都是由Object根超类扩展而得,根超类下文会做介绍。
5.对象的3个主要特性
ehavior---说明这个对象能做什么。
tate---当对象施加方法时对象的反映。
dentity---与其他相似行为对象的区分标志。
每个对象有唯一的indentity 而这3者之间相互影响。
6.类之间的关系:
use-a :依赖关系
has-a :聚合关系
is-a :继承关系--例:A类继承了B类,此时A类不仅有了B类的方法,还有其自己的方法.(个性存在于共性中)
7.构造对象使用构造器:构造器的提出,构造器是一种特殊的方法,构造对象并对其初始化。
例:Data类的构造器叫Data
ew Data()---构造一个新对象,且初始化当前时间。
Data happyday=new Data()---把一个对象赋值给一个变量happyday,从而使该对象能够多次使用,此处要声明的使变量与对象变量二者是不同的.new返回的值是一个引用。
构造器特点:构造器可以有0个,一个或多个参数; 构造器和类有相同的名字;一个类可以有多个构造器;构造器没有返回值;构造器总是和new运算符一起使用。
8.重载:当多个方法具有相同的名字而含有不同的参数时,便发生重载.编译器必须挑选出调用哪个方法。
9.包(package)Java允许把一个或多个类收集在一起成为一组,称作包,以便于组织任务,标准Java库分为许多包。java.lang java.util java,net等,包是分层次的所有的java包都在java和javax包层次内。
10.继承思想:允许在已经存在的类的基础上构建新的类,当你继承一个已经存在的类时,那么你就复用了这个类的方法和字段,同时你可以在新类中添加新的方法和字段。
11.扩展类:扩展类充分体现了is-a的继承关系. 形式为:class (子类) extends (基类)。
12.多态:在java中,对象变量是多态的.而java中不支持多重继承。
13.动态绑定:调用对象方法的机制。
(1)编译器检查对象声明的类型和方法名。
(2)编译器检查方法调用的参数类型。
(3)静态绑定:若方法类型为priavte static final 编译器会准确知道该调用哪个方法。
(4)当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用x所指向的对象的实际类型相匹配的方法版本。
(5)动态绑定:是很重要的特性,它能使程序变得可扩展而不需要重编译已存代码。
14.final类:为防止他人从你的类上派生新类,此类是不可扩展的。
15.动态调用比静态调用花费的时间要长。
16.抽象类:规定一个或多个抽象方法的类本身必须定义为abstract。
例: public abstract string getDescripition
17.Java中的每一个类都是从Object类扩展而来的。
18.object类中的equal和toString方法。
equal用于测试一个对象是否同另一个对象相等。
toString返回一个代表该对象的字符串,几乎每一个类都会重载该方法,以便返回当前状态的正确表示。
(toString 方法是一个很重要的方法)
19.通用编程:任何类类型的所有值都可以同object类性的变量来代替。
20.数组列表:ArrayList动态数组列表,是一个类库,定义在java.uitl包中,可自动调节数组的大校
21.class类 object类中的getclass方法返回ckass类型的一个实例,程序启动时包含在main方法的类会被加载,虚拟机要加载他需要的所有类,每一个加载的类都要加载它需要的类。
22.class类为编写可动态操纵java代码的程序提供了强大的功能反射,这项功能为JavaBeans特别有用,使用反射Java能支持VB程序员习惯使用的工具。能够分析类能力的程序叫反射器,Java中提供此功能的包叫Java.lang.reflect反射机制十分强大。
A.在运行时分析类的能力。
B.在运行时探察类的对象。
C.实现通用数组操纵代码。
D.提供方法对象。
而此机制主要针对是工具者而不是应用及程序。
反射机制中的最重要的部分是允许你检查类的结构.用到的API有:
java.lang.reflect.Field 返回字段。
java.reflect.Method 返回方法。
java.lang.reflect.Constructor 返回参数。
方法指针:java没有方法指针,把一个方法的地址传给另一个方法,可以在后面调用它,而接口是更好的解决方案。
23.接口(Interface)说明类该做什么而不指定如何去做,一个类可以实现一个或多个interface。
24.接口不是一个类,而是对符合接口要求的类的一套规范。若实现一个接口需要2个步骤:
A.声明类需要实现的指定接口。
B.提供接口中的所有方法的定义。
声明一个类实现一个接口需要使用implements 关键字class actionB implements Comparable 其actionb需要提供CompareTo方法,接口不是类,不能用new实例化一个接口。
25.一个类只有一个超类,但一个类能实现多个接口。Java中的一个重要接口:Cloneable
26.接口和回调.编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发生时回调对象上的方法。
例:ActionListener 接口监听。
类似的API有:
java.swing.JOptionPane
java.swing.Timer
java.awt.Tookit
27.对象clone:clone方法是object一个保护方法,这意味着你的代码不能简单的调用它。
28.内部类:一个内部类的定义是定义在另一个内部的类。原因是:
A.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。
B.对于同一个包中的其他类来说,内部类能够隐藏起来。
C.匿名内部类可以很方便的定义回调。
D.使用内部类可以非常方便的编写事件驱动程序。
29.代理类(proxy):
A.指定接口要求所有代码
B.object类定义的所有的方法(toString equals)
30.数据类型:Java是强调类型的语言,每个变量都必须先申明它都类型,java中总共有8个基本类型.4种是整型,2种是浮点型,一种是字符型,被用于Unicode编码中的字符,布尔型
文章评论(0条评论)
登录后参与讨论