还剩27页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
J__A教程第一讲J__a语言概述
41.
2.5j__a平台-不断扩展的计算平台 j__a不仅是编程语言,还是一个__平台,j__a技术给程序员提供了许多工具编译器、解释器、文档生成器和文件打包工具等等同时j__a还是一个程序发布平台,有两种主要的发布环境,首先j__a运行时环境(j__aruntimeenviro__ent,简称JRE)包含了完整的类文件包,其次许多主要的浏览器都提供了j__a解释器和运行时环境目前Sun公司把j__a平台划分成J2EE、J2SE、J2ME三个平台,针对不同的市场目标和设备进行定位J2EE是J__a2EnterpriseEdition,主要目的是为企业计算提供一个应用服务器的运行和__平台J2EE本身是一个开放的标准,任何软件厂商都可以推出自己的符合J2EE标准的产品,使用户可以有多种选择IBM、Oracle、BEA、HP等29家已经推出了自己的产品,其中尤以BEA公司的weglogic产品和IBM公司的websphare最为著名J2EE将逐步发展成为可以与微软的.NET战略相对抗的网络计算平台J2SE是J__a2StandardEdition,主要目的是为台式机和工作站提供一个__和运行的平台我们在学习j__a的过程中,主要是采用J2SE来进行__J2ME是J__a2MicroEdition,主要是面向消费电子产品,为消费电子产品提供一个j__a的运行平台,使得j__a程序能够在__、机顶盒、PDA等产品上运行上述三个j__a平台的关系
1.3一切都是对象
1.
3.1面向过程 面向对象的第一个原则是把数据和对该数据的操作都封装在一个类中,在程序设计时要考虑多个对象及其相互间的关系有些功能并不一定由一个程序段完全实现,可以让其它对象来实现,在本例中就由类__x完成求最大值的功能而面向对象的另外一个好处是实现代码的重复使用,例如其它的程序中如果需要求最大值的功能,只需要通过类__x的对象就可以达到目的但是如果象面向过程的代码段那样把求最大值的算法都实现在该代码段中,则无法复用 早期的编程语言如FORTRAN、C基本上都是面向过程的语言,其编程的主要思路专注于算法的实现例如下面是一个面向过程的求正整数最大值的程序 int__xSoFar=0pri__=1; //最大值__xSoFar的初始值为0,pri__是输入的值 whilepri__0{ //循环输入pri__的值 ifpri____xSoFar //输入的值pri__大于最大值__xSoFar __xSoFar=pri__; //则__xSoFar的值为pri__的值 Stringinput=JoptionPane.showInputDialogEnterthenextpri__; //继续输入pri__ pri__=Double.parseDoubleinput; //把字符串input转换成整数pri__ } System.out.printlnThe__ximumis+__xSoFar;//打印最大值__xSoFar } 该程序段主要实现了求最大值的算法,但是,如果考虑用面向对象的编程,可以是另外一种方式 __x__x=new__x; //__x是类__x的一个对象 whilepri__0{ __x.update__xpri__; //对象__x调用update__x方法,更新最大值 pri__=__x.getPri__;//对象__x调用getPri__获得下一个pri__的值 } System.out.printlnThe__ximumis+__x.get__x;//对象__x调用get__x 方法获得最大值,并打印出来
1.
3.2面向对象 纯粹的面向对象程序设计方法是这样的 1.所有的东西都是对象可以将对象想象成为一种新型变量,它保存着数据,而且还可以对自身数据进行操作例如类__x中保留着数据的最大值,同时还有方法update__x根据新加入的pri__值产生最新的最大值,还有get__x方法返回数据的最大值 2.程序是一大堆对象的组合通过消息传递,各对象知道自己应该做些什么如果需要让对象做些事情,则须向该对象发送一条消息具体来说,可以将消息想象成为一个调用请求,它调用的是从属于目标对象的一个方法例如上面面向对象的程序段应该是属于某个类的,比如说是属于类Shopping,则Shopping中就包含了类__x的对象__x,调用方法update__x就相当于Shopping对象对__x对象发出一条指令update__x,要求对象__x重新计算最大值 3.每个对象都有自己的存储空间可容纳其它对象,或者说通过封装现有的对象,可以产生新型对象因此,尽管对象的概念非常简单,但是经过封装以后却可以在程序中达到任意高的复杂程度 4.每个对象都属于某个类根据语法,每个对象都是某个类的一个实例一个类的最重要的的特征就是能将什么消息发给它?,也就是类本身有哪些操作例如__x是类__x的实例J__A教程第一讲J__a语言概述
51.4构建j__a程序
1.
4.1第一个j__aapplication j__a程序分为j__aapplication(j__a应用程序)和j__aapplet(j__a小应用程序)两种下面让我们编写一个j__a应用程序,它能够利用来自j__a标准库的System对象的多种方法,打印出与当前运行的系统有关的资料其中//代表一种注释方式,表示从这个符号开始到这行结束的所有内容都是注释在每个程序文件的开头,如果这个文件的代码中用到了系统所提供的额外的类,就必须放置一个import语句说它是额外的是指一个特殊的类库j__a.lang会自动导入到每个j__a文件 //这是我们的第一个j__aapplication,该程序保存在文件Property.j__a中 importj__a.util.*;/*下面我们用到了Date和Properties这两个类,是 属于j__a.util这个包的;*/ /*而System和Runtime这两个类,是属于 j__a.lang这个包的*/ publicclassProperty{//程序员给这个类取名为Property publicstaticvoid__inStringargs[]{//__in是类的主方法 System.out.printlnnewDate;//在命令行下面打印出日期 Propertiesp=System.getProperties;//获得系统的Properties对象p p.listSystem.out;//在命令行下打印出p中的各个系统变量的值 System.out.println---MemoryUsage:;/*打印一行字符串---MemoryUsage*/ Runtimert=Runtime.getRuntime;//获得系统的Runtime对象rt System.out.printlnTotalMemory= +rt.totalMemory//打印总内存大小 +FreeMemory= +rt.freeMemory;//打印空闲内存大小 } } 在j__a中,程序都是以类的方式__的,j__a源文件都保存在以j__a为后缀的.j__a文件当中每个可运行的程序都是一个类文件,或者称之为字节码文件,保存在.class文件中而作为一个j__aapplication,类中必须包含主方法,程序的执行是从__in方法开始的,方法头的格式是确定不变的 publicstaticvoid__inStringargs[] 其中关键字public意味着方法可以由外部世界调用__in方法的参数是一个字符串数组args,虽然在本程序中没有用到,但是必须列出来 程序的第一行非常有意思 System.out.printlnnewDate; 打印语句的参数是一个日期对象Date,而创建Date对象的目的就是把它的值发给println语句一旦这个语句执行完毕,Date对象就没用了,而后无用内存回收器会将其收回 第二行中调用了System.getProperties从帮助文档中可知,getProperties是System类的一个静态方法(static方法),由于它是静态的,所以不必创建任何对象就可以调用该方法在第三行,Properties对象有一个名为list的方法,它将自己的全部内容都发给一个PrintStream对象,该对象就是list方法的参数 第四行和第六行是典型的打印语句,其中第六行通过运算符+的重载来连接多个字符串对象,在j__a中只有当+运算符作用于字符串时在能够进行重载但是让我们仔细观察下述语句 System.out.printlnTotalMemory= +rt.totalMemory//打印总内存大小 +FreeMemory= +rt.freeMemory;//打印空闲内存大小 其中,totalMemory和freeMemory返回的是数值,并非String对象如果将一个字符串与一个数值相加,结果会如何?在这种情况下,编译器会自动调用一个toString方法,将该数值(int型或者float型)转换成字符串经过这样处理以后,就可以用+进行字符串连接了 __in的第五行通过调用Runtime的getRuntime方法创建了一个Runtime对象,该对象中包含了内存等信息
1.
4.2j__a程序的编辑 j__a程序的编辑可以使用任何一种文本编辑器,例如UltraEdit、Notepad、Wordpad甚至word,然后只要把编辑好的文件存成.j__a文件当然也可以用一些集成__环境,例如Borland公司的JBuilder,IBM公司的VisualageforJ__a,此外还有cafe、kawa等其它集成__环境下面两幅图分别是用UltraEdit和JBuilder编辑Property.j__a文件的情况 Sun公司为全世界的j__a程序员提供了一个免费的j__a程序__包(J__aDevelopKit,简称JDK),其中包括了j__a编译器命令j__ac,以及j__a执行命令j__a,还有帮助文档生成器命令j__adoc等等所有这些命令都可以在命令行下运行,例如我们要编译上述j__a文件Property.j__a,如果是在windows中进行__,就可以在命令提示符下进行编译,在命令行中敲入j__acProperty.j__a.J__A教程第一讲J__a语言概述6dev.firnow.com时间2010-06-07__许斌编辑Mr.阿布__236[评论]--
1.
4.4j__aapplication的执行 当编译结束以后,在j__a源文件中的每一个类都会生成相应的.class文件,例如上图中就会生成一个Property.class文件,而j__a程序在执行时调用的是.class文件J__aapplication的执行是在命令行下进行的,如果是在windows系统中,就可以命令提示符下敲入j__aPropery进行执行,该j__a命令会启动j__a虚拟机,并读入Property.class文件进行执行 由于该程序的运行结果直接在命令行下进行输出.
1.
4.5第一个j__aapplet j__a程序的另一种形式是j__aapplet,applet没有__in方法,它必须嵌在超文本文件中,在浏览器中进行运行右面这个程序将在浏览器中显示一行字符串. //这是我们的第一个j__aapplet,该程序保存在文件HelloEducation.j__a中 importj__a.awt.Graphics;//在进行显示输出时,需要用到类Graphics的对象; importj__a.applet.Applet;//Applet类是所有的j__aapplet的父类; publicclassHelloEducationextendsApplet{ //程序员给这个类取名为HelloEducation //所有的applet程序都是Applet类的子类 publicStrings; publicvoidinit{ // s=newStringWelcometoTongfangEducation; //生成一个字符串对象 } publicvoidpaintGraphicsg{ g.drawStrings2525; //在浏览器中坐标为(25,25)的位置显示字符串s } } applet程序是从方法init开始执行的,在该方法中完成了对字符串s的初始化工作,而显示功能是在方法paint中执行的paint方法是类Applet的一个成员方法,其参数是图形对象Graphicsg,通过调用对象g的drawString方法就可以显示输出
1.
4.6j__aapplet的执行 j__aapplet程序也是一个类,其编译方式与j__aapplication完全一样,HelloEducation.j__a程序经过编译以后就生成了HelloEducation.class文件j__aapplet的执行方式与j__aapplication完全不同,j__aapplet程序必须嵌入到html文件中才能够执行,因此必须编写相应的html文件下面为HelloEducaiton.html文件的内容htmlappletcode=HelloEducation.classwidth=250height=250/applet/html 然后可以通过JDK所提供的命令appletviewer,在命令行下面执行j__aapplet程序如果是在windows操作系统中,就可以在命令提示符下敲入appletviewerHelloEducation.html 此时系统会弹出另外一个窗口运行该applet程序 applet还可以采用另外一种方式运行,那就是直接在浏览器中打开HelloEducation.html程序,结果如图1_4_6所示在主流的浏览器如IE、Netscape中都包含有j__a虚拟机,负责解释执J__A教程第一讲J__a语言概述
71.5j__a程序规范
1.
5.1j__a源程序结构 一个完整的j__a源程序应该包括下列部分 package语句;//该部分至多只有一句,必须放在源程序的第一句 import语句;/*该部分可以有若干import语句或者没有,必须放在所有的 类定义之前*/ publicclassDefinition;//公共类定义部分,至多只有一个公共类的定义 //j__a语言规定该j__a源程序的文件名必须与该公共类名完全一致 classDefinition;//类定义部分,可以有0个或者多个类定义 inte_____Definition;//接口定义部分,可以有0个或者多个接口定义 例如一个j__a源程序可以是如下结构,该源程序命名为HelloWorldApp.j__a packagej__awork.helloworld;/*把编译生成的所有.class文件放到包 j__awork.helloworld中*/ importj__a.awt.*; //告诉编译器本程序中用到系统的AWT包 importj__awork.new__ntury;/*告诉编译器本程序中用到用户自定义 的包j__awork.new__ntury*/ publicclassHelloWorldApp{......}/*公共类HelloWorldApp的定义, 名字与文件名相同*/ classTheFirstClass{......}//第一个普通类TheFirstClass的定义 classTheSecondClass{......}//第二个普通类TheSecondClass的定义 ......//其它普通类的定义 inte_____TheFirstInte_____{......}/*第一个接口 TheFirstInte_____的定义*/ ......//其它接口定义 package语句由于j__a编译器为每个类生成一个字节码文件,且文件名与类名相同,因此同名的类有可能发生冲突为了解决这一问题,j__a提供包来管理类名空间,包实际提供了一种命名机制和可见性限制机制而在j__a的系统类库中,把功能相似的类放到一个包(package)中,例如所有的图形界面的类都放在j__a.awt这个包中,与网络功能有关的类都放到j__a.net这个包中用户自己编写的类(指.class文件)也应该按照功能放在由程序员自己命名的相应的包中,例如上例中的j__awork.helloworld就是一个包包在实际的实现过程中是与文件系统相对应的,例如j__awork.helloworld所对应的目录是path\j__awork\helloworld,而path是在编译该源程序时指定的比如在命令行中编译上述HelloWorldApp.j__a文件时,可以在命令行中敲入j__ac-df:\j__aprojectHelloWorldApp.j__a,则编译生成的HelloWorldApp.class文件将放在目录f:\j__aproject\j__awork\helloworld\目录下面,此时f:\j__aproj__t相当于path但是如果在编译时不指定path,则生成的.class文件将放在编译时命令行所在的当前目录下面比如在命令行目录f:\j__aproject下敲入编译命令j__acHelloWorldApp.j__a,则生成的HelloWorldApp.class文件将放在目录f:\j__aproject下面,此时的package语句相当于没起作用 但是,如果程序中包含了package语句,则在运行时就必须包含包名例如,HelloWorldApp.j__a程序的第一行语句是packagep
1.p2;编译的时候在命令行下输入j__ac-dpathHelloWorldApp.j__a,则HelloWorldApp.class将放在目录path\p1\p2的下面,这时候运行该程序时有两种方式 第一种在命令行下的path目录下输入字符j__ap
1.p
2.HelloWorldApp 第二种在环境变量classpath中加入目录path,则运行时在任何目录下输入j__ap
1.p
2.HelloWorldApp即可 import语句如果在源程序中用到了除j__a.lang这个包以外的类,无论是系统的类还是自己定义的包中的类,都必须用import语句标识,以通知编译器在编译时找到相应的类文件例如上例中的j__a.awt是系统的包,而j__awork.new__ntury是用户自定义的包比如程序中用到了类Button,而Button是属于包j__a.awt的,在编译时编译器将从目录classpath\j__a\awt中去寻找类Button,classpath是事先设定的环境变量,比如可以设为classpath=.;d:\jdk
1.3\lib\classpath也可以称为类路径,需要提醒大家注意的是,在classpath中往往包含多个路径,用分号隔开例如classpath=.;d:\jdk
1.3\lib\中的第一个分号之前的路径是一个点,表示当前目录,分号后面的路径是d:\jdk
1.3\lib\,表示系统的标准类库目录在编译过程中寻找类时,先从环境变量classpath的第一个目录开始往下找,比如先从当前目录往下找j__a.awt中的类Button时编译器找不着,然后从环境变量classpath的第二个目录开始往下找,就是从系统的标准类库目录d:\jdk
1.3\lib开始往下找j__a.awt的Button这个类,最后就找到了如果要从一个包中引入多个类则在包名后加上.*表示 如果程序中用到了用户自己定义的包中的类,假如在上面程序中要用到j__awork.new__ntury包中的类HelloWorldApp,而包j__awork.new__ntury所对应的目录是f:\j__aproject\j__awork\new__ntury,classpath仍旧是classpath=.;d:\jdk
1.3\lib\,则编译器在编译时将首先从当前目录寻找包j__awork.new__ntury,结果是没有找到;然后又从环境变量classpath的第二个目录d:\jdk
1.3\lib\开始往下找,但是仍然没有找到原因在于包j__awork.new__ntury是放在目录f:\j__aproject下面因此,需要重新设定环境变量classpath,设为classpath=.;d:\jdk
1.3\lib\;f:\j__aproject\所以编译器从f:\j__aproject开始找包j__awork.new__ntury就可以找到 源文件的命名规则如果在源程序中包含有公共类的定义,则该源文件名必须与该公共类的名字完全一致,字母的大小写都必须一样这是j__a语言的一个严格的规定,如果不遵守,在编译时就会出错因此,在一个j__a源程序中至多只能有一个公共类的定义如果源程序中不包含公共类的定义,则该文件名可以任意取名如果在一个源程序中有多个类定义,则在编译时将为每个类生成一个.class文件
1.
5.2j__a编程规范 软件__是一个__协作的过程,程序员之间的代码是经常要进行交换阅读的,因此,j__a源程序有一些约定成俗的命名规定,主要目的是为了提高j__a程序的可读性 包名包名是全小写的名词,中间可以由点分隔开,例如j__a.awt.event; 类名首字母大写,通常由多个单词合成一个类名,要求每个单词的首字母也要大写,例如classHelloWorldApp; 接口名命名规则与类名相同,例如inte_____Collection; 方法名往往由多个单词合成,第一个单词通常为动词,首字母小写,中间的每个单词的首字母都要大写,例如balan__Account, i__uttonPressed; 变量名全小写,一般为名词,例如length; 常量名基本数据类型的常量名为全大写,如果是由多个单词构成,可以用下划线隔开,例如intYEARintWEEK_OF_MONTH;如果是对象类型的常量,则是大小写混合,由大写字母把单词隔开J__A教程第一讲J__a语言概述
81.
5.3j__a帮助文档 j__a中所有类库的介绍都保存在j__a帮助文档中,程序员在编程过程中,必须查阅该帮助文档,了解系统提供的类的功能、成员方法、成员变量等等信息以后,才能够更好的编程同时,j__a__工具包(JDK)提供了j__a、j__ac、j__adoc、appletviewer等命令,在j__a帮助文档中也对此进行了详细的介绍j__a帮助文档是以HTML文件的形式__,通常是__在JDK目录下的docs子目录中的index.html文件所以用浏览器就可以进行查阅例如JDK是__在D:\jdk
1.3目录下面,则用浏览器打开D:\jdk
1.3\docs\index.html文件,就可以看到图1_5_1所示的帮助文档 如果希望查阅JDK的命令,则可以选择ToolDocumentation 此时浏览器就会把j__a、j__ac、j__adoc、appletviewer等命令列出来 但是大多时时候,我们需要查阅的是类库的文档,因此需要在D:\jdk
1.3\docs\index.html文件中选择J__a2PlatformAPISpecification,如图1_5_4中红字所示 然后就进入了详细的类库介绍,如图1_5_5所示
1.
5.4j__a注释 单行注释从//开始到本行结束的内容都是注释,例如 //这是一行单行注释 //则是另一行单行注释 多行注释在/*和*/之间的所有内容都是注释,例如 /*这是一段注释分布在多行之中*/ 文档注释在注释方面j__a提供一种C/C++所不具有的文档注释方式其核心思想是当程序员编完程序以后,可以通过JDK提供的j__adoc命令,生成所编程序的API文档,而该文档中的内容主要就是从文档注释中提取的该API文档以HTML文件的形式出现,与j__a帮助文档的风格与形式完全一致凡是在/**和*/之间的内容都是文档注释例如下面的DocTest.j__a文件 /**这是一个文档注释的例子,主要介绍下面这个类*/ publicclassDocTest{ /**变量注释,下面这个变量主要是充当整数计数*/ publicinti; /**方法注释,下面这个方法的主要功能是计数*/ publicvoidcount{} } 通过在命令行下面运行j__adoc-d.DocTest.j__a,就生成了介绍类DocTest的index.html文件,用浏览器浏览结果,注意到DocTest.j__a文件中的文档注释的内容都出现在该index.html文件中J__A教程第一讲J__a语言概述9--
1.6建立j__a__环境
1.
6.1__J__aDevelopKitJDK Sun公司为所有的j__a程序员提供了一套免费的j__a__和运行环境,取名为J__a2SDK,可以从http://sun.com上进行下载,也可以从同方教育__上下载但是最新的消息和版本必须从Sun的__上才能够得到__的时候可以选择__到任意的硬盘驱动器上,例如__到D:\jdk
1.3目录下通常在JDK目录下有bin、demo、lib、jre等子目录,其中bin目录保存了j__ac、j__a、appletviewer等命令文件,demo目录保存了许多j__a的例子,lib目录保存了j__a的类库文件,jre保存的是j__a的运行时环境
1.
6.2__j__a帮助文档 由于JDK的__程序中并不包含帮助文档,因此也必须从Sun的__上下载进行__通常__在JDK所在目录的docs子目录下面用浏览器打开docs子目录下的index.html文件就可以阅读所有的帮助文档
1.
6.3配置类路径 在__完JDK之后,必须配置类路径classpath和环境变量path,JDK才能够正常运行如果是在windows98中运行,则在 C:\autoexec.bat文件的末尾添加下列语句 classpath=.;d:\jdk
1.3\lib; path=%path%;d:\jdk
1.3\bin; 如果是在windows2000中,则需要用右键单击桌面上我的电脑,选择属性,则弹出一个名为系统特性的窗口,选择高级,然后选择环境变量,在环境变量窗口中编辑classpath和path 【本讲小结】 j__a语言的产生起源于SunMicrosystems公司为消费电子产品上应用程序的__寻找一门编程语言的过程中,而随着互联网时代的到来,原有的Oak软件就顺理成章的改造成j__a语言推向了市场,其跨平台、面相对象、安全等特点使其得到广泛的应用通过在不同的软硬件上实现的j__a虚拟机,j__a的字节码文件就可以跨平台的进行运行,无用内存自动回收器也给程序员带来了极大的方便j__a程序以两种方式进行运行,一种是通过j__a虚拟机进行直接运行的j__aapplication,另一种是通过浏览器进行运行的j__aapplet,但是无论是何种方式,j__a都是一门纯粹的面向对象的编程语言面向对象编程的思路认为程序都是对象的组合,因此要克服面向过程编程的思路,直接按照对象和类的思想去__程序,面向对象所具有的封装性、继承性、多态性等特点使其具有强大的生命力Sun公司为全世界j__a__人员提供了一套免费的软件__包J__a2SDK,也称为JDK,它不仅是j__a的__平台,还是j__a的运行平台j__a源程序存放在.j__a文件中,可以通过任意一个文本编辑器编辑产生,源程序经过j__ac命令编译过后,就生成了相应的.class文件,而用j__a命令就可以运行.class文件作为面向对象编程人员来说,大体可以分为两种类创建者和应用程序员,应用程序员是类的使用者所以对程序的可读性和API帮助文档就有要求,j__a语言本身有一套约定成俗的编程规范,同时程序员首先要学会阅读系统API帮助文档,还要学会生成自己编写的程序的API帮助文档J__A教程第二讲J__a语言基础知识1-2.1简单数据类型2.1.1标识符和保留字 1.标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier)J__a语言中,标识符是以字母,下划线(_)美元符$开始的一个字符序列,后面可以跟字母,下划线,美元符,数字例如,identifier,userName,User_Name,_sys_val,$change为合法的标识符,而2__ilroom#,class为非法的标识符 2.保留字 具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字reservedword也称为关键字,下面列出了j__a语言中的所有保留字bstract,break,byte,boolean,catch,case,class,char,continue,default,double,do,else,extends,false,final,float,for,finally,if,import,implements,int,inte_____,instan__of,long,length,native,new,null,package,private,protected,public,return,switch,synchronized,short,static,super,try,true,this,throw,throws,threadsafe,transient,void,while j__a语言中的保留字均用小写字母表示2.1.2数据类型概1.j__a中的数据类型划分 j__a语言的数据类型有简单类型和复合类型 简单数据类型包括 整数类型(Integer)byte,short,int,long 浮点类型(Floating)float,double 字符类型(Textual)char 布尔类型(Logical)boolean 复合数据类型包括 class inte_____ 数组 2.常量和变量 常量用保留字final来实现 finaltypeSpecifiervarName=value[varName[=value]…]; 如finalintNUM=100; 变量是j__a程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个部分其定义格式如下 typeSpecifiervarName[=value[varName[=value]…]; 如intcount;charc=a; 变量的作用域指明可访问该变量的一段代码,声明一个变量的同时也就指明了变量的作用域按作用域来分,变量可以有下面几种局部变量、类变量、方法参数和例外处理参数在一个确定的域中,变量名应该是唯一的局部变量在方法或方法的一个块代码中声明,它的作用域为它所在的代码块(整个方法或方法中的某块代码)类变量在类中声明,而不是在类的某个方法中声明,它的作用域是整个类方法参数传递给方法,它的作用域就是这个方法例外处理参数传递给例外处理代码,它的作用域就是例外处理部分J__A教程第二讲J__a语言基础知识22.1.3简单数据类型 1.布尔类型--boolean 布尔型数据只有两个值true和false,且它们不对应于任何整数值布尔型变量的定义如 booleanb=true; 2.字符类型--char 字符常量 字符常量是用单引号括起来的一个字符,如a,A; 字符型变量 类型为char,它在机器中占16位,其范围为0~65535字符型变量的定义如 charc=a;/*指定变量c为char型,且赋初值为a*/ 3.整型数据 整型常量 ◇十进制整数 如123,-456,0 ◇八进制整数 以0开头,如0123表示十进制数83,-011表示十进制数-9 ◇十六进制整数 以0x或0X开头,如0x123表示十进制数291,-0X12表示十进制数-18 整型变量数据类型所占位数数的范围byte8-27~27-1bhort16-215~215-1int32-231~231-1long64-263~263-1 4.浮点型(实型)数据 实型常量 ◇十进制数形式 由数字和小数点组成,且必须有小数点,如
0.
1231.
23123.0 ◇科学计数法形式 如123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数 ◇float型的值必须在数字后加f或F如
1.23f 实型变量数据类型所占位数数的范围float
323.4e-038~
3.4e+038double
641.7e-038~
1.7e+038 5.简单数据类型的例子【例2.1】 publicclassAssign{ publicstaticvoid__inStringargs[]{ intxy;//定义x,y两个整型变量 floatz=
1.234f;//指定变量z为float型,且赋初值为
1.234 doublew=
1.234;//指定变量w为double型,且赋初值为
1.234 booleanflag=true;//指定变量flag为boolean型,且赋初值为true charc;//定义字符型变量c Stringstr;//定义字符串变量str Stringstr1=Hi;//指定变量str1为String型,且赋初值为Hi c=A;//给字符型变量c赋值A str=bye;//给字符串变量str赋值bye x=12;//给整型变量x赋值为12 y=300;//给整型变量y赋值为300 } }2.1.4简单数据类型中各类型数据间的优先关系和相互转换 1.不同类型数据间的优先关系如下 低-------------------------------------------高 byteshortchar-int-long-float-double 2.自动类型转换规则 整型实型字符型数据可以混合运算运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级;操作数1类型操作数2类型转换后的类型byte、short、char int intbyte、short、char、int long longbyte、short、char、int、long float floatbyte、short、char、int、long、float double double 3.强制类型转换 高级数据要转换成低级数据,需用到强制类型转换,如 inti; byteb=bytei;/*把int型变量i强制转换为byte型*/J__A教程第二讲J__a语言基础知识3dev.firnow.com时间2010-06-07__许斌编辑Mr.阿布__245[评论]--2.2运算符和表达式2.2.1运算符对各种类型的数据进行__的过程成为运算,表示各种不同运算的符号称为运算符,参与运算的数据称为操作数,按操作数的数目来分,可有 ◇一元运算符++,--,+,- ◇二元运算符+,-, ◇三元运算符? 基本的运算符按功能划分,有下面几类 1 算术运算符+,―,*,/,%,++,―― 例如 3+2; a-b; i++; --i; 2 关系运算符,,=,=,==,!= 例如 count3; I==0; n!=-1; 3 布尔逻辑运算符!,,|| 例如 flag=true; !flag; flagfalse; 4 位运算符,,,,|,^,~ 例如 a=10011101;b=00111001;则有如下结果 a3=11101000; a3=11110011a3=00010011; ab=00011001;a|b=10111101; ~a=01100010;a^b=10_____0; 5 赋值运算符=,及其扩展赋值运算符如+=,―=,*=,/=等 例如 i=3; i+=3; //等效于i=i+3; 6 条件运算符 例如result=sum==01:num/sum; 7 其它 包括分量运算符·,下标运算符[],实例运算符instan__of,内存分配运算符new,强制类型转换运算符类型,方法调用运算符等例如 System.out.printlnhelloworld; intarray1[]=newint
[4];2.2.2表达式 表达式是由操作数和运算符按一定的语法形式组成的符号序列一个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值;表达式的值还可以用作其他运算的操作数,形成更复杂的表达式 1.表达式的类型 表达式的类型由运算以及参与运算的操作数的类型决定,可以是简单类型,也可以是复合类型 布尔型表达式xy||z; 整型表达式num1+num2; 2.运算符的优先次序 表达式的运算按照运算符的优先顺序从高到低进行同级运算符从左到右进行优先次序运算符
1.[]2++--!~instan__of3newtype4*/%5+-67==8==!=910^11|1213||14:15=+=-=*=/=%=^=16=|==== 例如,下述条件语句分四步完成 Result=sum==01:num/sum; 第1步result=sum==01:num/sum 第2步result=sum==01:num/sum 第3步result=sum==01:num/sum 第4步result=J__A教程第二讲J__a语言基础知识42.3控制语句 J__a程序通过控制语句来执行程序流,完成一定的任务程序流是由若干个语句组成的,语句可以是单一的一条语句,如c=a+b也可以是用大括号{}括起来的一个复合语句J__a中的控制语句有以下几类 ◇分支语句if-elseswitch ◇循环语句whiledo-whilefor ◇与程序转移有关的跳转语句breakcontinuereturn ◇例外处理语句try-catch-finallythrow ◇注释语句//,/**/,/***/2.3.1分支语句 分支语句提供了一种控制机制,使得程序的执行可以跳过某些语句不执行,而转去执行特定的语句 1.条件语句if-else ifboolean-expression statement1; [elsestatement2;] 2.多分支语句switch switchexpression{ casevalue1:statement1; break; casevalue2:statement2; break; ………… casevalueN:statemendN; break; [default:defaultStatement;] } ◇表达式expression的返回值类型必须是这几种类型之一intbytecharshort ◇case子句中的值valueN必须是常量,而且所有case子句中的值应是不同的 ◇default子句是可选的 ◇break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行(在一些特殊情况下,多个不同的case值要执行一组相同的操作,这时可以不用break)2.3.2循环语句 循环语句的作用是反复执行一段代码,直到满足终止循环的条件为止J__a语言中提供的循环语句有 ◇while语句 ◇do-while语句 ◇for语句1.while语句 [initialization] whiletermination{ body; [iteration;] } 2.do-while语句 [initialization] do{ body; [iteration;] }whiletermination; 3.for语句 forinitialization;termination;iteration{ body; } ◇for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分完成一次循环后,重新判断终止条件 ◇初始化、终止以及迭代部分都可以为空语句但分号不能省,三者均为空的时候,相当于一个无限循环 ◇在初始化部分和迭代部分可以使用逗号语句,来进行多个操作逗号语句是用逗号分隔的语句序列 fori=0j=10;ij;i++j--{ …… }J__A教程第二讲J__a语言基础知识52.3.3跳转语句 ◇break语句 ◇continue语句 ◇返回语句return1.break语句 ◇在switch语中,break语句用来终止switch语句的执行使程序从switch语句后的第一个语句开始执行 ◇在J__a中,可以为每个代码块加一个括号,一个代码块通常是用大括号{}括起来的一段代码加标号的格式如下 BlockLabel:{codeBlock} break语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块的第一条语句处执行例如 breakBlockLabel; break语句 a:{……//标记代码块a b:{……//标记代码块b c:{……//标记代码块c breakb; ……//此处的语句块不被执行 } ……/此处的语句块不被执行 } ……//从此处开始执行 } 2.continue语句 continue语句用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环对于for语句,在进行终止条件的判断前,还要先执行迭代语句它的格式为 continue; 也可以用continue跳转到括号指明的外层循环中,这时的格式为 continueouterLable; 例如 outer:forinti=0;i10;i++{//外层循环 inner:forintj=0;j10;j++{//内层循环 ifij{ …… continueouter; } …… } …… } 3.返回语句return return语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行返回语句有两种格式 returnexpression; return; return语句通常用在一个方法体的最后否则会产生编译错误除非用在if-else语句中2.3.4例外处理语句 包括trycatchfinallythrow语J__A教程第二讲J__a语言基础知识6--2.4数组 j__a语言中,数组是一种最简单的复合数据类型数组是有序数据的__,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素数组有一维数组和__数组2.4.1一维数组 1.一维数组的定义 typearrayName[]; 类型type可以为J__a中任意的数据类型,包括简单类型和复合类型 例如 intintArray[]; DatedateArray[]; 2.一维数组的初始化 ◇静态初始化 intintArray[]={1234}; StringstringArray[]={abcHowyou}; ◇动态初始化 1)简单类型的数组 intintArray[]; intArray=newint
[5]; 2)复合类型的数组 StringstringArray[]; StringstringArray=newString
[3];/*为数组中每个元素开辟引用 空间32位*/ stringArray
[0]=newStringHow;//为第一个数组元素开辟空间 stringArray
[1]=newStringare;//为第二个数组元素开辟空间 stringArray
[2]=newStringyou;//为第三个数组元素开辟空间 3.一维数组元素的引用 数组元素的引用方式为 arrayName[index] index为数组下标,它可以为整型常数或表达式,下标从0开始每个数组都有一个属性length指明它的长度,例如intArray.length指明数组intArray的长度2.4.2__数组 J__a语言中,__数组被看作数组的数组 1.二维数组的定义 typearrayName[][]; type[][]arrayName; 2.二维数组的初始化 ◇静态初始化 intintArray[][]={{12}{23}{345}}; J__a语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同 ◇动态初始化 1直接为每一维分配空间,格式如下 arrayName=newtype[arrayLength1][arrayLength2]; inta[][]=newint
[2]
[3]; 2从最高维开始,分别为每一维分配空间 arrayName=newtype[arrayLength1][]; arrayName
[0]=newtype[arrayLength20]; arrayName
[1]=newtype[arrayLength21]; … arrayName[arrayLength1-1]=newtype[arrayLength2n]; 3例 二维简单数据类型数组的动态初始化如下 inta[][]=newint
[2][]; a
[0]=newint
[3]; a
[1]=newint
[5]; 对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间 而且,必须为每个数组元素单独分配空间 例如 Strings[][]=newString
[2][]; s
[0]=newString
[2];//为最高维分配引用空间 s
[1]=newString
[2];//为最高维分配引用空间 s
[0]
[0]=newStringGood;//为每个数组元素单独分配空间 s
[0]
[1]=newStringLuck;//为每个数组元素单独分配空间 s
[1]
[0]=newStringto;//为每个数组元素单独分配空间 s
[1]
[1]=newStringYou;//为每个数组元素单独分配空间 3.二维数组元素的引用 对二维数组中的每个元素,引用方式为arrayName[index1][index2] 例如num
[1]
[0]; 4.二维数组举例【例2.2】两个矩阵相乘 publicclass__trixMultiply{ publicstaticvoid__inStringargs[]{ intijk; inta[][]=newint
[2]
[3];//动态初始化一个二维数组 intb[][]={{1528}{5910-3}{27-5-18}};//静态初始化 一个二维数组 intc[][]=newint
[2]
[4];//动态初始化一个二维数组 fori=0;i2;i++ forj=0;j3;j++ a[i][j]=i+1*j+2; fori=0;i2;i++{ forj=0;j4;j++{ c[i][j]=0; fork=0;k3;k++ c[i][j]+=a[i][k]*b[k][j]; } } System.out.println*******__trixC********;//打印__trixC标记 fori=0;i2;i++{ forj=0;j4;j++ System.out.printlnc[i][j]+; System.out.println; } } }J__A教程第二讲J__a语言基础知识7dev.firnow.com时间2010-06-07__许斌编辑Mr.阿布__340[评论]--2.5字符串的处理2.5.1字符串的表示 J__a语言中,把字符串作为对象来处理,类String和StringBuffer都可以用来表示一个字符串类名都是大写字母打头 1.字符串常量 字符串常量是用双引号括住的一串字符 HelloWorld! 2.String表示字符串常量 用String表示字符串 Stringcharchars[]; Stringcharchars[]intstartIndexintnumChars; Stringbyteascii[]inthiByte; Stringbyteascii[]inthiByteintstartIndexintnumChars; String使用示例 Strings=newString;生成一个空串 下面用不同方法生成字符串abc charchars1[]={abc}; charchars2[]={abcde}; Strings1=newStringchars1; Strings2=newStringchars203; byteascii1[]={979899}; byteascii2[]={979899100101}; Strings3=newStringascii10; Strings4=newStringascii2003; 3.用StringBuffer表示字符串 StringBuffer;/*分配16个字符的缓冲区*/ StringBufferintlen;/*分配len个字符的缓冲区*/ StringBufferStrings;/*除了按照s的大小分配空间外再分配16个 字符的缓冲区*/2.5.2访问字符串1.类String中提供了length、charAt、indexOf、lastIndexOf、getChars、getBytes、toCharArray等方法 ◇publicintlength此方法返回字符串的字符个数 ◇publiccharcharAtintindex此方法返回字符串中index位置上的字符,其中index值的范围是0~length-1 ◇publicintindexOfintch publiclastIndexOfinch 返回字符ch在字符串中出现的第一个和最后一个的位置 ◇publicintindexOfStringstr publicintlastIndexOfStringstr 返回子串str中第一个字符在字符串中出现的第一个和最后一个的位置 ◇publicintindexOfintchintfromIndex publiclastIndexOfinchintfromIndex 返回字符ch在字符串中位置fromIndex以后出现的第一个和最后一个的位置 ◇publicintindexOfStringstrintfromIndex publicintlastIndexOfStringstrintfromIndex 返回子串str中的第一个字符在字符串中位置fromIndex后出现的第一个和最后一个的位置 ◇publicvoidgetcharsintsrcbeginintendcharbuf[]intdstbegin srcbegin为要提取的第一个字符在源串中的位置,end为要提取的最后一个字符在源串中的位置,字符数组buf[]存放目的字符串, dstbegin为提取的字符串在目的串中的起始位置 ◇publicvoidgetBytesintsrcBeginintsr__ndbyte[]dstintdstBegin 参数及用法同上,只是串中的字符均用8位表示 2.类StringBuffer提供了length、charAt、getChars、capacity等方法 方法capacity用来得到字符串缓冲区的容量,它与方法length所返回的值通常是不同的。