第03章面向对象特征g

上传人:新** 文档编号:581017990 上传时间:2024-08-29 格式:PPT 页数:126 大小:948.02KB
返回 下载 相关 举报
第03章面向对象特征g_第1页
第1页 / 共126页
第03章面向对象特征g_第2页
第2页 / 共126页
第03章面向对象特征g_第3页
第3页 / 共126页
第03章面向对象特征g_第4页
第4页 / 共126页
第03章面向对象特征g_第5页
第5页 / 共126页
点击查看更多>>
资源描述

《第03章面向对象特征g》由会员分享,可在线阅读,更多相关《第03章面向对象特征g(126页珍藏版)》请在金锄头文库上搜索。

1、Java语言程序设计刘玉江1第三章面向对象特征授课内容:1.基本概念2.类的定义3.对象4.类的继承和多态5.接口和包6.常用工具类2基本概念n什么是编程语言?n人和计算机进行交流的工具和手段n编程语言的发展n机器语言: 0101001n汇编语言: movn第三代语言: 高级语言,以C语言为代表,过程式编程语言n第四代语言: 非过程化/面向对象的编程语言3n面向对象n面向对象编程(Object Oriented Programming-OOP)n面向对象是一种软件开发的方法,“面向对象的分析与设计” n第一个面向对象的语言: Simula-67n第一个成功的面向对象编程语言: Smalltal

2、knC+, JAVA, C#, PERL等1.用客观世界中描述事物的方法来描述程序中要解决的问题2.万事万物都是对象3.程序便是成堆的对象,彼此通过消息的传递,请求其他对象进行工作 基本概念4n五个基本概念1.对象2.类3.封装性4.继承性5.多态性基本概念51.对象 (object)n对象包含两个特性n状态: 指对象本身的信息(内部信息/内部变量)n行为: 实现对信息的访问/对象的操作n标志: 代表对象的标识符n山地车的状态(两个车轮、一些齿轮、速度、挡数),行为(刹车、加速、减速和换挡)n书包含很多信息,拥有访问所包含信息的方法,一页一页的看,通过目录找到感兴趣的内容基本概念61.对象 (

3、object)n状态变量(variables)n行为方法(method)n对象就是变量和相关方法的软件集合n一个对象可以由其他对象组合而成,窗口(按钮,菜单条,文本框,状态栏等)n程序就是对象的集合,对象之间相互交互和通信完成任务n搭积木基本概念72.类 (class)n现实世界中,存在很多同类的对象,很多桌子、书、自行车n一种原型,一种抽象,一种共性,一个模板n实例,某类对象的一个特定实体,类是对象的一个抽象基本概念83.封装性n模块化-每个对象的源文件可以是相互独立的,可以被不同的程序调用,每个对象是一块积木,可以搭建不同的形状n信息隐藏-通常定义一个公共接口/方法实现对对象的访问,可以调

4、整对象的私有信息和方法,而不会对其他调用它的对象产生影响n可重用性基本概念94.继承性运输工具航空运输工具陆地运输工具水上运输工具人力驱动引擎驱动二轮四轮客运货运基本概念104.继承性n多重继承类A类B类C类D类F类Gn一个类拥有多个父类产生二义性,例类C和类D都有一个同名的方法,类G?nJava中仅仅支持单一继承,同时Java采用Interface(接口)实现多重继承而避免父类二义性基本概念115.多态性n表现在继承中方法的重写n子类从父类继承(extends扩展)而来n多个子类同属一个父类,所有子类有相同的父类n继承父类的方法n在不同的子类中有不同的表现形式n表现在用一个类中方法的重载基本

5、概念125.多态性n多态性在继承中的表现基本概念135.多态性classSquareextendsShapevoiddraw()System.out.println(Square.draw();voiderase()System.out.println(Square.erase()“);classTriangleextendsShapevoiddraw()System.out.println(Triangle.draw();voiderase()System.out.println(Triangle.erase();classShapevoiddraw()voiderase()classCir

6、cleextendsShapevoiddraw()System.out.println(Circle.draw();voiderase()System.out.println(Circle.erase();基本概念145.多态性public class Test public static Shape randShape() switch(int)(Math.random() * 3) default: case 0: return new Circle(); case 1: return new Square(); case 2: return new Triangle(); public

7、static void main(String args) Shape s = new Shape9; for(int i = 0; i s.length; i+) si = randShape(); for(int i = 0; i javacA.javaxhasprivateaccessinAa.x=100;print()hasprivateaccessinAa.print();2errors类成员的访问classAprivateintx;privatevoidprint()classBvoidtest()Aa=newA();a.x=100;a.print();28nprotected (

8、保护变量/保护方法)n容许类本身、子类(有一定限制)以及同一个包中所有类访问(先构造对象,再访问)类成员的访问classAprotectedintx;protectedvoidprint()classBvoidtest()Aa=newA();a.x=100;a.print();packageabc;classAprotectedintx;protectedvoidprint()packagexyz;importabc.A;classBextendsAvoidtest(Aa,Bb)a.x=100;a.print();b.x=100;b.print();/illegal/illegal/legal

9、/legal29n无修饰 (友好变量/友好方法)n容许类本身以及同一个包中所有类访问类成员的访问classAintx;voidprint()classBvoidtest()Aa=newA();a.x=100;a.print();packageabc;classAintx;voidprint()packageabc;classBvoidtest()Aa=newA();a.x=100;a.print();30n小结名称访问权修饰符类本身子类包所有类公共public默认-保护protected *私有private*指子类与父类不在同一个包中的情况类成员变量的访问31nstatic (静态变量/静态

10、方法)n类的变量/方法,独立于类的对象,可以直接根据类名调用classSstaticintA=12,B=34;staticvoidprint()classTestpublicstaticvoidmain(Stringargs)System.out.println(“A=“+S.A+“B=“+S.B);S.print();类成员变量32nstatic (静态变量/静态方法)classTestpublicvoidprint(intx)System.out.println(x);publicstaticvoidmain(Stringargs)intx=3;print(x);D:javacTest.j

11、avaTest.java:9:non-staticmethodprint(int)cannotbereferencedfromastaticcontextprint(x);1errorclassTestpublicvoidprint(intx)System.out.println(x);publicstaticvoidmain(Stringargs)intx=3;Testt=newTest();t.print(x);classTestpublicstaticvoidprint(intx)System.out.println(x);publicstaticvoidmain(Stringargs)

12、intx=3;print(x);static方法中仅仅可以调用其他static方法类成员33nfinal 变量/方法nfinal变量: 定义一个常数,即变量值不能改变final double AVOGADRO = 6.022e23;nfinal类: 不能有子类nfinal方法: 方法不能被重写(overriding)classChessAlgorithm.finalvoidnextMove(ChessPiecepieceMoved,BoardLocationnewLocation).类成员变量34n非访问控制修符n静态方法staticn属于类的方法n最终方法finaln不能被子类重新定义的方法

13、n抽象方法abstractn只有方法说明,没有具体实现n本地方法nativen以其他语言实现方法功能n同步方法synchronizedn用于多线程程序中的协调和同步类成员方法的访问35n例成员方法classTestpublicstaticvoidmain(Stringargs)doubled_product;AreamyArea;myArea=newArea();d_product=myArea.product();System.out.println(“myArea的面积是:”+d_product);classAreadoublewidth,height;voidsetV(doublew,d

14、oubleh)width=w;height=h;doubleproduct()returnwidth*height;36n方法参数成员方法publicstaticvoidmain(Stringargs)intx=3,y=4;Testp=newTest();System.out.println(x+y);p.addI(x,y);System.out.println(x+y);Vectorc=newVector();c.addElement(s1);c.addElement(s2);System.out.println(c.size();p.addV(c);System.out.println(c

15、.size();importjava.util.Vector;classTestprivatevoidaddV(Vectorv)v.addElement(s3);privatevoidaddI(inti1,inti2)i1+;i2+;形参和实参D:javaParameter343423注意1:类型匹配注意2:基本类型与复合类型参数传递的结果不同37n例成员方法classTestpublicstaticvoidmain(Stringargs)exA=newex();A.p();classexintu,v;voidp2(intx,inty)inti,j;for(i=1;i=x;i+)j=y+i;S

16、ystem.out.print(j+“”);voidp()u=3;v=2;p2(u,v);System.out.println();u+=v;v*=u;p2(u,v);u=3;v=2;u=5;v=10;输出结果:345111213141538n方法的重载(overload)n方法名相同,但方法的参数不同方法描述 方法名(标识符) 参数类型 方法返回值 绝对值 abs(a) int int绝对值 abs(a) long long绝对值 abs(a) float float绝对值 abs(a) double double public static int abs(inta) public sta

17、tic long abs(longa) public static float abs(floata)public static double abs(doublea) 成员方法39n方法的重写(overriding)n子类重写父类的方法成员方法classFathervoiddisplay() ;classSonextendsFathervoiddisplay();Fatherf=newFather();f.display();Sons=newSon();s.display();40构造方法n创建对象/实例化对象new 例1: Apple a = new Apple(); (创建对象)例2:

18、Apple a; (对象的说明) a = new Apple(); (实例化对象)1.对象的实例化通过构造方法(constructor)来实现2.构造方法的名字与类名相同3.构造方法没有返回值4.构造方法可以有多个,构成方法的重载(overload)41n例: 对象的实例化和初始化classjex6_8publicstaticvoidmain(Stringargs)Qangleq1=newQangle();Qangleq2=newQangle(20,50);Qangleq3=newQangle(q1);System.out.println(q1.width()+“”+q1.height();S

19、ystem.out.println(q2.width()+“”+q2.height();System.out.println(q3.width()+“”+q3.height();classQangleinta,h;Qangle()a=10;h=20;Qangle(intx,inty)a=x;h=y;Qangle(Qangler)a=r.width();h=r.height();intwidth()returna;intheight()returnh;输出结果:1020112050121020构造方法42n方法的重载(overload)构造方法classTreeintheight;Tree()p

20、rt(“Plantingaseeding”);height=0;Tree(inti)prt(“CreatingnewTreethatis”+i+“feettall”);height=i;voidinfo()prt(“Treeis”+height+“feetheight”);voidinfo(Strings)prt(s+“:Treeis”+height+“feetheight”);staticvoidprt(Strings)System.out.println(s);for(inti=0;i5;i+)Treet=newTree(i);t.info();t.info(“mytree”);newTr

21、ee();43n默认构造方法例 class Apple int color; Apple a = new Apple();n对象实例的判断: null例 Apple a; if (a = null) System.out.println(“Day dream”);构造方法运行时系统自动赋予一个空构造函数如Apple()44n构造方法构造方法classCmethodCmethod(booleanb)publicstaticvoidmain(Stringargs)Cmethodc1=newCmethod();Cmethodc2=newCmethod(false);classCmethodCmeth

22、od(booleanb)publicstaticvoidmain(Stringargs)/Cmethodc1=newCmethod();Cmethodc2=newCmethod(false);classCmethodCmethod(booleanb)Cmethod()publicstaticvoidmain(Stringargs)Cmethodc1=newCmethod();Cmethodc2=newCmethod(false);运行时系统自动赋予一个空构造方法,仅仅当该类没定义构造方法的情况下45抽象类(abstractclass)n一个未完成的类n仅仅抽象类可以包含抽象方法(abstrac

23、t methods)n抽象方法: 仅仅申明了方法,但未实现n有访问修饰词n返回值类型n方法名n参数列表n无方法体46抽象类(abstractclass)abstractclassPointintx=1,y=1;voidmove(intdx,intdy)x+=dx;y+=dy;alert();abstractvoidalert();abstractclassColoredPointextendsPointintcolor;classSimplePointextendsPointvoidalert()抽象方法:有访问修饰词、返回值类型、方法名和参数列表,无方法体47抽象类(abstractclas

24、s)n抽象类不能被实例化,例Point p = new Point(); n子类继承抽象类时,必须重写抽象方法,否则仍为抽象类abstractclassPointintx=1,y=1;voidmove(intdx,intdy)x+=dx;y+=dy;alert();abstractvoidalert();abstractclassColoredPointextendsPointintcolor;classSimplePointextendsPointvoidalert()Pointp=newSimplePoint();48import java.awt.*;import java.applet

25、.Applet;public class Car1 extends Applet public void paint(Graphics g) Car mycar=new Car(); g.drawString(起始位置+mycar.getwz(),10,20); g.drawString(前进100,10,35); mycar.qj(100); g.drawString(后退30,10,50); mycar.ht(30); g.drawString(当前位置+mycar.getwz(),10,65); class Car private int wz; public Car()wz=0; pu

26、blic void qj(int wz1)wz+=wz1; public void ht(int wz1)wz-=wz1; public int getwz()return wz; 例:car位置0car位置70car位置10049对象n引用对象的变量n格式: 对象名.变量名n引用对象的方法n格式: 对象名.方法名n例1nVector v = new Vector();nv.addElement(“hello world”);n例2nint a= 1, 2, 3, 4, 5; nint size = a.length;n例3nSystem.out.println();50对象的释放n将对象从内

27、存中清除n内存的管理(枯燥、容易出错)n垃圾回收(Garbage Collection)n垃圾搜集器(Garbage Collector)n周期性地释放不再被引用的对象,自动完成n手动完成,System.gc();npublic static void gc() - Runs the garbage collector. 51n例 对象用作方法的参数对象的使用classjex6_10publicstaticvoidmain(Stringargs)Spots=newSpot(2,3);System.out.println(“s点的坐标:”+s.getX()+“,”+s.getY();Transt

28、s=newTrans();ts.move(s,4,5);System.out.println(“s点的坐标:”+s.getX()+“,”+s.getY();classSpotprivateintx,y;Spot(intu,intv)setX(u);setY(v);voidsetX(intx1)x=x1;voidsetY(inty1)y=y1;intgetX()returnx;intgetY()returny;classTransvoidmove(Spotp,inth,intk)p.setX(p.getX()+h);p.setY(p.getY()+k);classjex6_10publicsta

29、ticvoidmain(Stringargs)Spots=newSpot(2,3);System.out.println(“s点的坐标:”+s.getX()+“,”+s.getY();Trans.move(s,4,5);System.out.println(“s点的坐标:”+s.getX()+“,”+s.getY();classSpotprivateintx,y;Spot(intu,intv)setX(u);setY(v);voidsetX(intx1)x=x1;voidsetY(inty1)y=y1;intgetX()returnx;intgetY()returny;classTransst

30、aticvoidmove(Spotp,inth,intk)p.setX(p.getX()+h);p.setY(p.getY()+k);classjex6_10publicstaticvoidmain(Stringargs)Spots=newSpot(2,3);System.out.println(“s点的坐标:”+s.getX()+“,”+s.getY();s.move(4,5);System.out.println(“s点的坐标:”+s.getX()+“,”+s.getY();classSpotprivateintx,y;Spot(intu,intv)setX(u);setY(v);void

31、setX(intx1)x=x1;voidsetY(inty1)y=y1;intgetX()returnx;intgetY()returny;voidmove(inth,intk)x=x+h;y=y+k;52第三章面向对象特征1.基本概念2.类的定义3.对象4.类的继承和多态5.接口和包6.常用工具类53类的继承n父类与子类的关系 (extends)n基本内容1.子类可调用父类的方法和变量,子类可增加父类中没有的方法和变量2.子类可重新定义父类的静态/实例变量3.子类可重新定义父类的静态/实例方法4.继承中的构造方法5.类成员访问修饰符与继承的关系54类的继承n子类可调用父类的方法和变量n子类可

32、增加父类中没有的方法和变量classVehicleStringbrand;voidsetB(Strings)brand=s;voidshowB()System.out.println(brand);classBusextendsVehicleintgas;voidsetG(intg)gas=g;voidshowG()System.out.println(gas);Busb=newBus();b.setB(“audi”);/*b.setG(100);b.showB();/*b.showG();子类继承父类的方法和变量,则这些方法和变量就属于子类,则子类对象对这些方法和变量的调用是显而易见的55

33、继承继承性性是软件复用的一种形式。是软件复用的一种形式。目的:是为了在目的:是为了在创建新类创建新类创建新类创建新类时,可以保留现有类的时,可以保留现有类的属性和方法,并能新增,这样就可以充分属性和方法,并能新增,这样就可以充分利用利用利用利用现有资源现有资源现有资源现有资源,减少,减少javajava程序中的重复代码。程序中的重复代码。一、类的继承性继承性是面向对象程序设计语言的最主要继承性是面向对象程序设计语言的最主要的特点,是其他语言(如面向过程语言)的特点,是其他语言(如面向过程语言)所没有的。所没有的。 56 与现实世界的遗传关系类似与现实世界的遗传关系类似父类和子类孩子孩子父亲父亲

34、继承继承 父类的属性和方法父类的属性和方法新类新类现有类现有类继承继承继承的内容:继承的内容: 父亲的外貌和性格等父亲的外貌和性格等57n继承中的super对象类的继承父类子类实例化一个子类对象thissuper调用父类的变量和方法调用子类的变量和方法581 1、实现继承的方法、实现继承的方法Java类的继承关系图:类的继承关系图:实现继承的方法:实现继承的方法:class extends 例:例:1.import java.applet.Applet; public class cari1 extends Applet 2.class B extends A 3.public class c

35、ar extends object objectB类类A类类C类类B1类类B2类类B11类类可以省略可以省略59举例:新类举例:新类B变量:变量:i , j , k方法:显示方法:显示i, j ;显示显示k ; 显示(显示(i+j+k) class B extends Aint k;void showk()System.out.println(k:+k);void sum()System.out.println(i+j+k:+(i+j+k);public class M1public static void main(String args)A father =new A();B son=ne

36、w B();father.i=10;father.j=20;father.showij();son.i=7;son.j=8;son.k=9;son.showij();son.showk();son.sum();i and j:10 20i and j:7 8k:9i+j+k:24private int i; int j;变量:变量:i, j方法:显示方法:显示i, j现有类现有类Aclass Aint i,j;void showij()System.out.println(i and j:+i+ +j);602 2、成员变量的隐藏、成员变量的隐藏隐藏:是指在子类中重新定义的父类的同名变量隐藏:

37、是指在子类中重新定义的父类的同名变量class Aint i,j;void showij()System.out.println(i and j:+i+ +j);class B extends Aint k;void showk()System.out.println(k:+k);void sum()System.out.println(i+j+k:+(i+j+k);public class M1public static void main(String args)A father =new A();B son=new B();father.i=10;father.j=20;father.s

38、howij();son.i=7;son.j=8;son.k=9;son.showij();son.showk();son.sum();int i,j;i and j:10 20i and j:0 0k:9i+j+k:24i and j:10 20i and j:7 8k:9i+j+k:24613 3、成员方法的覆盖、成员方法的覆盖覆盖:是指在子类中重新定义的父类的同名方法覆盖:是指在子类中重新定义的父类的同名方法class Aint i,j;void showij()System.out.println(i and j:+i+ +j);class B extends Aint k;void s

39、howk()System.out.println(k:+k);void sum()System.out.println(i+j+k:+(i+j+k);public class M1public static void main(String args)A father =new A();B son=new B();father.i=10;father.j=20;father.showij();son.i=7;son.j=8;son.k=9;son.showij();son.showk();son.sum();void showij()System.out.println(“覆盖了父类的成员方法

40、覆盖了父类的成员方法”);finali and j:10 20覆盖了父类的成员方法覆盖了父类的成员方法k:9i+j+k:24i and j:10 20i and j:7 8k:9i+j+k:24624 4、supersuper(父类父类 )和)和thisthis(子类子类)在需要给从父类继承的成员方法添加功能时,要使用在需要给从父类继承的成员方法添加功能时,要使用supperclass Aint i,j;void showij()System.out.println(i and j:+i+ +j);class B extends Aint k;void showk()System.out.pr

41、intln(k:+k);void sum()System.out.println(i+j+k:+(i+j+k);public class M1public static void main(String args)A father =new A();B son=new B();father.i=10;father.j=20;father.showij();son.i=7;son.j=8;son.k=9;son.showij();son.showk();son.sum();void showij()super.showij();System.out.println(“添添加加了了新新的的成成员员

42、方方法法”);i and j:10 20i and j:7 8添加新了的成员方法添加新了的成员方法k:9i+j+k:24i and j:10 20i and j:7 8k:9i+j+k:2463在子类隐藏了父类的变量时,要用在子类隐藏了父类的变量时,要用this区分该同名变量的归属区分该同名变量的归属class Aint i,j;void showij()System.out.println(i and j:+i+ +j);class B extends Aint k;void showk()System.out.println(k:+k);void sum()System.out.print

43、ln(i+j+k:+(i+j+k);public class M1public static void main(String args)A father =new A();B son=new B();father.i=10;father.j=20;father.showij();son.i=7;son.j=8;son.k=9;son.showij();son.showk();son.sum();int i,j;i and j:10 20i and j:0 0k:9i+j+k:24i and j:10 20i and j:7 8k:9i+j+k:24void zh()super.i=this.

44、i; super.j=this.j;son.zh();64super()和和this()super()可以用来调用父类的构造方法可以用来调用父类的构造方法this()可以用来调用子类的构造方法可以用来调用子类的构造方法注意:注意: 1、构造方法与类同名,因此继承构造方法是没有意义的;、构造方法与类同名,因此继承构造方法是没有意义的; 2、super()和和this()只能在当前子类中使用只能在当前子类中使用作用是调用构造方法:作用是调用构造方法:65类的多态nclass Intsortnpublic String sort(int a,int b) /定义两个数排序的方法n if(ab)ret

45、urn a+” ”+b;n else return b+” ”+a;npublic String sort(int a,int b,int c) /定义三个数排序的方法n int swap;n if(ab)swap=a;a=b;b=swap;n if(ac)swap=a;a=c;c=swap;n if(bc)swap=b;b=c;c=swap;n return a+” ”+b+” ”+c;n66第三章面向对象特征1.基本概念2.类的定义3.对象4.类的继承和多态5.接口和包6.常用工具类67n接口是对abstract类的进一步扩展n接口中的方法都是未实现的(类似于抽象方法),目的是在实现接口的

46、类之间建立一种协议n接口中的变量都是常量n定义n一个类符合某个或一组接口,利用implements接口(interface) public interface 接口名 成员变量;方法声明; class 类名 implements 接口1, 接口2 68n接口名修饰npublic: 无任何访问限制n无修饰: 仅限于本包中n接口变量默认都是“public static final”接口(interface)69JavaJava程序中把一些常用的常量和方法(无方法体)程序中把一些常用的常量和方法(无方法体)放在一起,提供给包中所有类使用,称作接口放在一起,提供给包中所有类使用,称作接口。目的:实现多

47、重继承目的:实现多重继承接口(interface)1、系统类接口、系统类接口2、自定义接口、自定义接口public class Max extends Applet implements ActionListenerinterface N1class c1 implements N170import java.awt.*;import java.awt.event.*;import java.applet.Applet;public class M extends Applet implements MouseListener,MouseMotionListener int x1,y1,x2,

48、y2; public void init()addMouseListener(this); addMouseMotionListener(this);public void paint(Graphics g)g.drawLine(x1,y1,x2,y2);g.drawString(x1:+x1+ y1:+y1+ x2:+x2+ y2:+y2,50,50); public void mousePressed(MouseEvent e) x1=e.getX();y1=e.getY();public void mouseClicked(MouseEvent e)public void mouseEx

49、ited(MouseEvent e)public void mouseEntered(MouseEvent e)public void mouseReleased(MouseEvent e)public void mouseDragged(MouseEvent e)x2=e.getX();y2=e.getY();repaint();public void mouseMoved(MouseEvent e) 1 1、系统类接口、系统类接口712 2、自定义接口、自定义接口(1)创建格式:)创建格式:修饰符修饰符 interface N1例6.4_1:interface N1 int year=20

50、06; /year默认为默认为static final常量常量 int age(); /无方法体,在使用时需加入方法体无方法体,在使用时需加入方法体 void output(); (2)接口继承:)接口继承:单继承和多继承单继承和多继承static finalabstract72public class M implements N1 String xm;int sr; M(String a,int b)xm=a;sr=b; public int age()return year-sr; public void output()System.out.println(xm+的年龄为:的年龄为:+

51、this.age(); public static void main(String aa) M a=new M(张弛张弛,1988); a.output(); 例:例:731、接口的单继承、接口的单继承例:例:interface Avoid F1(); interface B extends A void F2(); class M1 implements B /引用接口引用接口B void F1() void F2() 74例:例:interface Avoid F1(); interface Cvoid F3(); interface B extends A,C void F2(); c

52、lass M1 implements B /引用接口引用接口B void F1() void F2() void F3() 2、接口的多继承、接口的多继承 75n为什么需要包?n使Java类更容易发现和使用n防止命名冲突n进行访问控制 n层次结构,特定的功能nA package is a collection of related classes and interfaces providing access protection and namespace management. nimport包(package)76Java允许把多个类收集在一起成为一组,称作包允许把多个类收集在一起成为一

53、组,称作包(package)。)。目的:组织类的存放位置目的:组织类的存放位置一、包(类的容器,由类和接口组成)一、包(类的容器,由类和接口组成)包包文件夹文件夹类类文件文件例:例:比喻:比喻:windows文件存放方式文件存放方式77包和文件夹包和文件夹P1P2包包F:cx文档文档123.txt使用时:使用时:java.applet.Appletjava.applet.*具体类具体类78 P1Class1_1 Class1_n interface1Class2_1 Class2_n interface2 包的组成:包的组成:包由类和接口组成:包由类和接口组成:例:例:package p1;c

54、lass Aclass B implements Cinterface C可选可选791 1、javajava系统包系统包由由java系系统统提提供供,又又称称API(Application program interface)特特点点:系系统统包包以以“java.”开开头头,有有固固定定的功能,用户不能修改,只能使用。的功能,用户不能修改,只能使用。80JavaJava常用包常用包API包功 能java.applet提供通用Applet的支持,是所有Applet的基类java.awt组建标准GUI,包含了众多的图形组件、方法和和事件java.lang 包含java语言的核心类库实现java网

55、络功能的类库java.io标准输入输出类java.util提供各种使用工具类81822 2、包的引用、包的引用(1)导入包语句)导入包语句与变量使用前一样,包在使用前也有声明(引入)。与变量使用前一样,包在使用前也有声明(引入)。例:例:import java.awt.*; import java.lang;(默认,可省)默认,可省)(2 2)包的路径(见下页)包的路径(见下页)设置系统环境变量:设置系统环境变量:Classpath值:值: ; c:j2sdk1.4.1lib; f:P1用户当前用户当前运行目录运行目录系统类库系统类库API目录目录用户自定用户自定义目录义目录83(2 2)包的

56、路径()包的路径(classpathclasspath)P1P2包包F:cxtxt123.txtWindows文件和文件和Java类类在使用时的对比在使用时的对比:java.applet.Appletjava.applet.*具体类具体类843.3.自定义包自定义包(1)创创建建自自定定义义包包:package ;注注意意:该该语语句句写写在在程程序序第第一一行行,每每个个程程序序只只能能有有一一句句,若若没没有有包包语句则为默认包语句则为默认包(2)设置包路径)设置包路径(classpath)程序编译后,你可以像引用系统类那样来引用自定义类。程序编译后,你可以像引用系统类那样来引用自定义类。

57、(3)包引用格式:)包引用格式:import ;如如没没有有包包引引用用语语句句,则则为为引引用用默默认认包包 (import java.lang;)85 例:例: package P1; / 程序包语句程序包语句 import java.awt.*; / 包引入语句包引入语句 public class Class1 implements A / 类定义类定义 class Class2 / 类定义类定义 interface A / 接口的定义接口的定义 package P2; import P1.*;class Class3 保存为保存为Class1.java保存为保存为Class3.java

58、保存路径为保存路径为f:cx86程序调试过程:程序调试过程:1、保存:、保存: f:cxClass1.java2、编译:、编译:javac d Class1.java编译结果:编译结果: f:cxP1 Class1.class Class2.class A.class3、运行:运行:java P1.Class1f:cx87第三章面向对象特征1.基本概念2.类的定义3.对象4.类的继承和多态5.接口和包6.常用工具类88常用工具类nJava 2 Platform PackagesnJavaTM 2 Platform, Standard Edition, v 1.4.1 API Specifica

59、tionnJava语言基础类、Java类库n定义描述见Java2SDK文档n135个包(package)njava.applet;java.awt;java.awt.eventnjava.io;java.lang;njava.sql;java.text;java.utilnjavax.swingnn2723个类(class)和接口(interface)n实现d:j2sdk1.4.1_01jrelibrt.jar(22.4MB)njartvfrt.jar|more89常用工具类njava.lang包nObject类nSystem类nMath类n基本数据类型的包装类n字符串操作类nString类n

60、StringBuffer类nStringTokenizer类(java.util包)nRuntime类90java.lang.Object类nClass Object is the root of the class hierarchy. Every class has Object as a superclass. nAll objects, including arrays, implement the methods of this class. n子类可以对Object类的方法进行重写构造方法-public ObjectObject()实例方法1.protectedObjectclon

61、e()throwsCloneNotSupportedException2.publicbooleanequals(Objectobj)3.protectedvoidfinalize()throwsThrowable4.publicfinalClassgetClass()5.publicinthashCode()6.publicfinalvoidnotify()7.publicfinalvoidnotifyAll()8.publicStringtoString()9.publicfinalvoidwait()throwsInterruptedException10.publicfinalvoid

62、wait(longtimeout)throwsInterruptedException11.publicfinalvoidwait(longtimeout,intnanos)throwsInterruptedException91java.lang.System类n静态变量npublicstaticfinalInputStreamin(标准输入流)npublicstaticfinalPrintStreamout(标准输出流)npublicstaticfinalPrintStreamerr(标准错误输出流)n静态方法npublicstaticvoidarraycopy(Objectsrc,int

63、srcPos,Objectdest,intdestPos,intlength)npublicstaticvoidexit(intstatus)npublicstaticvoidgc()npublicstaticlongcurrentTimeMillis()n92java.lang.System类n获取当前时间npublic static long currentTimeMillis()nReturns: the difference, measured in milliseconds, between the current time and midnight, January 1, 1970

64、 UTC (Universal time coordinated).publicstaticvoidmain(Stringargs)longstart=System.currentTimeMillis();longend=System.currentTimeMillis();System.out.println(end-start);93java.lang.Math类n静态变量npublicstaticfinaldoubleEnpublicstaticfinaldoublePIn静态方法npublicstaticdoubleabs(doublea)npublicstaticdoubleceil

65、(doublea)npublicstaticdoublefloor(doublea)npublicstaticdoublemax(doublea,doubleb)n94基本数据类型的包装类n基本数据类型: byte, short, int, long, float, double, boolean, char n对应的包装类: Byte, Short, Integer, Long, Float, Double, Boolean, Charactern作用n包装类对象中包含有一个对应基本类型的值n提供有基本类型和字符串(String)之间的转换函数n定义有一些常数和方法95基本数据类型的包装类n

66、常数定义bytelargestByte=Byte.MAX_VALUE;/127short largestShort=Short.MAX_VALUE;/32767intlargestInteger =Integer.MAX_VALUE;/2147483647longlargestLong=Long.MAX_VALUE;/9223372036854775807floatlargestFloat=Float.MAX_VALUE;/3.40282e+38doublelargestDouble=Double.MAX_VALUE;/1.79769e+30896基本数据类型的包装类n基本类型和字符串(Str

67、ing)之间的转换nInteger类举例n字符串转换为整数npublic static int parseInt(String s) throws NumberFormatExceptionnpublic static int parseInt(String s, int radix) throws NumberFormatExceptionStrings=“123”;inti=Integer.parseInt(s);parseInt(0,10)parseInt(473,10)parseInt(-0,10)parseInt(-FF,16)parseInt(1100110,2)parseInt(

68、2147483647,10)parseInt(-2147483648,10)parseInt(2147483648,10)parseInt(99,8)parseInt(Kona,10)parseInt(Kona,27)returns0returns473returns0returns-255returns102returns2147483647returns-2147483648throwsaNumberFormatExceptionthrowsaNumberFormatExceptionthrowsaNumberFormatExceptionreturns41178797基本数据类型的包装类

69、n基本类型和字符串(String)之间的转换nInteger类举例n整数转换为字符串npublicstaticStringtoString(inti)npublicstaticStringtoString(inti,intradix)npublicstaticStringtoBinaryString(inti)npublicstaticStringtoHexString(inti)npublicstaticStringtoOctalString(inti)inti=123;Strings1=Integer.toString(i);Strings2=Integer.toString(i,10);

70、Strings3=Integer.toString(i,2);Strings4=Integer.toString(i,8);Strings5=Integer.toString(i,16);Strings6=Integer.toBinaryString(i);Strings7=Integer.toHexString(i);Strings8=Integer.toOctalString(i);12312311110111737b11110117b17398字符串操作类n三个类njava.lang.String类njava.lang.StringBuffer类njava.util.StringToke

71、nizer类n不同的应用场合99字符串操作类njava.lang.String类字符串/字符序列n构造方法npublicString()npublicString(bytebytes)npublicString(bytebytes,intoffset,intlength)npublicString(bytebytes,StringcharsetName)npublicString(charvalue)npublicString(charvalue,intoffset,intcount)npublicString(Stringoriginal)100字符串操作类njava.lang.String

72、类字符串/字符序列n构造方法的使用Strings=newString();charc=a,b,c;Strings=newString(c);charc=语,言;Strings=newString(c);byteb=97,98,99;Strings=newString(b);Strings=“abc”;Strings=“语言”;101字符串操作类njava.lang.String类字符串/字符序列n判断字符串相等的方法npublicbooleanequals(ObjectanObject)判断是否是同一个对象,是ture;然后anObject是否为一个字符串对象,否false;判断是否内容相同n

73、publicbooleanequalsIgnoreCase(StringanotherString)判断逻辑与equals相同,仅仅在判断内容上不考虑大小写npublicintcompareTo(Objecto)若o不是字符串对象,则抛错;若是则调用下面的函数npublicintcompareTo(StringanotherString)判断两个字符串的内容是否相同,是0;否不等于0的整数npublicintcompareToIgnoreCase(Stringstr)基本功能同上,仅仅在判断时不考虑大小写102字符串操作类njava.lang.String类字符串/字符序列n判断字符串相等的方

74、法Strings1=java语言;Strings2=JavA语言;System.out.println(s1.equals(s2);System.out.println(s1.equalsIgnoreCase(s2);System.out.println(pareTo(s2);System.out.println(pareToIgnoreCase(s2);运行结果:falsetrue320103字符串操作类njava.lang.String类字符串/字符序列n获取长度npublicintlength() 字符串的长度,即包含多少个字符n获取特定子串(substring)和字符npublicSt

75、ringsubstring(intbeginIndex)npublicStringsubstring(intbeginIndex,intendIndex)nbeginIndex:起始索引位置(包含)nendIndex:结束索引位置(不包含)npubliccharcharAt(intindex)104字符串操作类njava.lang.String类字符串/字符序列n方法举例Strings1=java语言;Strings2=JavA语言;System.out.println(s1.length();System.out.println(s2.length();System.out.println(

76、s1.substring(0,4);System.out.println(s1.substring(4);System.out.println(s2.substring(0,4);System.out.println(s2.substring(4);System.out.println(s1.charAt(0);运行结果:66java语言JavA语言j105字符串操作类njava.lang.String类字符串/字符序列n字符串前缀(prefix)/后缀(suffix)的判断npublicbooleanstartsWith(Stringprefix)判断字符串是否以一特定的字符串开头npubl

77、icbooleanstartsWith(Stringprefix,inttoffset)npublicbooleanendsWith(Stringsuffix)判断字符串是否以一特定的字符串开头System.out.println(java语言.startsWith(java);System.out.println(java语言.startsWith(ava,1);System.out.println(java语言.endsWith(语言);106字符串操作类njava.lang.String类字符串/字符序列n查询特定字符/字符串的位置npublicintindexOf(intch)该字符在

78、字符串中第一次出现位置的索引值;否则返回-1npublicintindexOf(intch,intfromIndex)npublicintindexOf(Stringstr)npublicintindexOf(Stringstr,intfromIndex)npublicintlastIndexOf(intch)npublicintlastIndexOf(intch,intfromIndex)npublicintlastIndexOf(Stringstr)npublicintlastIndexOf(Stringstr,intfromIndex)从前往后从后往前107字符串操作类njava.lan

79、g.String类字符串/字符序列n方法举例Strings=“java语言”;System.out.println(s.indexOf(a);System.out.println(s.indexOf(a,2);System.out.println(s.indexOf(“a”);System.out.println(s.indexOf(“语言”);System.out.println(s.lastIndexOf(a);System.out.println(s.lastIndexOf(v,1);System.out.println(s.lastIndexOf(“语言”);System.out.pr

80、intln(s.lastIndexOf(“v”,2);运行结果:13143-142java语言108字符串操作类njava.lang.String类字符串/字符序列n字符串转变为数组npublic byte getBytes() 将字符串转变为一个字节数组npublic byte getBytes(StringcharsetName) throws UnsupportedEncodingException 按特定的字符编码格式将字符串转变为一个字节数组npublic char toCharArray() 将字符串转变为一个字符数组109字符串操作类njava.lang.String类字符串/字

81、符序列n方法举例Strings=java语言;charc=s.toCharArray();System.out.println(c.length);byteb=s.getBytes();System.out.println(b.length);b=s.getBytes(ISO8859-1);System.out.println(b.length);运行结果:686中文Windows操作系统:默认字符集GB2312其他系统:默认字符集ISO-8859-1110字符串操作类njava.lang.String类字符串/字符序列n字符串npublicStringsplit(Stringregex)11

82、1字符串操作类njava.lang.String类字符串/字符序列n其他方法npublic String concat(Stringstr) 连接字符串 cares.concat(s) returns caress to.concat(get).concat(her) returns together npublic String replace(charoldChar, charnewChar) 在字符串中进行字符替换 mesquite in your cellar.replace(e, o) returns mosquito in your collar” JonL.replace(q,

83、x) returns JonL (no change) 112字符串操作类njava.lang.String类字符串/字符序列n其他方法npublic String trim() 将字符串头尾的空格字符删除npublic String toLowerCase() 字符串中字符转为小写npublic String toUpperCase() 字符串中字符转为大写n一些静态方法npublic static String valueOf(booleanb) npublic static String valueOf(charc) npublic static String valueOf(inti)

84、 npublic static String valueOf(longl) npublic static String valueOf(floatf) npublic static String valueOf(doubled) 113字符串操作类njava.lang.String类字符串/字符序列nQuizStrings1=newString(“java”);Strings2=newString(“java”);System.out.println(s1=s2);System.out.println(s1.equals(s2);System.out.println(pareTo(s2);运行

85、结果:falsetrue0truetrue0falsetrue0Strings3=“java”;Strings4=“java”;System.out.println(s3=s4);System.out.println(s3.equals(s4);System.out.println(pareTo(s4);System.out.println(s2=s4);System.out.println(s2.equals(s4);System.out.println(pareTo(s4);结论:1.Strings1=“abc”;字符串常量对象(immutable)Strings2=“abc”;不同常量对

86、象共享同一对象2.其他字符串对象则可理解为对字符串常量对象进行了一层包装System.out.println(s2.intern()=s4);true114字符串操作类njava.lang.String类字符串/字符序列nQuizpackagetestPackage;classTestpublicstaticvoidmain(Stringargs)Stringhello=Hello,lo=lo;System.out.println(hello=Hello);System.out.println(Other.hello=hello);System.out.println(other.Other.

87、hello =hello);System.out.println(hello=(Hel+lo);System.out.println(hello=(Hel+lo);System.out.println(hello=(Hel+lo).intern();classOtherstaticStringhello=Hello;运行结果:truetruetruetruefalsetruepackageother;publicclassOtherstaticStringhello=Hello;结论:1.Stringscomputedbyconstantexpressionsarecomputedatcomp

88、iletimeandthentreatedasiftheywereliterals.2.Stringscomputedatruntimearenewlycreatedandthereforedistinct.115字符串操作类njava.lang.StringBuffer类n一个可变(mutable)/动态的字符序列n构造方法npublicStringBuffer()npublicStringBuffer(Stringstr) n主要方法n添加(append)和插入(insert, 指定位置)npublic StringBuffer append(booleanb) npublic Strin

89、gBuffer insert(intoffset, booleanb) nboolean, char, char, double, float, int, long, Stringn转换为字符串 - public String toString() 116字符串操作类njava.lang.StringBuffer类方法举例Strings=java语言;StringBufferbuffer=newStringBuffer(s);buffer.append(“easy”);buffer.insert(6,“is“);s=buffer.toString();System.out.println(s)

90、;运行结果:java语言iseasy.117字符串操作类n字符串的连接运算(Concatenation)n“java”和“语言”1.String s = “java” + “语言”;2.String s = “java”.concat(“语言”);3.StringBuffer buffer = new StringBuffer(“java”); buffer.append(“语言”); String s = buffer.toString();n常用第1种和第3种方法118字符串操作类n字符串的连接运算(Concatenation)n+与append方法比较classMyTimerprivat

91、efinallongstart;publicMyTimer()start=System.currentTimeMillis();publiclonggetElapsed()returnSystem.currentTimeMillis()-start;publicclassAppDemostaticfinalintN=47500;publicstaticvoidmain(Stringargs)MyTimermt=newMyTimer();Stringstr1=;for(inti=1;i=N;i+)str1=str1+*;System.out.println(#1stime=+mt.getElap

92、sed();mt=newMyTimer();StringBuffersb=newStringBuffer();for(inti=1;i=N;i+)sb.append(*);Stringstr2=sb.toString();System.out.println(#2stime=+mt.getElapsed();运行结果:#1stime=138750#2stime=20效率和代码优化119字符串操作类n字符串的连接运算(Concatenation)n+: 算术运算符1.int a = 1, b = 2; String c = “ men”;2.String s = a + b + c;n3 men

93、n隐含结合率 (a + b) + c1.String s = c + b + a;nmen 21120字符串操作类njava.util.StringTokenizer类n将一个字符串按特定的要求切分开nOne String more Tokensn构造方法npublic StringTokenizer(Stringstr) 按默认的分隔符将字符串分割 四个字符“tnrf”npublic StringTokenizer(Stringstr, Stringdelim) 按指定的分割符将字符串分割n方法npublic boolean hasMoreTokens() 判断是否有tokennpublic

94、 String nextToken() 得到下一个token121字符串操作类njava.util.StringTokenizer类n方法举例Strings=thisisatest;StringTokenizerst=newStringTokenizer(s);while(st.hasMoreTokens()System.out.println(st.nextToken();运行结果:thisisatestStrings=this:is:a:test”;StringTokenizerst=newStringTokenizer(s,“:”);while(st.hasMoreTokens()Sys

95、tem.out.println(st.nextToken();运行结果:thisisatest122执行外部程序njava.lang.Runtime类npublicProcessexec(Stringcommand)throwsIOExceptionnExecutesthespecifiedstringcommandinaseparateprocess.npublicProcessexec(Stringcmdarray)throwsIOExceptionnExecutesthespecifiedcommandandargumentsinaseparateprocess.123执行外部程序njava.lang.Runtime类nWindow NT/2000/XPncmd.exe /C 命令nWindows 95/ /C 命令124执行外部程序njava.lang.Runtime类importjava.io.IOException;classTestpublicstaticvoidmain(Stringargs)throwsIOExceptionRuntime.getRuntime().exec(cmd.exe/C+args0);125作业:1.P139:n问答题:3-10、3-24、3-26、3-282.P150:n编程题:3-1126

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号