Java语言基础教程410_第1页
Java语言基础教程410_第2页
Java语言基础教程410_第3页
Java语言基础教程410_第4页
Java语言基础教程410_第5页
已阅读5页,还剩405页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java语言根底教程第一章概述

第二章Java语言语法根底

第三章对象与类

第四章继承和多态

第五章抽象类接口与内部类

第六章数组、字符串及容器

第七章异常处理

第八章JavaIO系统

第九章多线程

第十章图形用户界面第1章概述面向对象程序设计从计算机诞生到现在,程序设计语言从最初的机器语言、汇编语言到后来面向过程的结构化高级语言,最后开展到面向对象的程序设计语言。在这个过程中,程序员逐步摆脱了机器的层面,可以在更抽象的层面上表达程序设计意图。面向过程程序设计的中心思想是用计算机能够理解的逻辑来描述和表达待解决的问题及其具体的解决过程。数据结构、算法是面向过程问题求解的核心。面向过程程序设计可以精确、完备地描述具体的求解过程,但却缺乏以把一个包含了多个相互关联过程的复杂系统表述清楚,而面向对象程序设计那么可以胜任这项工作。什么是面向对象程序设计面向对象程序设计〔Object—OrientedProgramming,OOP〕代表了一种全新的程序设计思路和观察、处理问题的方法。面向对象就是将世界看作是由一系列彼此关联、相互之间能够通信的对象所组成的,它将现实世界中实体反映到程序中,这样就可以用编程语言来表达这个世界了。所谓对象是一种看问题的观点,是对现实世界中各种实体的一种抽象,它是现实世界中某个具体的物理实体在计算机逻辑中的映射和表达。对象具有自己的状态和行为,通过对消息的反映来实现一定的功能。OOP的根本特征1.封装封装就是指利用抽象数据类型将数据及对数据的操作封装在一起。在OOP中,抽象数据类型是用类(class)这种结构来代表的,类是根本的封装单元。2.继承继承是OOP中最突出的特征之一,它是一种基于已有类创立新类的机制。通过继承机制,一个新类可以通过对已有类进行修改和扩充来实现,新类拥有已有类的所有成员变量和成员方法,而且还可以修改现有的成员和添加新的成员。3.多态多态也称作动态绑定、后期绑定或运行时绑定。继承允许将对象视为它自己本身的类型或其基类型来处理,因为它允许将多种类型(从同一基类导出的)视为同一类型。而多态那么允许一种类型表现出与其他相似类型之间的区别。

OOP的优势1.简单性由于软件对象可以对现实世界中的真实对象建模,所以减少了程序的复杂度,使得程序结构变得既清晰又简单。2.模块性每个对象可构成一个单独的模块,该模块的内部工作方式与系统的其他局部相别离。模块性是OOP具有可重用性和可扩展性的根底。3.可重用可重用性是指我们在一个工程中开发的模块,不仅能够在这个工程中使用,而且可以重复的在其他工程中使用。4.可扩展可扩展性是对现在应用软件提出的又一个重要要求,即要求应用软件能够很方便、容易地进行扩充和修改。了解Java

Java是Sun公司推出的新一代面向对象的编程语言。自从1996年初Java1.0版的正式发表,就迅速引起了整个计算机界的高度关注。由于Java提供了强大的图形、图像、音频、视频、多线程和网络交互能力,它已经成为当今推广最快的最为流行的网络编程语言。Java的出现引起了软件开发的重大变革,成为推动IT业蓬勃开展的最新动力。它的出现对整个计算机软件业的开展产生了重大而深远的影响。

Java的特点◆简单◆面向对象◆平台无关性◆动态◆分布式◆多线程◆健壮性◆垃圾回收机制Java虚拟机Java虚拟机〔JavaVirtualMachine,JVM〕是用软件模拟实现的虚拟计算机。它定义了指令集、存放器集、类文件结构栈、垃圾收集堆、内存区域等组件,提供了跨平台能力的根底框架。在JVM上,有一个Java解释器用来解释Java编译器编译后的程序。程序员在编写完程序后,通过Java编译器将Java源程序编译为字节代码,字节代码是一种与平台无关的文件格式,它能够被Java解释器来执行。任何一台机器只要安装了Java解释器,就可以运行这个程序,而不管字节代码是在何种平台上生成的。Java的核心技术1.JavaServletServlet是效劳器端的Java小程序,Servlet全部由Java编写并且生成Html文档,它扩展了Web效劳器的功能。当客户端发送请求时,效劳器端便开始执行Servlet程序。2.JDBCJDBC(JavaDataBaseConnectivity)为访问不同的数据库提供了统一的途径。像ODBC一样,JDBC对开发者屏蔽了一些细节问题,使得JDBC对数据库的访问也具有平台无关性。3.JavaBean和EJBJavaBean实际上是用Java写的控件,类似于微软的ActiveX。EJB是企业级的JavaBean。它们提供了一个框架来开发和实施分布式商务逻辑,从而显著地简化了具有可伸缩性和高度复杂性的企业级应用的开发。4.JSPJSP(JavaServerPages)是Sun公司1999年推出的一种动态网页技术标准,是一种运行于Web效劳器端的脚本语言。JSP和Microsoft的ASP(ActiveServerPages)技术相似,不同的是编程语言:ASP采用VBScript,JSP采用Java。5.XMLXML(eXtensibleMarkupLanguage)是一种可以定义标记的语言,主要用于在不同的商务过程中共享数据。虽然XML的开展和Java是相互独立的,但它们的共同目标都是平台无关性。将Java与XML组和可以得到一个完美的具有平台独立性的解决方案。

Java开发环境的搭建Java开发的核心就是JDK。JDK的全称是Java开发工具包〔JavaDeveplepmentKit〕,它是由Java的开发工具、运行环境以及Java根底类库所组成的。JDK是Java开发所必不可少的一个工具。我们可以在Sun公司的网站://上下载JDK的安装程序。根据应用环境的不同,JDK可以分为三个不同的版本:J2SE:Java2StandardEdition,用于普通标准应用程序的开发;J2EE:Java2EnterpriseEdition,用于企业级应用程序的开发;J2ME:Java2MicroEdition,用于移动设备、嵌入式设备上应用程序的开发。JDK和帮助文档的安装JDK的安装和其它应用程序的安装方式相同,这里不再赘述。我们还要在Sun公司网站上下载JDK帮助文档的压缩包,它是我们了解JDK的最直接最有效的途径。下载完成后可以将其解压缩到JDK安装目录下的docs子目录中,然后翻开其中的index.html链接,就可以浏览JDK帮助文档了。查看和设置环境变量1.查看环境变量右键点击“我的电脑〞—>“属性〞—>“高级〞—>“环境变量〞—>“系统变量〞2.设置环境变量path变量的作用指定我们执行的命令程序所在的目录。要将其设置为JDK安装目录下bin子目录所在的路径。classpath变量的作用是指定Java虚拟机要执行的类所在的目录。要将其设置为用户定义的类所在目录的路径,它的值可以有多个。Java集成开发环境目前Java开发领域的各种集成开发环境(IntegrationDeveloperEnvironment,IDE〕呈现出百花齐放的局面,下面我们介绍三种常用的Java集成开发环境:JCreator,JBuilder和Eclipse。JCreator简介◆优点:小巧实用缺点:在J2EE开发、EJB、WebServices等方面有明显的缺乏◆JDK和帮助文档的设定:安装时设定和安装后设定◆JCreator的工程〔Project〕和工作空间〔Workspace〕JCreator利用工程管理相应的源文件,一个工程由多个Java源文件和其他一些文件组成,Jcreator中工程文件的扩展名为.jcp。JCreator的工作空间用来管理工程,一个工作空间中可以包含多个工程,JCreator中工作空间文件的扩展名为.jcw。◆JCreator编辑界面的组成文件视图、类视图和包视图、代码视图、输出视图以及编译按钮◆利用JCreator进行开发的步骤JBuilder简介JBuilder是Borland公司开发的一套Java集成开发环境。利用JBuilder,可以方便的编写、调试、运行Java程序,特别是图形界面的程序。JBuilder的特点◆支持Swing、JSP、servlets、EJB、WebService、XML等最新的Java技术;◆集成了多种主流效劳器,可以快速开发企业应用;◆能用Servlets和JSP开发动态Web应用;◆开放式集成开发环境框架,可以将第三方工具良好地集成进自身环境之中,从而展IDE功能;◆JBuilder是100%的Java开发工具,对Windows、Linux与Solaris平台上的开发提供跨平台支持;◆提供了团队开发功能,集成了多种版本控制系统;◆引入了快速生成工程的UML(UnifiedModelingLanguage,即统一建模语言)模型。JBuilder2006的新特性JBuilder2006是专为加速企业级Java应用而设计的。它基于Eclipse平台,因此具有极强的灵活性和可扩展性。JBuilder2006自带JDK1.5,它集成了几乎所有的Java技术,是全球领先的Java集成开发环境。对等协作功能是JBuilder2006中最大的新特性。对等协作功能可以实现对等伙伴之间的通信。此外,还包括共享调试、共享编辑、平安管理及远程访问等。这些功能大大降低了分布式团队的协作本钱和难度,提高了软件的开发效率和开发质量。JBuilder应用浏览器启动JBuilder2006集成开发环境,首先呈现的用户面前的开发界面称为JBuilder应用浏览器(AppBrowser),它有主菜单、工具栏、状态栏、工程视图、结构视图、代码视图、消息视图和调试器等几局部组成,我们可以在一个应用浏览器窗口中实现大局部的开发功能,包括代码编辑、可视化设计、编译、调试等操作。Eclipse简介在目前所有的IDE中,Eclipse可以说是最有开展前途的产品之一。Eclipse是一个开放源代码的、与NetBeans和BorlandJbuilder类似的一种基于Java的可扩展的开发平台。我们可以进入Eclipse的官方网站://,点击Downloads,下载一个Eclipse的压缩包。目前最新的版本为,但是版本的多国语言包还没有出来,所以我们可以下载一个稍早一点的版本Eclipse的安装和运行安装Eclipse的步骤非常简单,只需将下载的压缩包直接解压到你喜欢的路径即可。然后将多国语言包解压并将解压出来的plugins文件夹和features文件夹去覆盖eclipse文件夹下的同名文件夹即可。在启动Eclipse之前,需要首先安装好JDK,并设置好path环境变量。安装并设置好JDK后,我们再次启动Eclipse,进入欢送界面之前首先要选择工作空间。Eclipse的缺省欢送界面中有五个按钮,分别是“概述〞、“新增内容〞、“样本〞、“教程〞和“工作台〞。我们可以点击位于界面右方的“工作台〞按钮,进入工作台界面。Eclipse工作台窗口由多个窗格组成,窗格集合称为透视(perspective)。默认的透视图是Java透视图,此外还有CVS资源库研究透视图、Java类型层次结构透视图、Java浏览透视图和插件开发透视图等。我们还可以建立多个工作台窗口,并且能够定制和复位透视图。Java透视图中还包括多个视图,默认的有包资源管理器、层次结构、大纲、问题、Javadoc和声明,此外还有Ant、导航器、进度和错误日志等多个视图。Eclipse的插件体系结构Eclipse最有魅力的地方就在于它的插件体系结构。就其本身而言,它只是一个框架和一组效劳,用于通过插件组件构建开发环境。在Eclipse中实现的绝大局部功能是由相应的插件完成的,它附带了一个标准的插件集。Eclipse的多国语言包其实就是一个插件,甚至用来开发Java程序的JDT(JavaDevelopmentTools),也只不过是Eclipse系统中的一个普通插件而已。虽然大多数用户只是将Eclipse当作JavaIDE来使用,但Eclipse的目标不仅限于此,通过开发插件,它能扩展到任何语言的开发,甚至能成为绘图的工具Eclipse已经开始提供C语言开发的功能插件,例如CDT(CDevelopmentTools)。另外,Eclipse还包括插件开发环境〔Plug-inDevelopmentEnvironment,PDE〕,这个组件主要针对希望扩展Eclipse的软件开发人员,可以利用它开发自己的功能插件,同时也可以通过开发新的插件扩展现有插件的功能。第2章Java语言语法根底Java是一种跨平台的面向对象语言,利用该语言可以生成独立于平台的应用程序。Java语言具有众多优点,如面向对象、可移植、与硬件无关等。我们将介绍Java语言最根本的内容,先从Java编程根底开始,介绍Java语言的根本语法然后,介绍几种常用算法的例如,强化对Java语言的认识。2.1、Java标识符、关键字、注释与分隔符2.2、Java的数据类型2.3、Java运算符和表达式2.4、Java控制结构2.5、小结2.6、习题第2章主要内容标识符与关键字注释分隔符2.1、Java标识符、关键字、注释与分隔符程序员对程序中的各个元素加以命名时使用的命名记号称为标识符〔identifier〕包括:类名、变量名、常量名、方法名、… Java语言中,标识符是以字母,下划线〔_〕,美元符($)开始的一个字符序列,后面可以跟字母,下划线,美元符,数字。合法的标识符 keywordsjavaNameJava_Namesys_value$javaJava123非法的标识符 2mail java# classcharint标识符与关键字具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为关键字。

abstractbreakbytebooleancatchcaseclasscharcontinuedefaultdoubledoelseextendsfalsefinalfloatforfinally ifimportimplementsintinterfaceinstanceoflonglengthnativenewnullpackageprivateprotectedpublicfinalreturnswitchsynchronizedshortstaticsupertrytruethisthrowthrowsthreadsafetransientvoidwhile标识符与关键字在Java中,true、false和null都是小写的。区别于C++中大写的TRUE、FALSE和NULL。所有的数据类型所占用的字节数都是固定的,并且和实现无关的,因此在Java中没有sizeof操作符。不必死记这些关键词,当理解每个关键词的含义后,自然就记住了所有的关键词。标识符与关键字举例://单行注释,简单的解释语句含义./*多行注释,用来说明更多的内容,包括算法等.……*//**Java文档注释,可以通过javadoc生*成类和接口的HTML格式的帮助文档.*这种注释有其特殊的格式〔参见相关文档〕*/注释分隔符Java中分隔符有空格、逗号、分号及行结束符,并且规定任意两个相邻标识符、数字、保存字或两个语句之间必须至少有一个分隔符,以便编译程序能识别。2.2、Java的数据类型2.2.1Java根本数据类型〔PrimaryDataTypes〕常量〔Constant〕和变量〔Variable〕常量〔Constant〕变量〔Variable〕数据类型的转换所有根本类型所占的位数都是确定的,并不因操作系统的不同而不同。所有根本类型的关键词都是小写的。数据类型

所占位数

数的范围

char 16 0~65535byte

8

-27~27-1short 16 -215~215-1 int 32 -231~231-1 long 64 -263~263-1 float 32 3.4e-038~3.4e+038double 64 1.7e-308~1.7e+3082.2.1Java根本数据类型布尔型数据只有两个值true和false,且它们不对应于任何整数值 布尔型变量的定义如: booleanb=true; 布尔型数据只能参与逻辑关系运算:&&||==!=!例如:booleanb1;booleanb2=true;b=!b2;booleanb=(b1&&b2)!=false;2.2.1布尔类型(boolean)字符型数据代表16位的Unicode字符字符常量是用单引号括起来的一个字符‘a’‘B’‘\n’‘\u0030’字符型数据的取值范围为0~65535或者说\u0000~\uFFFF\u0000为缺省值例如charc1; \\缺省值为0charc2=‘0’; \\赋初值为字符‘0’charc3=32; \\用整数赋初值为空格2.2.1字符类型(char)特殊字符的常量表示法:反斜线〔Backslash〕 ‘\\’退格〔Backspace〕 ‘\b’回车〔Carriagereturn〕 ‘\r’进纸符〔Formfeed〕 ‘\f’制表符〔Formfeed〕 ‘\t’换行〔Newline〕 ‘\n’单引号〔Singlequote〕 ‘\’’八进制数〔‘\0’~‘\377’〕 ‘\DDD’Unicode字符 ‘\uHHHH’2.2.1字符类型(char)整型常量1.十进制整数 如123,-456,02.八进制整数 以0开头,如0123表示十进制数83,-011表示十进制数-9。3.十六进制整数 以0x或0X开头,如0x123表示十进制数291,-0X12表示十进制数-18。整型变量类型为byte、short、int或long,byte在机器中占8位,short占16位,int占32位,long占64位。整型变量的定义如:

intx=123; //指定变量x为int型,且赋初值为123byteb=8;shorts=10;longy=123L;longz=123l;2.2.1整数类型(byte,short,int,long)64位长整数以l或L结尾:12l,-343L,

0xfffffffffL1L<<32等于4294967296L1<<32等于0没有以l或L结尾的数字,根据其实际值所属范围,可以被用作byte,short,或int型整数以l或L结尾的数字,无论其实际值所属范围怎样,都被用作long型整数2.2.1整数类型(byte,short,int,long)例如byteb1; \\缺省值为0byteb2=127; \\赋初值为127shorts1=(short)(b1+b2);\\强制类型转换shorts2=(short)(b1+123)\\强制类型转换intn=b1+b2; \\不需要强制类型转换longl1=2343; \\不需要强制类型转换longl2=4294967296L; \\必须用L或l结尾longl3=65536*63356; \\乘法运算越界,l3为0longl4=65536L*63356; \\l4为4294967296L2.2.1整数类型(byte,short,int,long)实型常量1.十进制数形式 由数字和小数点组成,且必须有小数点,如0.123,.123,123.,123.02.科学计数法形式 如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数。32位浮点数形式:0.23f,1.23E-4f,

.18F2.2.1浮点数类型,实型(float,double)实型变量类型为float或double,float在机器中占32位,double占64位。实型变量的定义如:doubled1=127.0; \\赋初值为127doubled2=127; \\赋初值为127floatf1=127.0f; \\必须在数字后加f或Ffloatf2=4.0e38f; \\错误!32位浮点数不能超过 \\3.4028234663852886e38floatf3=(float)d1; \\必须强制类型转换浮点数类型,实型(float,double)

publicclassAssign{publicstaticvoidmain(String[]args){intx,y;byteb=3;floatz=1.234f;doublew=1.234;booleanflag=true;charc;c=‘a‘;x=120;y=30;

}}使用举例Java中的常量值是用文字串表示的,它区分为不同的类型,如整型常量123,实型常量1.23,字符常量‘a’,布尔常量true、false以及字符串常量"Thisisalanguage."。与C、C++不同,Java中不能通过#define命令把一个标识符定义为常量,而是用关键字final来定义,定义常量的一般格式为:final类型常量标识符=常数值;finalintMAX_NUM=100;finaldoublePI=3.1415926;常量和变量程序中的根本存储单元,其定义包括变量名、变量类型和作用域几个局部,定义格式为:类型变量名=值;intn1=3,n2=4;Java中变量的缺省初值都是确定的:布尔变量的初值为:false整数变量的初值为:0浮点数变量的初值为:0.0引用〔复合〕变量的初值为:null在方法实现中定义的变量必须显式的初始化。变量的作用域指可访问变量的一段代码,在程序中不同的地方声明的变量具有不同的作用域:局部变量、类变量、方法参数、例外处理参数。在一定的作用域内,变量名必须唯一。常量和变量自动类型转换整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级:低>高byte,short,char—>int—>long—>float—>double操作数1类型

操作数2类型

转换后的类型byte、short、char int int byte、short、char、int long long byte、short、char、int、long float float byte、short、char、int、long、float double double数据类型的转换数据类型转换必须满足如下规那么:不能对boolean类型进行类型转换。不能把对象类型转换成不相关类的对象。在把容量大的类型转换为容量小的类型时必须使用强制类型转换。转换过程中可能导致溢出或损失精度inti=8;byteb=(byte)i;(byte)255==-1 (byte)0x5634==0x34浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入(int)23.7==23 (int)-45.89f==-45数据类型的转换优先级、结合性以及单/双目运算算术运算符关系运算符逻辑运算符位运算符赋值运算符条件运算符其他运算符2.3Java运算符和表达式优先级、结合性以及单/双目运算1〕 .,[],() 9〕 &2〕 ++,--,!,~,instanceof 10〕 ^3〕 new(type) 11〕 |4〕 *,/,% 12〕 &&5〕 +,- 13〕 ||6〕 >>,>>>,<< 14〕 ?:7〕 >,<,>=,<= 15〕 =,+=,-=,*=,/=,%=,^=8〕 ==,!= 16〕 &=,|=,<<=,>>=,>>>=优先级、结合性以及单/双目运算〔1〕运算符算术运算符:+,―,*,/,%,++,――关系运算符:>,<,>=,<=,==,!=布尔逻辑运算符:!,&&,||位运算符:>>,<<,>>>,&,|,^,~赋值运算符:=,及其扩展赋值运算符如+=,―=,*=,/=等。条件运算符:?:Java运算符和表达式其它分量运算符

·,下标运算符

[],实例运算符instanceof,内存分配运算符new,强制类型转换运算符(类型),方法调用运算符

()…由于数据类型的长度是确定的,所以没有长度运算符sizeof。Java运算符和表达式〔2〕表达式表达式是由操作数和运算符按一定的语法形式组成的符号序列。一个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值;表达式的值还可以用作其他运算的操作数,形成更复杂的表达式。例: x num1+num2 a*(b+c)+d 3.14 x<=(y+z) x&&y||zJava运算符和表达式2.4、Java控制结构2.4.1选择语句:if-else,switch-case循环语句:while,do-while,for跳转语句:

continue,break,return if(boolean-expression1){ statements1;} elseif(boolean-expression2){statements2;}…else{statementsN;}2.4.1选择语句:if-else布尔表达式boolean-expression是任意一个返回布尔数据类型的表达式,而且必须是〔比C或C++要严格〕。与C或C++一样,每个单一语句后面都要有分号。为了增强程序的可读性,应将if或else后的语句用{}括起来。else子句是任选的,不能单独作为语句使用,它必须和if语句配对使用,并且总是与离它最近的if配对。inti1=123;inti2=456;if(i1>i2){System.out.println(“Thebiggeroneis:〞+i1);}else{System.out.println(“Thebiggeroneis:〞+i2);}2.4.1选择语句:if-else switch(expression)

{ casevalue1:

{statements1; break;

}

…… casevalueN:

{ statementsN; break;

}

[default: { defaultStatements; }] }2.4.1选择语句:switch表达式expression的返回值类型必须是这几种类型之一:int、byte、char、short。case子句中的值valueI必须是常量,而且所有case子句中的值应是不同的。default子句是任选的。break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。〔如果某个case分支后没有break语句,程序将不再做比较而执行下一个分支。〕switch语句的功能可以用if-else语句来实现,但某些情况下,使用switch语句更简炼。2.4.1选择语句:switchinta=100;intb=20;intc;charoper=‘+’;switch(oper){case‘+’:{c=a+b;break;}case‘-’:{c=a-b;break;}default:{c=a*b;break;}}2.4.1选择语句:switch循环语句while〔当型循环〕[initialization]//初始化条件while(termination){//循环条件 body;//循环体 [iteration;]//迭代,变更循环条件}当表达式termination为true时,执行{}中的语句,否那么终止循环。tbfalsetrue循环语句:while循环语句do-while〔直到型循环〕[initialization]//初始化条件do{ body;//循环体 [iteration;]//迭代,变更循环条件}while(termination);//循环条件首先执行一遍{}中的语句,当表达式termination为true时,继续执行{}中的语句,否那么终止循环。tbfalsetrue循环语句:do-while循环语句for〔另一种当型循环〕for(initialization;termination;iteration){ body;//循环体}initialization//初始化条件termination//循环条件iteration//迭代,变更循环条件tbodyfalsetrueiterainit循环语句:forfor语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,那么执行循环体中的语句,最后执行迭代局部。完成一次循环后,重新判断终止条件。初始化、终止以及迭代局部都可以为空语句(但分号不能省),三者均为空的时候,相当于一个无限循环。在初始化局部和迭代局部可以使用逗号语句,来进行多个操作。逗号语句是用逗号分隔的语句序列。 for(inti=0,intj=10;i<j;i++,j--) { …… }循环语句:forintn=1,sum=0;while(n<=10){sum=sum+n;n++;}intn=10,sum=0;do{sum+=n;n--;}while(n>0);intsum=0;for(inti=1;i<=10;i++){sum+=i;}while循环do-while循环for循环循环语句continue语句用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于for语句,在进行终止条件的判断前,还要先执行迭代语句。它的格式为:continue;也可以用continue跳转到括号指明的外层循环中,这时的格式为continueouterLable;2.4.3跳转语句:continueouter:for(inti=0;i<10;i++)//外层循环{inner:for(intj=0;j<10;j++)//内层循环{

if(i<j){ ……

continueouter; } ……}//内层循环结束

……}//外层循环结束for(inti=0;i<10;i++){if(i==5){continue;}……}跳转语句:continue在switch语中,break语句用来终止switch语句的执行,使程序从整个switch语句后的第一条语句开始执行。在循环语句中,break用于终止并跳出循环,从紧跟着循环体代码段后的语句执行。在Java中,可以为每个代码块加一个标号,一个代码块通常是用大括号{}括起来的一段代码。加标号的格式为:BlockLabel:{

codeBlock;}break语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块后的第一条语句处执行。

BlockLabel:{

codeBlock;

breakBlockLabel;

codeBlock;}跳转语句:breaka:{//标记代码块a…… b:{ //标记代码块b……c:{//标记代码块c…… breakb; ……//这段语句将不执行 }//代码块c结束…… //这段语句也不执行}//代码块b结束…… //从这段语句开始执行}//代码块a结束跳转语句:breakreturn语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。返回语句有两种格式: returnexpression;//当方法需要返回某种类型数据时 return;//当方法的返回类型为void时单独一条return语句放在方法中间时,会产生编译错误,因为其后的语句将不会执行到。假设真需要退出方法,可以通过将return语句嵌入某些语句〔如if-else〕来使程序在未执行完方法中所有语句时退出。跳转语句:return2.5小结本章介绍Java的各种语法规那么:各种数据类型〔包括简单数据类型和复杂数据类型〕,运算符〔一元运算符,二元运算符,三元运算符以及特殊运算符〕和表达式,流程控制〔条件控制,循环控制,switch多分支控制,break语句,contiune语句等〕。此外,针对具体的数据类型、运算符以及控制语句,我们都给出了相应的实例以供大家更进一步的学习相关内容。练习〔1〕1.以下标识符中,哪些是合法的变量名,哪些是不合法的变量名?〔1〕char〔2〕2abc〔3〕$_isTrue〔4〕i+j〔5〕_istrue〔6〕变量6〔7〕String〔8〕3.141592.判断下面的程序段是否正确,假设有错误,错在哪里,应该如何改正,并且测试改正后的输出果。publicstaticvoidmain(String[]args){ch=‘a’;charch;System.out.println(“ch=〞+ch);}练习〔1〕1.以下标识符中,哪些是合法的变量名,哪些是不合法的变量名?〔1〕char〔2〕2abc〔3〕$_isTrue〔4〕i+j〔5〕_istrue〔6〕变量6〔7〕String〔8〕3.141592.判断下面的程序段是否正确,假设有错误,错在哪里,应该如何改正,并且测试改正后的输出果。publicstaticvoidmain(String[]args){ch=‘a’;charch;System.out.println(“ch=〞+ch);}练习〔2〕3.写出下面程序的运行结果。//第2章习题3,Examplex2_3.javapublicclassExample2_3{publicstaticvoidmain(String[]args){intx=1,a=0,b=0;switch(x){case0:b++;case1:a++;case2:a++,b++;}System.out.prinln(“a=〞+a);System.out.prinln(“b=〞+b);}}4.写出下面表达式的最后运算结果,并且令a=1,b=2,c=3,d=false。〔1〕a+=b--/++c;〔2〕d=!((a>=--b/b++<=c--)&&a==b);〔3〕d=b>c^a!=c;5.编写Java程序,计算小于一个整数的全部素数并输出。6.编写Java程序,计算sum=1!+2!+……+10!。练习〔3〕练习〔4〕7.编写Java程序,输出从公元1990年到2007年所有闰年的年号,每输出两个年号换一行。判断年号是否为闰年的条件是:〔1〕假设年号能被4整除,而不能被100整除,那么是闰年;〔2〕假设年号能被400整除也是闰年。练习〔5〕8.利用for循环编写一个程序,将如以下图案分别打印输出。*************************练习〔6〕9.编写一个方法来计算正方形的面积和周长。10.编写程序找出所有的水仙花数;水仙花数是三位数,它的各位数字的立方和等于这个三位数本身。下课!

第三章对象与类3.1类与对象3.2定义类3.3成员变量的作用域3.4方法重载3.5创立对象3.6构造方法3.7this关键字3.8初始化问题3.9static关键字3.10对象的清理3.11访问控制修饰符3.12具体隐藏实现3.13参数传递3.14总结3.1定义类传统程序设计语言的缺乏数据和对数据的操作相别离面向对象设计的思想什么是对象一切都是对象对象与类的关系类是对象的模版,对象是类的实例3.2定义类类是组成程序的根本单元,定义了自己的类就是定义了要使用的对象的类型。

例:定义一个汽车类:classCar{intcolor;intdoor;intspeed;

voidstart(){…}voidbrake(){…}}

声明一个汽车类的引用变量:CarmyCar;声明类的语法:修饰符class类名称{//成员变量//方法}Java根本数据类型Java数据类型包括根本数据类型和引用类型包装器类型把根本数据类型数据“包装〞成对象从int类型创立一个Integer对象:

intmyInt;IntegermyInteger=newInteger(myInt);从包装对象中取出根本类型值:myInt=myIValue();Java根本数据类型第一个Java程序程序3.1Rectangle.javaclassRectangle{inta,b;intgetArea(){returna*b;}voidlocate(intx,inty){ System.out.println("Thepositions("+x+","+y+")");}

publicstaticvoidmain(Stringargs[]){Rectangler1=newRectangle(); r1.locate(3,4); r1.a=2; r1.b=3; intarea=r1.getArea(); System.out.println("Areaofr1is:"+area); }}第一个Java程序main方法是程序的入口包含main方法的类是Java应用程序的主类一个Java源文件可以包含多个类,但同一个Java源文件只有主类可以声明为publicJava源文件的命名必须与主类同名3.3成员变量的作用域在Java中变量的作用域是由大括号组成的程序块决定在不嵌套的程序块中可以屡次声明相同变量在嵌套的程序块中不允许重复声明同名的变量声明在方法中的变量为局部变量,与实例变量重名的局部变量会覆盖实例变量,其作用域为整个方法体。见程序3.2TestScoping.java作用域举例{intx=1;{inty=2//xy可用}//x可用y超出作用域}合法的声明:{intx=1;}{intx=2;}不合法的嵌套声明:{intx=1;{intx=2;}}3.4方法重载方法重载〔Overload〕是指一个类中可以定义参数列表不同但名字相同的多个方法,调用时,会根据不同的参数列表来选择对应的方法。重载的方法名字必须相同重载的方法参数必须不同当一个重载方法被调用时,Java用参数的类型和〔或〕数量来说明实际调用的重载方法的版本。每个重载方法的参数的类型和〔或〕数量必须是不同的。虽然每个重载方法可以有不同的返回类型,但返回类型并缺乏以区分所使用的是哪个方法。当Java调用一个重载方法时,参数与调用参数匹配的方法被执行。见程序3.3TestOverload.java程序3.4TestOverload1.java被重载的方法必须有不同的参数列表,前面例子区分重载方法的参数采用了或者数量不同,或者类型不同,参数顺序不同虽然也可以重载,但是容易产生歧义。例:程序3.5TestOverload2.javapublicclassTestOverload2{voidprint(inta,floatb){System.out.println("Printintaandfloatb:"+a+""+b);}voidprint(floata,intb){System.out.println("Printfloataandintb:"+a+""+b);}publicstaticvoidmain(String[]args){TestOverload2obj=newTestOverload2();obj.print(1,2);}}3.5创立对象先声名引用变量Rectangler1;然后创立对象赋值给r1:r1=newrectangle();声明引用变量的同时产生一个对象赋给它:Rectangler1=newRectangle();引用变量r1“代表〞了一个矩形对象,我们就可以使用引用变量加句点形式访问对象的成员了在Java中根本类型变量存储在栈的内存结构中intx=10;booleany=true;引用型变量内储存着对象实例的地址声明两个矩形类引用变量r1、r2:Rectangler1,r2;r1、r2没有指向任何对象实例,系统默认赋初值null产生一个新对象实例并赋值给r1:r1=newrectangle();r2=r1;在java中字符串类型数据是按照对象来处理的两种方式显式和隐式创立Java为了加快程序的执行速度,把隐式创立的字符串对象放在栈中一个特殊区域—字符串池〔StringPool〕中,相同内容的字符串对象只保存一份。Stringstr1=newString(“Hellojava!〞);Stringstr2=〞HelloJava!〞程序3.6TestString.javapublicclassTestString{publicstaticvoidmain(String[]args){Stringstr1=newString("HelloJava!");Stringstr2=str1;Stringstr3="HelloJava!";Stringstr4="HelloJava!";

System.out.println(str1==str2);System.out.println(str1==str3);System.out.println(str3==str4);}}输出结果:truefalsetrue3.6构造方法构造方法是创立对象时调用的特殊方法方法名必须与要创立对象的类名相同不允许声明返回类型,即使声明为void也是不正确的如果类中并没有定义构造方法,Java会自动地给你添加一个无参的缺省构造方法可以自定义重载的多个构造方法,在创立对象时使实例多样化。例:程序3.7Student.java3.7this关键字publicStudent(intage){ System.out.println("Invokeconstructorwithage."); age=age;}以上构造方法中出现age=age的奇怪语句,this关键字用来解决这个问题。this引用指向的是其本身所在方法的当前对象。以上构造方法假设采用this关键字那么修改为:publicStudent(intage){ System.out.println("Invokeconstructorwithage."); this.age=age;}this.age=age意指把参数age的值赋给类成员变量age。3.8初始化问题如果程序员使用了缺省的构造方法并且没有在类中初始化成员变量,创立对象时系统会对各种类型的成员变量按表3.3自动进行初始化赋予一个默认值。用构造方法完成初始化可以使用自定义的构造方法在方法体内初始化成员可以在构造方法中使用this()调用其它构造方法以减少代码冗余构造方法内this必须在第一行只能调用一次this〔〕不允许调用两次this〔〕只能在构造器中使用,其他成员方法不得调用。

classStudent{intage;Stringname;publicStudent(){ System.out.println("Creatingdefaultstudent."); System.out.println("Defaultage="+age); System.out.println("Defaultname="+name); }publicStudent(inta,Stringn){ this(a);//必须在第一句 name=n; System.out.println("Initializestudentwithnameandage.");}publicStudent(intage){ this.age=age; System.out.println("Initializestudentwithage.");}

publicStudent(Stringname){ =name; System.out.println("Initializestudentwithname.");}}publicclassTestThis{publicstaticvoidmain(String[]args){Studentst1=newStudent();newStudent(24,"Jacky");}}程序3.8TestThis.java用构造方法完成初始化可以使用自定义的构造方法在方法体内初始化成员可以在构造方法中使用this()调用其它构造方法以减少代码冗余构造方法内this必须在第一行只能调用一次this〔〕不允许调用两次this〔〕只能在构造器中使用,其他成员方法不得调用。

3.9static关键字声明为static的成员方法和变量在内存中固定只存在一份,也就是说所有类都可以共享使用的声明为静态的成员变量和成员方法在类内部可以直接使用,在类外部可以通过类名加句点的方式直接访问,而不必实例化再使用静态方法内部不能调用非静态方法,因为静态方法本身是不会实例化的;this在静态方法中没有意义3.10对象的清理C语言和c++是通过程序员自己定义对象的生命周期,你必须在适当的时候自己写程序去除不再使用的对象空间Java将释放无用内存空间的任务交给了Java虚拟机,通过垃圾回收器来回收无用对象的内存空间程序员无需强制垃圾回收器立即执行进行去除工作,只有当内存资源不够用时垃圾回收器才开始真正回收空间,所以整个程序过程中垃圾回收器可能不需要工作。什么样的对象将被垃圾回收?classStudent{intage;Stringname;publicStudent(Stringn){ name=n;}publicstaticvoidp(){ Studentst1=newStudent("Peter"); Studentst2=newStudent("Julie"); st1=st2; st2=null;}}publicclassTestGc{publicstaticvoidmain(String[]args){Student.p();}}程序3.9TestGc.java静态方法p中首先创立了两个学生Peter和Julie,然后引用st1指向st2,这时st1和st2同时指向Julie,对象Peter没有引用变量引用,所以处于待回收状态,st2赋空值后仍然有st1指向Julie所以Julie这时还不是垃圾,当方法p()执行完成返回main方法时,局部变量st1和st2超出作用域,结束生命。内存堆中的Peter和Julie都变成了垃圾,处于待回收状态。处于待回收状态只是告诉虚拟机哪些对象是垃圾,并不不知道垃圾回收器什么时候回收他们。当内存资源紧张时,垃圾回收器会及时工作清理这些垃圾。finalize〔〕在某些情况下回收垃圾对象时需要结束与这个对象相关的一些工作,比方说某个对象翻开了一个文件,那么去除这个对象时就需要关闭这个文件,否那么这个文件在垃圾对象被回收以后就无法再编辑和关闭了finalize方法可以完成这些工作。finalize方法在垃圾回收发生之前调用,用来验证回收条件是否成熟,比方你的对象可能还与其他对象联系在一起,这时在finalize方法中设定条件,阻止垃圾回收,使垃圾对象“复活〞。3.11访问控制修饰符类成员修饰符public指定类成员为public时,该类成员在任何类中都可以通过一个该类对象的引用来进行访问,当然该类内部可直接访问。private即声明说这是私有的,指定成员变量或方法为private时,该类成员变为此类的“私有财产〞,只能在该类中访问。defualt即缺省,修饰符为隐含的package,可以在该类中访问,也能够在同一包中的类访问。但在不同包中即使是其子类也无法访问。protected说明该成员是受保护的,可以在该类中访问。同时同一包中的类也可以对其进行访问,不同包的子类也可以进行访问。类修饰符:public、default指定为public时,可以通过import指令对该类进行复用。如果缺省那么是隐含的package访问修饰语,这时只有在相同包里的类才能调用该类。3.12具体隐藏实现

具体隐藏实现是面向对象设计中一个非常重要的概念,通过使用访问控制修饰符,把类中的无须公开的数据与方法封装起来,对外隐藏了类功能的具体实现过程。改变类的功能时不会影响类的使用者,并且提高了程序的平安性与可维护性。通过添加访问器和修改器修改Rectangle类classRectangle{privateinta,b;publicintgetArea(){returna*b;}publicintsetAB(inta,intb){if(a<=0||b<=0)System.out.println(“Erroinput!〞);this.a=a;this.b=b;}}3.13参数传递Java的参数传递都是值传递Java参数传递分为根本类型参数传递与对象类型〔即引用类型〕参数传递。根本类型参数值传递意味着当将一个实参值传递给一个方法时,如果方法修改了该参数,改变的是形参,而原始的实参的值保持不变。引用类型变量传递将一个参数传递给一个方法后,方法接收的是一个引用变量的值,这个值某个对象的内存地址值。引用变量的参数传递仍然是值传递。程序3.10TestPass.javaclassStudent{intage;Stringname;publicStudent(inta,Stringn){ age=a; name=n;}}publicclassTestPass{publicstaticvoidchangeAge(intfromAge,inttoAge){ fromAge=toAge; System.out.println("AfterinvokemethodchangeAgefromAgeis:"+toAge);}

publicstaticvoidchangeObjAge(Studentst,inttoAge){ st.age=toAge;}publicstaticvoidmain(String[]args){Studentst1=newStudent(19,"Jacky");changeAge(st1.age,20);System.out.println("AfterinvokemethodchangeAgestudentageis:"+st1.age);changeObjAge(st1,20);System.out.println("AfterinvokemethodchangeObjAgestudentageis:"+st1.age);}}changeObjAge方法通过接受引用变量参数改变了对象的成员值,如果你从此就认为传递了引用变量参数就可以改变对象就大错特错了。以修改后的程序3.10TestPass1.java为例方法调用完毕st完成使命从内存中释放,而原来的st1仍然指向“Jacky〞,“Julie〞没有引用变量再引用它成为垃圾,等待垃圾回收器去除。整个过程“Jacky〞没有发生改变。由此可知,Java的参数传递都是值传递,只要理解了这一点并掌握了内存的变化过程,这样的错误很容易防止。4.8总结面向对象设计是一种更接近人类自然思维的程序设计方法,最重要的就是通过类的定义与使用,类的封装等特性提高程序的复用性。类是封装了相同属性与行为的一类对象的模版,对象就是类的实例,使用new关键字加构造方法的方式创立对象,然后通过引用变量名加点〔.〕运算符来访问对象成员。实例成员变量是属于类的一个对象实例的变量,要使用它必须通过创立类的对象实例然后用引用变量访问它。类属成员变量和方法,即静态成员,用static关键字声明,静态变量和静态方法不依赖于具体实例,可以通过类名直接访问。修饰符指定类、方法和数据的访问方式。public表示任何用户都具有访问权限。Private表示方法和数据成员只能在类内部访问。方法的所有参数传递都是值传递。对于根本类型的参数传递实际值,对于引用类型的参数传递对象的引用。具体隐藏实现是通过设定修改器与访问器方法把类中的数据封装起来,通过这些方法访问类的数据提高了平安性。This是指向类的当前实例的引用,关键字this也能在构造方法中使用,this〔〕调用同一个类的另一个构造方法。创立的对象存储在对内存中,这是一种灵活的存储机制,你不必自己定义对象的生命周期,在适宜的时候垃圾回收器会对垃圾对象进行清理以释放内存空间。第四章继承和多态继承和多态4.1继承根底4.2构造器的调用顺序4.3继承还是组合?4.4Object类4.5toString方法4.6对象的比较4.1继承根底类与类之间还有一种父与子的关系,子类继承父类方法与属性,这个我们就称之为继承子类拥有父类的一些公有的属性和方法,并且子类可能也会有自己的方法和属性除了添加父类中没有的新方法外子类还可以通过重写父类的方法来重定义自己的行为方式继承根底重写与重载不同,重载需要不同的参数来区别相同方法名的方法,重写是发生在子类与父类上,重写父类方法必须与父类的方法名同名同参并且同返回值。当访问修饰符为private时,说明该方法不能被重写,同样当方法具有final关键字时该方法不能被重写。子类虽然重写了父类的某个方法,但仍然需要用到父类的这个方法,这时使用super关键字仍然可以调用父类的方法。程序4.1TestExtends.java例如继承机制程序4.2TestOstrich.javapublicclassTestOstrich{publicstaticvoidmain(String[]args){ Birdostrich1=newOstrich();//向上转型 ostrich1.fly();}}classBird{ publicstaticvoidfly(){ System.out.println("BirdFlying!"); }}classOstrichextendsBird{ publicstaticvoidfly(){ System.out.println("Ican'tfly!"); }}输出结果:BirdFlying!St

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论