




已阅读5页,还剩301页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言概述,Java基础知识培训,主要内容提要,Java程序的开发环境,Java程序相关问题,Java语言的主要特性,Java语言的发展历史,Java程序的开发过程,2,Java语言的发展历史,Internet迅猛发展Java语言正式问世被美国著名杂志PCMagazine评为1995年十大优秀科技产品之一,JamesGosling领导的Green小组开发了面向数字家电的Oak语言,推出了Java2平台。性能上有所提高,而且对Java的基本模式进行了完善,并提供了更为丰富的API,1991,1995,1998,3,Java2的版本划分,4,Java语言的主要特性,5,Java程序相关问题Java虚拟机,Java虚拟机在真实机器中用软件模拟实现的一种抽象的机器。(Java虚拟机规范)Java虚拟机主要由五个部分组成:指令系统、寄存器、栈、存储区、碎片回收区解释和执行Java程序编译后产生的字节码,6,Java程序相关问题JavaAPI,JavaAPI是Java系统提供的预先定义好的软件组件的集合,它们提供了许多可供程序员调用的常用功能丰富的API为程序员提供了极大的方便,但也是学习的难点要学会使用JavaAPI手册(TheJava2PlatformAPISpecification),7,Java程序相关问题Java程序的运行机制,操作系统,源代码,可执行代码,目标码,编译,连接,运行,源代码,字节码,编译,解释执行,Java解释器,传统语言的运行机制,Java语言的运行机制,8,Java程序相关问题Java程序类型,Java应用程序(JavaApplication)是独立完整的程序在命令行调用独立的解释器软件即可运行主类必须有main方法,这也是程序的入口Java小程序JavaApplet是指在客户端运行的Java小程序,一般来说客户端是指用户所使用的浏览器JavaServlet是在服务器端执行的Java小程序,为了能够支持Servlet的运行,服务器端必须安装包含Java虚拟机的服务器软件,这种能够支持服务端小程序的服务器一般被称为应用服务器,9,Java开发环境,JDK/J2SDK(JavaDeveloperKit)JDK1.02JDK1.1.xJDK1.2/J2SDK1.3/J2SDK1.4/JDK5.0(J2SDK1.5)Java集成开发环境(IDE)NetBeansJBuilderEclipseJCreatorForteforJavaVisualJ+WSAD,10,JDK的安装与设置,从,11,环境设置,在Windows环境下,为了快速进入指定目录的命令行窗口,可在注册表中增加项目:HKEY_CLASSES_ROOTDirectoryshell进入命令行command默认值设为:cmd/kcd%1,12,JDK的目录结构,bin目录中包含了所有JDK5.0提供的实用程序demo目录中包含了JDK5.0自带的实例程序inculde目录中包含了一些支持Javanative方法的CC+头文件jre目录中包含了Java运行环境所需的所有文件,这个目录中所包含的java运行环境是JDK私有的,它只为JDK的实用程序提供支持lib目录中包含了Java开发环境所需的库文件,它们以jar文件的形式保存sample目录中包含的是体现JDK5.0新特性的一些例程,13,JDK实用程序简介,javac:Java编译器,将Java源代码编译为字节码;java:Java解释器,用来解释执行Java程序的字节码文件;appletviewer(小程序浏览器):一种执行HTML文件上的Java小程序类的Java浏览器;javadoc:根据Java源代码及其说明语句生成的HTML文档;jdb:Java调试器,可以逐行地执行程序、设置断点和检查变量;javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件;javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。,14,Java程序的开发过程,编辑源代码编译源代码文件运行程序,15,Java程序的开发过程编辑源代码,一般情况下,我们可以使用系统平台下的任何文本编辑器进行源代码的编辑,在Windows平台下常用的是Window系统自带的“记事本”程序或“写字板”程序Java源码大小写敏感Java源码文件的扩展名:.javaJava源程序文件也不能随意命名,其文件名必须与程序中主类的类名完全相同,包括大小写在内,publicclassMyFirstJavaApppublicstaticvoidmain(Stringargs)System.out.println(“ThisisMyFirstJavaApplication!”);,16,Java程序的开发过程编译源代码,使用JDK实用程序javac对源代码文件进行编译C:MyJavajavacMyFirstJavaApp.java如果系统提示符再次出现并且没有任何消息产生,那么编译便成功了如果有系统报错消息产生,则表示程序编译出错,程序员必须阅读报错信息,并根据这些信息对程序进行修改程序成功编译后,在与源代码文件同一目录下会生成一个新的文件,其文件名与源代码文件名相同,扩展名为“.class”。这个文件就是源代码文件编译产生的程序字节码文件MyFirstJava.class,17,Java程序的开发过程运行程序,要执行一个Java程序非常简单,只需在字节码文件所在目录下输入下列命令就可以了:java字节码文件名,18,Question?,第2章面向对象的编程概念,主要内容提要,什么是接口,什么是继承,什么是类,什么是消息,什么是对象,21,面向对象vs.面向过程,面向对象(OOP)Object-OrientedProgramming用类class封装数据以及与数据相关的操作用类的继承性来实现类的重用性多态性面向“对象”,由对象提供服务面向过程(POP)Procedure-OrientedProgramming以功能为组织单元通过数据结构来描述具体的问题数据在功能(函数)之间以参数的形式被传送,22,现实世界中的对象,现实世界是由对象构成的现实世界中任何实体都可以看作是对象现实世界中的对象有两个共同特征:状态行为,23,软件对象(Object),软件对象是现实世界对象的抽象软件对象同样具有状态和行为定义:对象是变量和相关方法的软件组合,24,现实对象软件对象,25,封装(Encapsulation),封装性体现了面向对象程序设计的一个特性,将方法和数据组织在一起,隐藏其具体实现而对外体现出公共的接口模块化隐藏信息,26,消息(Message),复杂的行为必须通过对象之间的交互来实现软件对象与其它对象进行交互与通讯是通过互发消息来实现的,对象B,对象A,消息,27,消息的组成,消息的目的对象要执行的方法的名称方法所需参数,你的车,你,换档(低档),28,消息的性质,同一对象可接收不同形式的多个消息,产生不同的响应同一个消息可以发给不同的对象,所做出的响应可以截然不同发送方不需要知道接受方如何对请求予以响应的,29,类(Class),定义:类是蓝图或原型,它定义了所有某种类的对象的共有的变量和方法类是具有共同属性和行为的对象的抽象与集合,私有的实现细节,公共API,30,实例(Instance),定义:特定类所描述的一个具体对象,31,对象、类与实体的关系,32,继承(Inheritance),广义地说,继承是指能够直接获得已有的性质和特性,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享父类中定义的数据和方法的机制。,33,单重继承与多重继承,单重继承:一个子类只有一个唯一确定的父类单重继承所构成的类的关系结构是一棵树多重继承:一个子类可以有多个不同的父类多重继承所构成的类的关系结构是一个格Java语言仅支持单重继承,34,继承的作用,使软件系统具有开放性更好地进行抽象与分类实现代码的复用提高可维护性,35,类型(Type),在面向数值的编程中,类型通常用作数据的表示。在Java这样的强类型语言中,在编译期,每一个变量和表达式都有一个类型与之相对应Java中的类型:基本类型、类、接口,36,接口(Interface),接口和类一样也是一种类型,也同样包含一些方法的定义。但与类不同的是:接口中所定义的所有方法都是抽象方法(即没有实现的方法)。接口中所定义的方法由实现(implement)该接口的类来实现,一个类可以同时实现多个接口接口机制使Java的面向对象编程变得更加灵活。解决了单重继承带来的问题接口定义了对象的行为模型,相当于一个协议。实现接口的各个类负责实现接口所定义的行为。虽然实现细节各不相同,但对用户来说是一样的行为。,37,面向对象的示例,本例中包含很多对象:点、窗口、颜色、点击事件代码:ClickMeApp.java,ClickMe.java,Spot.java,38,Spot类,publicclassSpot/instancevariablesprivateintsize;publicintx,y;/constructorpublicSpot()x=-1;y=-1;size=1;/methodsforaccesstothesizeinstancevariablepublicvoidsetSize(intnewSize)if(newSize=0)size=newSize;publicintgetSize()returnsize;,39,Spot对象,privateSpotspot=null;.spot=newSpot();,40,示例中的消息,g2d.setColor(Color.WHITE);g2d.fillRect(0,0,getWidth()-1,getHeight()-1);,41,示例中的继承和接口,publicclassClickMeextendsJComponentimplementsMouseListener.,publicclassClickMeextendsJComponentimplementsMouseListener./MethodsrequiredbytheMouseListenerinterface.publicvoidmousePressed(MouseEventevent)if(spot=null)spot=newSpot();spot.setSize(RADIUS);spot.x=event.getX();spot.y=event.getY();repaint();publicvoidmouseClicked(MouseEventevent)publicvoidmouseReleased(MouseEventevent)publicvoidmouseEntered(MouseEventevent)publicvoidmouseExited(MouseEventevent),42,欢迎提问,Question!,第三章Java语言基础,变量(Variable),对象将它的状态存储在变量中定义:变量是一个由标识符命名的数据项变量名必须是一个合法的标识符-一个以字母开头的无限制的Unicode字符序列。变量的声明:类型名称=初始值;inti;doublepi=3.1415926;Stringname;,45,数据类型,每个变量都必须有一个数据类型.一个变量的数据类型决定了它能容纳的值和在它上面可以进行什么操作。Java编程语言有两大类数据类型:原始类型(primitive)引用类(reference),46,Java的数据类型,47,原始类型,原始类型变量包含单个值,其大小和格式与它的类型匹配:数字、字符或布尔值。Java语言没有unsigned类型0 xFFFF和0 xFF谁大?Java语言必须强制类型转换floatf=0.1;booleanb=1;,48,引用类型,数组,类和接口就是引用数据类型.与原始类型变量的值不同的是,引用类型变量的值是对应变量代表的一个值或一组值的引用(也就是其地址)在其他语言里引用被称为指针或者内存地址。Java不支持显示地使用地址,而是使用变量的名称代替。,49,变量的引用,通过变量名引用变量的值简单名称:由单个标识符组成的名称限定名称:通过类名或对象名引用该类或对象中的成员变量System.out.println(i+spot.x);,50,作用范围,变量的作用范围是可以通过简单名称引用该变量的程序区域作用范围也决定了系统为该变量创建和释放内存的时间,51,例子,inti=10;if(i0)inti=20;System.out.println(“Thevalueofi=”+i);System.out.println(“Thevalueofi=”+i);,52,最终变量,你可以在任意范围里将一个变量定义为最终变量(final)最终变量的值一经初始化就不能改变类似于C语言中的常量(const),finalintaFinalVar=0;,finalintblankfinal;.blankfinal=0;,53,操作符、表达式、语句和块,自学!,54,第四章对象基础和简单数据对象,主要内容,数组,数字,字符和字符串,对象的生存周期,56,对象的生命周期,57,CreateObjectDeom,publicclassCreateObjectDemopublicstaticvoidmain(Stringargs)/创建一个Point对象和两个Rectangle对象Pointorigin_one=newPoint(23,94);Rectanglerect_one=newRectangle(origin_one,100,200);Rectanglerect_two=newRectangle(50,100);/显示rect_one的宽、高以及面积System.out.println(Widthofrect_one:+rect_one.width);System.out.println(Heightofrect_one:+rect_one.height);System.out.println(Areaofrect_one:+rect_one.area();rect_two.origin=origin_one;/设置rect_two的位置/显示rect_two的位置System.out.println(XPositionofrect_two:+rect_two.origin.x);System.out.println(YPositionofrect_two:+rect_two.origin.y);/移动rect_two并且显示它的新位置rect_two.move(40,72);System.out.println(XPositionofrect_two:+rect_two.origin.x);System.out.println(YPositionofrect_two:+rect_two.origin.y);,58,对象的创建,类型名引用变量=new构造器(构造器的参数),59,声明一个变量来引用对象,为了声明一个变量来引用对象,你可以使用类或者接口的名字作为变量的类型声明并没有创建新对象。在对该引用变量赋值前,该引用为空,称为空引用(null),类型名引用变量=new构造器(构造器的参数),Pointorigin_one,60,实例化对象,new操作符通过为新对象分配内存来实例化一个类new操作符需要一个后缀参数,即构造器的一个调用new操作符返回一个对它所创建对象的引用,通常该引用被赋值给具有适当类型的引用变量如果new操作符返回的引用没有被赋给任何变量,那么当new操作符所在的语句执行完后,将无法访问该对象,61,初始化对象,构造器(Constructor):是一个用来创建对象的特殊方法,用来初始化对象的属性。构造器的名字与类名相同构造器没有返回值构造器所包含的语句用来对所创建的对象进行初始化没有参数的构造器称为“无参构造器”每个Java类都至少有一个构造器,如果该类没有显式地声明任何构造器,系统会默认地为该类提供一个不包含任何语句的无参构造器,62,对象创建的实例,publicclassPointpublicintx=0;publicinty=0;publicPoint(intx,inty)this.x=x;this.y=y;,Pointorigin_one=newPoint(23,94);,63,问题,Pointorigin_one=newPoint(23,94);Pointorigin_two=newPoint(23,94);,Pointorigin_one=newPoint(23,94);Pointorigin_two=origin_two;,64,构造器的重载(Overload),一个类可以包含多个构造器,这种情况成为构造器的重载同一个类中的多个构造器通过参数的数目及类型的不同来区分,publicclassRectanglepublicintwidth=0;publicintheight=0;publicPointorigin;publicRectangle()origin=newPoint(0,0);publicRectangle(Pointp)origin=p;publicRectangle(intw,inth)this(newPoint(0,0),w,h);publicRectangle(Pointp,intw,inth)origin=p;width=w;height=h;.,65,对象的使用,对象的使用有两种方式操作或者检查它的变量调用它的方法要使用对象的实例成员,首先需要得到该对象的引用,66,实例成员与类成员,实例成员包括实例变量与实例方法实例成员依赖于实例存在同一个类的不同实例都拥有一份实例变量的拷贝,对某个实例的实例变量的操作不影响到其它实例实例变量遵循对象的生命周期,随着对象的创建而创建,随着对象的消亡而消亡必须通过实例的引用来调用实例方法类成员包括类变量与类方法类成员不依赖于实例存在同一个类的不同实例共享同一个类变量,对类变量的改变会影响到所有实例类变量的生存期不依赖于对象,其它类可以不用通过创建该类的实例,直接通过类名访问它们。同样,类方法也可以直接通过类名访问。,67,实例成员与类成员,classABCDchardata;staticintshare_data;classDemoABCDa,b,c,d;/实例化,68,实例变量的引用,简单名称当实例变量处在作用域内(即对象的类的代码内)的时候限定名称objectReference.variableName当实例变量处在作用域外时使用限定名称,System.out.println(Widthofrect_one:+rect_one.width);System.out.println(Heightofrect_one:+rect_one.height);intheight=newRectangle().height;,69,关于变量访问的说明,建议不要通过其它对象或类直接操作对象的变量,可能引起无效值理想情况下,类会提供一些方法,其他对象可以通过他们检查或修改变量,确保值有效,而且如果变量的类型和名称发生了变化,不会影响它的使用者在某些情况下,可以允许对对象变量的直接访问,以使类更小更简单,也可使变量适用于更广泛范围;JAVA编程语言提供了一个访问控制机制,通过这种机制,类可以决定那些其它的类可以直接访问它的变量(第五章中介绍)。,70,调用对象的方法,使用限定名称来调用对象的方法objectReference.methodName(argumentList);或者objectReference.methodName();,System.out.println(Areaofrect_one:+rect_one.area();rect_two.move(40,72);intareaOfRectangle=newRectangle(100,50).area();,71,关于方法调用,方法被声明为public,就可以被任何其它的类所访问。有时,类需要限制对它的方法的访问类可以使用与控制变量访问相同的机制来对它的方法进行访问控制(第五章中介绍),72,对象的清除,JAVA运行时环境在当对象不再被使用的时候清除它们,这个过程就是所谓的“垃圾收集”(garbagecollection)Java的垃圾收集器自动扫描对象的动态内存区,对被引用的对象加标记,然后把没有引用的对象作为垃圾收集起来并释放。垃圾收集器作为一个线程运行。当系统的内存用尽或程序中调用System.gc()要求进行垃圾收集时,垃圾收集线程与系统同步运行。否则垃圾收集器在系统空闲时异步地执行。,73,无用对象的判定,当某个对象不在被任何引用变量引用时,该对象是无用对象,将被清除。一般有如下两种情况:,引用变量超出了作用域StringBuffers=newStringBuffer(“thisisatest”);/超出对象作用域,引用变量引用了其它对象或引用了空对象StringBuffers=newStringBuffer(“test1”);s=newStringBuffer(“test2”);/引用了新的对象s=null;/引用为空,74,finalize()方法,在对对象进行垃圾收集前,Java运行时系统会自动调用对象的finalize()方法来释放系统资源。某些情况下,程序员可能需要实现该方法来释放不由垃圾收集器所控制的资源。但这种情况非常少见finalize()方法是在Object中有缺省实现,在用户自定义的类中,它可以被覆盖,但一般在最后要调用父类的finalize()方法来清除对象所使用的所有资源,75,问题一,下列程序的运行结果?,publicclassSomethingIsWrongpublicstaticvoidmain(Stringargs)RectanglemyRect;myRect.width=40;myRect.height=50;System.out.println(myRectsareais+myRect.area();,76,问题二,现有一个Point和Rectangle对象,代码执行后有多少引用指向它们?有没有对象需要垃圾收集?,Pointpoint=newPoint(2,4);Rectanglerectangle=newRectangle(point,20,20);point=null;,77,字符和字符串,JavaAPI提供了三个处理字符数据的类:Character:这个类的实例可以容纳单一的字符数值。该类还定义了一些简洁的方法来操作或者检查单一字符数据。String:这个类用于处理由多个字符组成的不可变数据。StringBuffer:这个类用于存储和操作由多个字符组成的可变数据。,78,字符类(Character),字符类的对象包含单个字符值当需要使用对象时,可以用字符对象替代原始的char类型的变量,79,字符类构造器和方法,Character(char)Character类唯一的构造器,它创建一个字符对象,其中包含由参数提供的值,一旦创建了Character对象,它包含的值就不能改变。compareTo(Character)这个实例方法比较两个字符对象包含的值,这个方法返回一个整数值,表示当前对象中的值是大于、等于还是小于参数所包含的值,80,字符类构造器和方法,equals(Object)这个实例方法比较当前对象包含的值与参数对象包含的值,如果两个对象包含的值相等,那么这个方法返回truetoString()这个实例方法将此对象转换为字符串charValue()这个实例方法以原始char值的形式返回此字符对象包含的值isUpperCase()这个实例方法判断一个原始char值是否是大写字母,81,字符类例程,publicclassCharacterDemopublicstaticvoidmain(Stringargs)Charactera=newCharacter(a);Charactera2=newCharacter(a);Characterb=newCharacter(b);intdifference=pareTo(b);if(difference=0)System.out.println(aisequaltob.);elseif(difference0)System.out.println(aisgreaterthanb.);System.out.println(ais+(a.equals(a2)?equal:notequal)+toa2.);System.out.println(Thecharacter+a.toString()+is+(Character.isUpperCase(a.charValue()?upper:lower)+case.);,程序的输出:aislessthanb.aisequaltoa2.Thecharacteraislowercase.,82,字符类类方法,83,问题,Charactera=newCharacter(a);Characterb=newCharacter(a);,下列boolean表达式的值是true还是false?(1)pareTo(b)=0(2)a.equals(b)(3)a=b,84,字符串和字符串缓冲区,Java平台提供两个类String和StringBuffer,它们用于存储和操作字符串由多个字符组成的字符数据。String类用于其值不能改变的字符串;StringBuffer类用于被修改的字符串,通常用来动态的构造字符数据。字符串是常量,比字符串缓冲区更高效,而且字符串可以被共享。,85,字符串(String),使用字符串常量时,需要创建String对象,和其它对象不同,String对象可以通过简单赋值语句创建:Stringname=“Petter”;此外,也可根据String类的构造函数创建String对象:Stringname=newString(“Petter”);对于程序任何位置出现的双引号标记的字符串,系统都会自动创建一个String对象。可通过String对象的方法对字符串进行操作,86,字符串构造器,87,字符串的不可变性?,String类用于其值不能改变的字符串观察下列程序:,publicclassStringTestpublicstaticvoidmain(Stringargs)Strings=abc;s=s+“defg;System.out.println(s);,程序运行结果是abc还是abcdefg?,88,字符串的不可变性?,s=s+”defg”,89,字符串缓冲区(StringBuffer),String对象表示的是不可更改的字符串对象,如果需要修改String对象所表示的内容,必须重新创建一个对象:Stringstr=“Petter”;str=str+“当修改操作频繁,或字符串的值很大时,会额外分配大量内存因此,Java语言引入了一个StringBuffer类,用来表示内容可以扩充和修改字符串对象,90,StringBuffer构造器,必须使用new操作符创建字符串缓冲区,Strings=DotsawIwasTod;StringBufferdest=newStringBuffer(s);,91,访问器方法,用于获取关于对象的信息的方法被称为访问器方法。字符串和字符串缓冲区都可以使用的一个访问器方法就是length方法。length方法返回字符串和字符串缓冲区中包含的字符数。,Stringpalindrome=DotsawIwasTod;intlen=palindrome.length();,92,容量,在StringBuffer类中还有一个capacity()方法,它返回分配给这个字符串缓冲区的容量,而不是使用量。使用量会改变,但是容量始终是不变的。,93,通过索引得到字符,charAt()访问器方法,通过索引从字符串或者字符串缓冲区得到字符,索引值从零开始。,StringanotherPalindrome=Niagara.Oroaragain!;charaChar=anotherPalindrome.charAt(9);,94,substring方法,如果要从字符串或者字符串缓冲区得到多个字符,可以使用substring方法。Stringsubstring(int)Stringsubstring(int,int),StringanotherPalindrome=Niagara.Oroaragain!;Stringroar=anotherPalindrome.substring(11,15);,95,search,string类提供两个访问器方法,返回特定的字符或者子字符串在字符串中的位置。indexOf()方法从字符串的开头查找;lastindexOf()方法从字符串的末尾查找;stringBuffer类不支持indexOf()和lastindexOf()方法。,96,search,97,searchexample,publicclassFilenameprivateStringfullPath;privatecharpathSeparator,extensionSeparator;publicFilename(Stringstr,charsep,charext)fullPath=str;pathSeparator=sep;extensionSeparator=ext;publicStringextension()intdot=fullPath.lastIndexOf(extensionSeparator);returnfullPath.substring(dot+1);publicStringfilename()intdot=fullPath.lastIndexOf(extensionSeparator);intsep=fullPath.lastIndexOf(pathSeparator);returnfullPath.substring(sep+1,dot);publicStringpath()intsep=fullPath.lastIndexOf(pathSeparator);returnfullPath.substring(0,sep);,98,searchexample,publicclassFilenameDemopublicstaticvoidmain(Stringargs)FilenamemyHomePage=newFilename(/home/mem/index.html,/,.);System.out.println(Extension=+myHomePage.extension();System.out.println(Filename=+myHomePage.filename();System.out.println(Path=+myHomePage.path();,程序输出:Extension=htmlFilename=indexPath=/home/mem,99,比较字符串和字符串缓冲区,100,操作字符串,101,修改字符串缓冲区,102,数字类,Number类及其子类主要用于处理数字Number类的对象包含了原始类型的数值并且提供了一些有用的变量和方法,用于对数值进行处理,103,类型包装器类(Type-Wrapperclass),数字类、Boolean、Character和void类统称为类型包装器类在需要对象的地方,可将原始类型的值存储在类型包装器对象中这些类定义了一些有用的变量,提供关于数据类型的一般信息这些类还定义了一些有用的方法,用于将值转换为其他类型、转换为字符串等等这些类用于反射,反射这种java机制允许程序收集关于JVM中任何对象或类的信息此外,BigInteger和BigDecimal还扩展了原始数据类型,104,例程,publicclassNumberDemopublicstaticvoidmain(Stringargs)FloatfloatOne=newFloat(14.78f-13.78f);FloatfloatTwo=Float.valueOf(1.0);DoubledoubleOne=newDouble(1.0);intdifference=floatOpareTo(floatTwo);if(difference=0)System.out.println(floatOneisequaltofloatTwo.);elseif(difference0)System.out.println(floatOneisgreaterthanfloatTwo.);System.out.println(floatOneis“+(floatOne.equals(doubleOne)?equal:notequal)+todoubleOne.);,floatOneisequaltooneAgain.floatOneisnotequaltodoubleOne.,105,数字的转换、格式化、高级算术功能,自学!,106,数组,数组是一个固定长度的结构,它存储多个相同类型的值数组直接被JAVA语言所支持,所以没有一个数组类数组的长度在数组创建的时候就已经确定。数组元素就是数组中的一个数值,可以通过数组中的位置来访问它。,107,创建数组,声明一个引用变量来引用一个数组格式:type引用变量名type引用变量名(允许但不推荐)数组变量的声明并不创建数组创建一个数组使用new操作符显示地创建数组格式:newelementTypearraySize数组初始化器可以使用简写的语法创建并初始化数组:type引用变量名=数组元素值;,108,使用数组,访问数组元素引用变量名(数组名)index得到数组大小引用变量名(数组名).length,109,例程,publicclassArrayDemopublicstaticvoidmain(Stringargs)intanArray;anArray=newint10;for(inti=0;ianArray.length;i+)anArrayi=i;System.out.print(anArrayi+);System.out.println();,110,对象数组,数组元素可以是基本类型也可以是引用类型当数组元素是引用类型时(也即数组元素为对象时需要注意:数组元素也必须要被创建和初始化,IntegeranArray=newInteger5;for(inti=0;ianArray.length;i+)System.out.println(anArrayi);,111,数组的数组,数组的数组可以看作是“数组引用”的数组与对象数组一样,必须显示地在数组中创建子数组子数组的长度并不相同例:intaMatrix=newint4;aMatrix1=newint5;aMatrix2=newint10;,112,复制数组,publicstaticvoidarraycopy(Objectsource,intsrcIndex,Objectdest,intdestIndex,intlength),113,例程,publicclassArrayCopyDemopublicstaticvoidmain(Stringargs)charcopyFrom=d,e,c,a,f,f,e,i,n,a,t,e,d;charcopyTo=newchar7;System.arraycopy(copyFrom,2,copyTo,0,7);System.out.println(newString(copyTo);,114,问题,publicclassWhatHappenspublicstaticvoidmain(Stringargs)StringBufferstringBuffers=newStringBuffer10;for(inti=0;istringBuffers.length;i+)stringBuffersi.append(StringBufferatindex+i);,115,欢迎提问,Question!,第六章接口和包,主要内容提要,创建和使用包,编写和使用接口,118,Java接口的引入,Java语言只支持单重继承,它的程序中的类的层次结构是树状结构,在处理复杂问题时单重继承显得力不从心。为了使Java程序的类层次结构更加合理,更符合实际问题的需要,我们把用于完成特定功能的若干属性组织成相对独立的属性集合,这种属性的集合就是接口。,119,Java接口定义,定义:接口是一个有名称的方法定义和常量定义的集合,但没有方法的实现。接口定义了一个行为协议,类层次结构中任何地方的任何类都可以实现.接口是由常量和抽象方法组成的特殊类:接口中的属性都是用final修饰的常量接口中的方法都是用abstract修饰的没有方法体的抽象方法。,120,Java语言的接口,接口功能的真正实现是由实现接口的各个类来定义接口中各个抽象方法的具体方法体。Java语言通过接口实现了类间的多重继承功能。,121,Java接口实现多重继承,单一继承指明了子类和父类的层次关系和各自的行为。多重继承是指一个类有多个父类,这使得类的层次关系不清楚。接口则把方法的定义同类的层次区分开来,通过接口可以在运行中动态地定位所调用的方法,同时一个类可以实现多个接口,使得接口提供了比多重继承更简单、更灵活的功能。,122,接口vs抽象类,接口不可以实现任何方法,而抽象类可以;类可以实现多个接口,但父类仅只有一个;接口和继承无关,不是类层次结构的一部分。无关的类可以实现相同接口。,123,定义接口,124,完整的接口定义规范,125,接口定义,接口包括接口声明和接口体两部分:publicinterface接口名extends父接口名列表publicstaticfinal类型变量名=常量值;publicabstractnative返回值类型方法名(参数列表)throws异常列表;,publicinterfaceMyInterfaceintMAXSIZE=1024;publicabstractmyMethod(Stringname);,126,接口定义的说明,声明接口的关键字interface引导着所定义的接口名字(符合Java标识符规定);声明接口也需要给出访问控制符;接口具有继承性,通过关键字extends声明该新接口是某父接口的派生接口;一个接口可以有多个父接口,它们之间用逗号分隔,形成父接口列表。,127,接口体的说明,接口体的定义有两个部分:对接口中属性的声明对接口中方法的声明;系统默认:接口中的所有属性都是public,static和final(公共,静态和最终);系统默认:接口中的所有方法都是public和abstract(公共和抽象);接口中方法的方法体可用Java语言书写,也可用其它语言书写(加native修饰)。,128,实例,定义一个股票监视器。一旦股票价格变化,立即通知观察者watcher。Watcher是一个接口,它只有一个方法,valueChanged知道股票变化的类必须实现此方法。从而必须实现StockWatcher接口不仅仅是StockMointer的超类,其它类只要实现此接口,就可以享受股票价格变化通知服务。,publicclassStockMonitorpublicvoidwatchStock(StockWatcherwatcher,StringtickerSymbol,doubledelta),129,实现接口,具体地实现接口所规定的功能,需要某个类为接口中的所有抽象方法编写实在的方法体。在类的声明(定义)中用implements关键字说明该类将要实现哪些接口;如果实现某个接口的类不是abstract的抽象类,则在类的定义部分必须为所有抽象方法定义具体方法体,方法头部分应该与接口中的定义完全一致;,130,实现接口,如果实现某接口的类是abstract的抽象类,则在类的定义部分可以不具体实现接口中的所有方法;一个类在实现某个接口的抽象方法时,必须使用完全相同的方法声明。接口的抽象方法访问修饰符为public,所以,类在实现方法时必须使用修饰符public,否则,系统将警告;因为缩小了接口中定义的方法的访问控制范围。,131,实例,publicclassStockAppletextendsAppletimplementsStockWatcher.publicvoidvalueChanged(StringtickerSymbol,doublenewValue)if(tickerSymbol.equals(sunTicker).elseif(tickerSymbol.equals(oracleTicker).elseif(tickerSymbol.equals(ciscoTicker).,132,接口功能不能简单扩大,例如:要加个报股价的方法在接口里,此时所有实现它的类不能正常工作。,publicinterfaceStockWatcherfinalStringsunTicker=SUNW;finalStringoracleTicker=ORCL;finalStringciscoTicker=CSCO;voidvalueChanged(StringtickerSymbol,doublenewValue);voidcurrentValue(StringtickerSym
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园冬季培训
- 口腔专业知识培训心得课件
- 培训行业的管理知识课件
- 2025年度线上线下融合型超市加盟管理合同范本
- 2025年高端医疗设备研发与生产委托技术服务合同
- 2025新型养老模式废弃物高效处理与循环利用服务合同
- 2025年甲级写字楼虚拟办公室租赁协议:商务资源共享合作版
- 2025年现代办公楼吊顶智能化改造与维护一体化服务合同
- 2025年智能交通场部项目数据安全保密与责任协议
- 2025年农业科技研发项目资金周转股权质押合同
- 2025年体育教练员执业能力考试试题及答案解析
- 2025年住培结业考试题库及答案
- 2025年重庆辅警管理知识模拟100题及答案
- DB42∕T 2151-2023 应急物资储备库建设规范
- 2025年二级建造师继续教育题库及参考答案(完整版)
- GB 15630-1995消防安全标志设置要求
- 实习协议模板(最新版)
- 《新视野大学英语预备级1》教案
- 车间拆除及场地土壤治理与地下水修复工程项目技术方案工程方案和设备方案
- 无跨越架封网装置计算程序(直接求解)
- 《病理检验技术》课程标准
评论
0/150
提交评论