《6天学会Java.doc》由会员分享,可在线阅读,更多相关《6天学会Java.doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一天 Java 入门第一页:什么是Java? Java好象随处可见 - 甚至在TV中。尽管如此,说清楚Java是什么和它能做什么却不那么容易。刚开始接触Java的人通常有三个问题:什么是Java?Java能做什么?Java怎样改变我的生活?让我们先答复第一个问题:什么是Java?Java既是一种编程语言,又是一个平台。Java程序语言Java是具有以下特征的高级程序语言: 简单 面向对象 可分布 可解释 强壮 平安性 结构化 轻便 功能强大 多线程 动态 Java既可以被编译,也可以被解释。通过编译器,可以把Java程序翻译成一种中间代码 - 称为字节码 - 可以被Java解释器解释的独立于
2、平台的代码。通过解释器,每条Java字节指令被分析,然后在计算机上运行。只需编译一次,程序运行时解释执行。以下图说明了它是如何工作的:可以把Java字节码看作运行在Java虚拟机Java VM上的机器代码指令。每中Java解释器,不管是Java开发工具还是可以运行Java小应用程序的Web浏览器,都是一种Java VM的实例。JavaVM也可以由硬件实现。Java字节码使“写一次,到处运行成为可能。可以在任何有Java编译器的平台上把Java程序编译成字节码。这个字节码可以运行在任何Java VM上。例如,同一个Java程序可以运行在WindowsNT、Solaris和Macintosh上。J
3、ava平台平台是程序运行的硬件或软件环境。Java平台与大多数其它平台不同之处在于它是运行于其它基于硬件平台的纯软件平台。大多数其它平台是硬件和操作系统的结合。Java平台由两局部组成: Java虚拟机Java VM Java应用程序界面Java API 我们已经介绍了Java VM,它是Java平台的根底,可以移植到各种基于硬件的平台上。Java API是软件组件的集合,它们提供了很多有用的功能,如图形用户界面GUI。Java API被分组为相关组件的库包。以下图描述了一个运行在Java平台上的Java程序,如应用程序application或小应用程序applet。如图中显示的,JavaAP
4、I和VM把Java程序从硬件依赖中别离出来。作为一种独立于平台的环境,Java比本地代码慢一些。然而,聪明的编译器、很好地调制过的解释器和即时字节码编译器可以在不牺牲可移植性的条件下使Java的表现接近本地代码。第二页:Java能做什么? 最有名的Java程序可能是Java小应用程序applet。小应用程序是遵循一定的规那么,运行在支持Java的浏览器上的Java程序。然而,Java不只用来为WWW写聪明的、娱乐性的小应用程序,它是一个通用的、高级程序语言和强大的软件平台。使用通用的JavaAPI,可以写很多种程序。最常见的程序类型可能是小应用程序和应用程序,Java应用程序是直接运行在Jav
5、a平台上的独立的程序。一种特殊的称为“服务器的应用程序可以支持网络上的客户。效劳器的包括Web效劳器、代理效劳器、邮件效劳器、打印效劳器和导入效劳器。另一种特殊的程序是servlet,它与小应用程序类似 - 在都是应用程序的实时扩展方面。不运行在浏览器中,servlet运行在Java效劳器上,配置或裁剪效劳器。Java API是如何支持各种程序的呢?它通过软件包提供各种功能。核心APIcore API是实现Java平台功能的API。核心API有以下特征: 要素:对象、字符串、线程、数字、输入和输出、数据结构、系统属性、日期和时间等。 小应用程序:Java小应用程序使用的指令集。 网络:URL、
6、TCP和UDP插槽、IP地址。 国际化:可以写可本地化的代码。程序可自动适应特殊的场所和以适当的语言显示。 平安性:在低级和高级两方面,包括电子签名、公/私密钥管理、访问控制、认证。 软件组件:称为JavaBean,可以插到已有的组件结构中,如微软的OLE/COM/Active-X结构、OpenDoc、网景的LiveConnect。 对象系列化:可以通过RMI远程方法调用进行轻量级的持续和通讯。 JDBCJava数据库互联:提供对大量关系数据库的统一访问。 Java不仅有核心API,还有标准扩展。标准扩展定义了3D、服务器、合作、 、演讲、动画等的API。第三页:Java怎样改变我的生活? 我
7、们不能保证你学Java会成名、发财或者找到工作。Java只是使你的程序更好和比其它语言付出更少的努力。我们相信Java会帮你做以下事情: 迅速开始:虽然Java是一种功能强大的面向对象的语言,但是它很容易学,尤其是对那些熟悉C或+的程序员。 写更少的代码:程序韵律学类、方法等使用Java写的程序比用C+写的小四倍。 写更好的代码:Java语言鼓励好的编程实践,它的垃圾收集功能可以帮你防止使用内存时出问题。Java的面向对象、JavaBeans组件结构和它的广泛涉及、容易扩展的API可以使你重用别人的经过测试的代码和引入尽量少的错误。 更快地开发程序:开发时间只相当于写同样C+程序的一半。为什么
8、?因为用Java写的代码行数更少,Java也比C+程序简单。 用100%纯Java可以防止对平台的依赖性:通过遵守它的语言规那么和防止使用其它语言库,可以保持程序的可移植性。 写一次,到处运行:因为100%纯Java程序可以编译成独立于机器的字节码,它们可以运行在任何Java平台上。 更容易的分发软件:可以容易地从一个中心效劳器升级小应用程序。小应用程序可以利用Java的新类即时装载而不用重新编译整个程序的特性。第二天 什么是面向对象第一页:面向对象编程 过去几年里你可能听说过很多面向对象编程的事,每个人都在谈论它。那么什么是对象和面向对象技术呢?是真事还是骗局呢?事实是- 两者都有。面向对象
9、技术确实为软件开发者和他们的产品提供了很多便利。然而,由于历史上很多骗局包围在这种技术周围,使经理和程序员都很困惑。很多公司认为是这种艰辛的受害者,然后宣称他们的软件产品的面向对象的,实际上,它们不是。这些虚假导致困惑的顾客、引起对面向对象技术的广泛的误导和不信任。然而,尽管对面向对象技术的过度使用和滥用,计算机产业正在开始克服这个骗局。人们对它的理解正在逐渐加深。本课揭穿了骗局,解释了面向对象编程、设计和开发后面的关键概念。第二页:什么是对象? 如同在“面向对象这个名称中所隐含的,对象是理解面向对象技术的关键。你现在可以看看周围的世界,这里有很多现实世界中对象的例子:你的狗、你的书桌、电视机
10、和自行车。这些现实世界中的对象有两个相同的特征:它们都有状态和行为。例如,狗有状态名字、颜色、种类和行为叫、吃东西。自行车也有状态当前档、两个轮子、档的个数和行为刹车、加速、减慢、换档。软件对象以现实世界中的对象为模型,它们也有状态和行为。软件对象在变量中包含它的状态、用方法实现它的行为。可以用软件对象表示现实世界中的对象,也可以用它表示抽象概念。例如,GUI窗口系统中的对象中的事件可以表示用户按鼠标或按键的行为。在很多语言中,包括Java,一个对象可以选择把它的变量暴露给其它对象,允许其它对象查看甚至改变变量。同时,对象也可以把方法隐藏起来,防止其它对象的调用。一个对象对其它对象能否访问它的
11、变量和方法有绝对的权限。封装的好处把相关变量和方法封装在一个软件包中为软件开发者提供了两个好处: 模块化 - 一个对象的源代码可以独立的编写和维护。同时,对象也可以容易地在系统中传送。 信息隐藏 - 一个对象有一个公共界面,其它对象可以与之通讯。但是对象也可以维护私有信息和方法,而不影响依赖于它的其它对象。第三页:什么是消息? 一个单一的对象本身一般没什么大用,它通常作为包含很多对象的更大的程序或应用程序的一个组件而存在。通过这些对象的交互作用,可以得到更高级别的功能和更复杂的行为。软件对象通过互相发送消息进行交互和通讯。当对象A希望对象B执行B中的一个方法时,对象A发送一条消息给对象B。有时
12、,接收信息的对象需要更多的信息,以便确切知道做什么。这些与消息一起传送的信息叫做参数。消息由三局部组成: 1. 消息到达的对象。2. 执行的方法名。 3. 方法需要的参数 消息的好处: 对象的行为通过它的方法表达,因此消息传送支持所有可能的对象之间的交互。 对象不必在相同的程序或者在相同的机器上,也能互相传送消息。第四页:什么是类? 在现实世界中,经常有属于同一类的对象。例如,你的自行车只是世界上很多自行车中的一辆。在面向对象软件中,也有很多共享相同特征的不同的对象:矩形、雇用记录、视频剪辑等。可以利用这些对象的相同特征为它们建立一个蓝图。对象的软件蓝图称为类。定义:类是定义同一类所有对象的变
13、量和方法的蓝图或原型。例如,可以建立一个定义包含当前档位等实例变量的自行车类。这个类也定义和提供了实例方法变档、刹车的实现。实例变量的值由类的每个实例提供。因此,当你创立自行车类以后,必须在使用之前对它进行实例化。当创立类的实例时,就建立了这种类型的一个对象,然后系统为类定义的实例变量分配内存。然后可以调用对象的实例方法实现一些功能。相同类的实例共享相同的实例方法。除了实例变量和方法,类也可以定义类变量和类方法。可以从类的实例中或者直接从类中访问类变量和方法。类方法只能操作类变量 - 不必访问实例变量或实例方法。系统在第一次在程序中遇到一个类时为这个类建立它的所有类变量的拷贝 - 这个类的所有
14、实例共享它的类变量。类和对象你可能会注意到对象和类的说明很相似。实际上,类和对象之间的差异经常是一些困惑的起源。在现实世界中很明显,类不是它描述的对象 - 自行车的蓝图不是自行车。但是在软件中就有点难区分类和对象。着局部是由于软件对象只是现实世界的电子模型或抽象概念。但是也由于很多人用“对象指类和它们的实例这两者。类的好处对象提供了模型化和信息隐藏的好处。类提供了可重用性的好处。自行车制造商一遍一遍地重用相同的蓝图来制造大量的自行车。软件程序员用相同的类,即相同的代码一遍一遍地建立对象。第五页:什么是继承? 一般来说,对象用类来定义。通过了解类可以了解对象。即使你不知道penny-farthi
15、ng是什么,但是如果我告诉你它是一种自行车,你就会知道它有两个轮子、车把和脚蹬。面向对象系统比这走得更远,它允许在其它类的根底上定义类。例如,山地车、跑车是自行车的不同类型。在面向对象的术语中,山地车和跑车都是自行车类的子类。自行车类是山地车和跑车的父类。每个子类从父类继承状态以变量定义的形式。山地车和跑车拥有相同的状态:速度等。每个子类从父类继承方法。山地车和跑车共享相同的行为:刹车和变档等。但是,子类不限于他们的父类提供的状态和行为。子类可以在继承的父类中增加变量和方法。子类也可以覆盖被继承的方法和提供这些方法的特定实现。可以不只限于一层继承。继承树,即类的层次,可以尽量深。方法和变量沿着
16、层次向下传递。一般来说,层次越深,行为越特定。继承的好处 子类可以基于父类的一般元素提供特定的行为。通过使用继承,程序员可以重用父类的代码很屡次。 程序员可以实现定义“一般行为的父类,称为抽象类。抽象父类定义和可能局部实现行为,但是多数类的行为没有被定义和实现。其它程序员可以在其子类中填充细节。第三天 Java根底知识变量和操作符第一页:Java语言 下面例子中的类Count包含一个名为countChars的方法,它从一个Reader实现字符输入流的一个对象读和计算字符然后显示读出的字符数。即使这样小的方法都使用了Java API中很多传统语言的特征。import java.io.*;publ
17、ic class Count public static void countChars(Reader in)throws IOException int count = 0; while (in.read() != -1) count+; System.out.println(Counted + count + chars.); / . main method omitted .通过对这个简单方法的逐行研究,本课描述了Java语言中的传统语言特征,如变量和数据类型、操作符、表达式、流程控制等。第二页:变量和数据类型 变量是程序语言中的名词,即它们是执行动作或被执行动作的实体值和数据。coun
18、tChars方法定义了两个变量 - count和in。程序每次从变量in中读一个字符,然后count加1。这两个变量的定义以黑体出现:import java.io.*;public class Count public static void countChars(Reader in) throws IOException int count = 0; while (in.read() != -1) count+; System.out.println(Counted + count + chars.); / . main method omitted .变量定义包含两局部:变量的类型和变量名
19、。变量定义的位置决定了它的范围。数据类型Java语言中的所有变量都必须有数据类型。变量的数据类型决定了变量可以包含的值和可以在其上进行的操作。例如,定义intcount定义count是一个整数。Java语言中有两类数据类型:原始数据类型和参考数据类型。下表按关键字类出了Java支持的所有原始数据类型、它们的大小和格式和简单描述。类型大小/格式描述(integers)byte8-bit twos complementByte-length integershort16-bit twos complementShort integerint32-bit twos complementInteger
20、long64-bit twos complementLong integer(real numbers)float32-bit IEEE 754Single-precision floating pointdouble64-bit IEEE 754Double-precision floating point(other types)char16-bit Unicode characterA single characterbooleantrue or false A boolean value (true or false)原始数据类型的变量包含它的类型的单一值:数字、字符或布尔值。例如,i
21、nt的值是整数,char的值是一个16位的Unicode字符。数组、类和接口是参考数据类型。参考数据类型的值是对变量表示的真实值或值的集合的参考。参考数据类型变量不是数组或对象本身,而是到达它的一种方式。countChars方法使用参考数据类型in - 一个Reader对象。当用在语句或表达式中时,in指向对象的参考。因此可以用对象名访问它的成员变量或它的方法。变量名程序通过变量名引用它的值。例如,当countChars方法希望引用变量count的值时,只需简单地使用名字count。变量的范围变量的范围是变量可以被访问和确定变量什么时候被建立和破坏的代码块。程序中的变量定义的位置建立了它的范围
22、并使之成为下面四种类型中的一种: 成员变量 局部变量 方法参数 例外处理参数 成员变量是类或对象中的一个成员。它可以在类中任何地方定义,除了在方法中。它在类中对所有代码可用。Count类没有定义成员变量。可以在方法或方法的代码块中定义局部变量。在countChars中,count是局部变量。count的范围,即可以访问count的代码,从count的定义开始到countChars方法的结束。一般来说,局部变量的范围从它的定义到它定义所在的代码块的结束为止。方法参数变量和异常处理参数将在以后的课程中提到。变量初始化局部变量和成员变量可以在它们定义时用赋值语句初始化。赋值语句两端的数据类型必须匹配
23、。countChars方法在定义count时初始化它为0:int count = 0;方法参数变量和异常处理变量不能以这种方法初始化。参数的值被调用者设置。Final变量可以在任意范围内把变量定义为final,包括方法和构造函数的参数。final变量的值在初始化后不能被改变。final变量的定义方式如下:final int aFinalVar = 0;这句话定义了一个final变量并初始化它。以后如果给aFinalVar赋值,将产生一个编译错误。有必要的话,可以推迟final变量的初始化。可以定义一个变量,以后再初始化之:final int blankfinal;. . .blankfinal
24、 = 0;一个被定义但是还没初始化的final变量称为blank final空的final。第三页:操作符 countChars方法使用了几种操作符,包括=、!=、+和+:import java.io.*;public class Count public static void countChars(Reader in)throws IOException int count = 0; while (in.read() != -1) count+; System.out.println(Counted + count + chars.); / . main method omitted .操
25、作符可以在一个、两个或三个操作数上执行一定的功能。要求一个操作数的操作符称为一元操作符。例如,+是使操作数加1的一元操作符。需要两个操作数的操作符称为二元操作符。如,=是一个从右到左赋值的二元操作符。三元操作符是需要三个操作数的操作符。Java语言只有一个三元操作符 - ?:,是if-else的缩写。Java的一元操作符可以用前缀或后缀。前缀如下所示:operator op后缀如下所示:op operator二元操作符在两个操作数中间:op1 operator op2三元操作符的用法如下:expr ? op1 : op2除了执行操作,操作符也返回值。返回值和它的类型取决于操作符和它的操作数的类
26、型。例如,算术操作符返回算术运算的结果。算术操作符的返回结果数据类型依赖于它的操作数的类型:如果把两个整数相加,结果是整数。Java的操作符可以分为以下几类:算术操作符Java语言支持所有浮点数和整数的各种算术运算,包括+、-、*、/,%为取余操作符。下表为一元操作符:操作符用法描述+op1 + op2 把op1和op2 相加-op1 - op2 从op1减去op2 *op1 * op2 op1乘以op2 /op1 / op2 op1除以op2 %op1 % op2 op1被op2除的余 +和-也可以作为一元操作符:操作符用法描述+ +op 如果是byte、short或char,就提升为int
27、 - -op 取负值+和-的用法如下:操作符用法描述+ op+ 给op加1,在加1前赋值+ +op 给op加1,在加1后赋值- op- 给op减1,在减1前赋值- -op 给op减1,在减1后赋值关系和条件操作符关系操作符:操作符用法返回真,如果. op1 op2 op1 大于op2 = op1 = op2 op1大于或等于op2 op1 op2 op1 小于 op2 = op1 op1 op2 右移op1 op2位 op1 op1 op2 右移op1 op2位 (无符号移位) & op1 & op2 位与| op1 | op2 位或 op1 op2 位异或 op2 位余 赋值操作符操作符用法
28、等价于+= op1 += op2 op1 = op1 + op2 -= op1 -= op2 op1 = op1 - op2 *= op1 *= op2 op1 = op1 * op2 /= op1 /= op2 op1 = op1 / op2 %= op1 %= op2 op1 = op1 % op2 &= op1 &= op2 op1 = op1 & op2 |= op1 |= op2 op1 = op1 | op2 = op1 = op2 op1 = op1 op2 = op1 = op2 op1 = op1 = op1 = op2 op1 = op1 op2 = op1 = op2 o
29、p1 = op1 op2 第四页:表达式 表达式有双重功能:执行表达式的运算和返回值。下表说明了Java操作符的优先级:后缀操作符 . (params) expr+ expr-一元操作符+expr -expr +expr -expr !新建new (type)expr乘除* / %加减+ -移位 关系 = instanceof等= !=位与&位异或位同或|逻辑与&逻辑或|条件? :赋值= += -= *= /= %= &= = |= = =第四天 Java根底知识流程控制语句第五页:流程控制 Java中的流程控制语句包括:语句关键字判断if-else, switch-case 循环for, w
30、hile, do-while 异常处理try-catch-finally, throw 其它break, continue, label: , return if-else语句Java的if-else语句与C的相似,可参看下面的例子程序:int testscore;char grade;if (testscore = 90) grade = A; else if (testscore = 80) grade = B; else if (testscore = 70) grade = C; else if (testscore = 60) grade = D; else grade = F;sw
31、ith语句switch语句基于表达式的值执行不同的语句,下面的例子是根据month的值执行不同的打印语句的程序段:int month;. . .switch (month) case 1: System.out.println(January); break;case 2: System.out.println(February); break;case 3: System.out.println(March); break;case 4: System.out.println(April); break;case 5: System.out.println(May); break;case
32、6: System.out.println(June); break;case 7: System.out.println(July); break;case 8: System.out.println(August); break;case 9: System.out.println(September); break;case 10:System.out.println(October); break;case 11:System.out.println(November); break;case 12:System.out.println(December); break;循环语句有两种
33、循环语句:for循环和do-while循环。for循环经常用在数组元素或字符串中字符的循环中,如:/ a is an array of some kind. . .int i;int length = a.length;for (i = 0; i length; i+) . . . / do something to the i th element of a . . .for循环的一般形式是: for (初始化; 结束条件; 增量) 语句do-while是另一种循环方式:do 语句 while (布尔表达式);在满足“布尔表达式的情况下重复执行“语句。异常处理语句:将在后续课程中讲解。第六页
34、:数组和字符串 Java通过数组对象收集和管理多个值的集合,也可以通过String对象管理多个字符组成的数据。数组在使用数组前要定义之,数组的定义由两局部组成:数组的类型和数组名。数组中的元素的数据类型必须是相同的。下面是一个整数数组的定义:int arrayOfInts;下面是一个包含10个整数的数组:int arrayOfInts = new int10一般来说,创立数组的格式如下:元素类型 数组名 = new 元素类型数组大小字符串一系列的字符数据称为字符串,由Java环境String类来实现。字符串的定义如下:String args它定义了一个包含字符串对象的名为args的数组。字符串
35、的连接可以用“+很容易地连接字符串。例如:Counted + count + chars.上面表达式中的count在连接时被转换成字符串。第四天 类第一页:类的简介 下面是一段代表2D空间的点的称为SimplePoint的类的代码:public class SimplePoint public int x = 0; public int y = 0;这个代码段定义了一个类 - SimplePoint。这个类包含两个整数成员变量,x和y。x和y的定义前的关键字public意味着任何其它类都可以访问这两个成员。可以通过初始化一个类来建立对象。当建立一个新的SimplePoint对象时,就为对象和它
36、的成员x和y分配了空间。同时,对象内的x和y被初始化为0,因为这两个成员在定义时被赋值为0。下面是一个类SimpleRectangle,代表一个2D空间中的矩形:public class SimpleRectangle public int width = 0; public int height = 0; public SimplePoint origin = new SimplePoint();这段代码定义了类SimpleRectangle,包含两个整数成员,width和height。类SimpleRectangle中也包含了另一个成员,origin,它的数据类型是SimplePoint。
37、类名SimplePoint在变量定义中作为变量类型出现。在可以用原始数据类型的地方都可以使用类名。和width是一个整数,height是一个整数一样,origin是一个SimplePoint。另一方面,SimpleRectangle对象有一个SimplePoint。当建立新的SimpleRectangle对象时,为对象和它的成员分配空间,成员按照它们的定义初始化。有趣的是,origin成员初始化建立了有代码new SimplePoint()的SimplePoint对象:上图显示了原始数据类型和参考数据类型的区别。width和height是整数,并且完全包含在SimpleRectangle中。另
38、一方面,origin只是简单地指向一个SimplePoint对象。SimplePoint和SimpleRectangle对象是它们的类的实现。这两者都提供了初始化它们的成员的机制。另外,SimpleRectangle能提供计算它的面积的方法,而且因为SimpleRectangle创立时建立了一个SimplePoint,类应该提供当SimpleRectangle去除时SimplePoint也去除的方式。于是,有一个SimplePoint的新的版本,称为Point,包含一个可以初始化新的Point的构造函数:public class Point public int x = 0; public i
39、nt y = 0;/ a constructor! public Point(int x, int y) this.x = x;this.y = y; 现在,当你建立一个Point时,可以象下面这样初始化:new Point(44, 78)44和78的值被传递给构造函数,然后象下面这样赋值给新的Point对象的成员x和y:下面是SimpleRectangle的一个新版本,称为Rectangle,包含四个构造函数,一个用来“移动矩形;一个计算矩形的面积;一个finalize方法去除对象:public class Rectangle public int width = 0; public int
40、 height = 0; public Point origin;/ four constructors public Rectangle() origin = new Point(0, 0); public Rectangle(Point p) origin = p; public Rectangle(int w, int h) this(new Point(0, 0), w, h); public Rectangle(Point p, int w, int h) origin = p;width = w;height = h; / a method for moving the recta
41、ngle public void move(int x, int y) origin.x = x;origin.y = y; / a method for computing the area / of the rectangle public int area() return width * height; / clean up! protected void finalize() throws Throwable origin = null;super.finalize(); 这四个构造函数允许不同的类型和初始化。可以建立一个新的Rectangle然后为所有成员提供缺省值,或者创立对象时初始化origin、width和height的值。第二页:对象的生命周期 典型地,一个Java程序可以从类中建立很多对象。这些对象通过互相发送消息相互交互。通过这些对象交互,Java程序可以实现GUI,运行动画或通过网络接收和发送信息。一旦一个对象完成了它的工作,就被垃圾收集,它的资源可以被其它对象使用。下面是对象生命周期的三个阶段:创立对象在Java中,通过建立