版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
情境3产品库存管理系统面向对象设计情境3产品库存管理系统面向对象设计学习情境描述要求根据第一个情境的需求分析结果,学生成立项目开发小组,划分角色,推选项目经理和CTO(首席技术师),程序员。经过讨论给出产品库存管理系统中的实体类:入库单、出库单、库存和用户类和控制类接口的详细设计;利用情境2搭建好的环境,对每个类予以编程实现。学习情境描述要求根据第一个情境的需求分析结果,学生成所需知识类的定义与对象的创建构造方法的作用及应用面向对象三大特征:封装性、继承性和多态性的Java语言实现抽象类与接口的应用包的创建与使用访问控制符的应用异常处理所需知识类的定义与对象的创建重点及难点构造方法的作用及应用面向对象三大特征:封装性、继承性和多态性的Java语言实现抽象类与接口的应用异常处理重点及难点构造方法的作用及应用能力目标培养学生面向对象的编程能力培养学生良好的团队合作意识及沟通协调能力、接收新知识的能力培养学生分析问题、解决问题的能力、创新能力以及逻辑思维能力
能力目标培养学生面向对象的编程能力任务一用Java语言描述现实世界中的Person。学生讨论确定Person的特征
譬如:name-姓名,age-表示年龄,sex-表示性别等。确定Person相关的行为
譬如:吃饭、睡觉等。用Java语言实现Person类任务一用Java语言描述现实世界中的Person。学生讨复习引入面向对象与面向过程的区别?复习引入面向对象与面向过程的区别?面向对象编程面向对象编程是软件设计与实现的有效方法,它将客观世界中存在的事物看作对象,每个客观事物都有自己的特征和行为。面向对象编程面向对象编程是软件设计与实现的有效方法,对象的基本概念 变量方法在现实生活中在计算机程序中客观世界的实体程序中对象对象具有两方面的含义(考虑从哪些方面描述对象)对象的基本概念 变量方法在现实生活中在计算机程序中客观世界面向对象的基本概念类是抽象的,对象是具体的具有相同特征和行为的对象被抽象为类。类是对象的模板,包括一个对象的所有数据和代码。类的示例形状类动物类汽车类面向对象的基本概念类是抽象的,对象是具体的具有相同特征和行为对象对
象面向对象编程的核心为计算机应用程序提供实用基础完成特定任务表示现实世界中的实体“对象是存在的具体实体,具有明确定义的状态和行为。”对象对象面向对象编程的核心为计算机应用程序提供实用基础完成对象的示例收银员对象顾客对象顾客姓名:朱丽叶年龄:28体重:52千克操作:购买商品状态姓名:布兰尼职衔:收银员年龄:35体重:60千克操作:收款打印帐单行为对象的示例收银员对象顾客对象顾客状态姓名:布兰尼行为消息传递“消息指一个对象为执行某项特定操作而向另一个对象发送的请求”消息传递当需要执行一项特定操作时,通过向已为其定义此项操作的对象发送消息来请求对象之间通过传递消息实现相互通信消息传递“消息指一个对象为执行某项特定操作而向另一个消息传递类和对象的示例雇员收银员系统管理员仓库管理员促销员采购经理类和对象的示例雇员收银员系统管理员仓库管理员促销员采购经理面向对象技术的实现对象类实例化抽象计算机世界实体抽象数据类型现实世界抽象映射计算机逻辑的实现对象、类和实体的关系类是创建对象的模板,对象是类的实例面向对象技术的实现对象类实例化抽象计算机世界实体抽象数据类型类的基本概念现实生活中的对象classCar{intcolor;intname;intspeed;
voidbrake(){…}voidspeedUp(){…}voidslowDown(){…}}抽象数据类型程序中的对象映射描述实现类的基本概念现实生活中的对象classCar{抽象数据类定义类定义中必须要写类名,应该使用Java语言合法的标识符来命名类名不能与java中已定义好的类名相同格式:[修饰符]class类名[extends父类名][implements接口名表] {
成员变量声明方法成员声明}
其中class、extends和implements都是Java的关键字。类的声明类体类定义类定义中必须要写类名,应该使用Java语言合法的标识符类中的方法6-1方法的定义方法的名称参数列表方法的主体方法返回的对象类型或原始类型类中的方法6-1方法的定义方法的名称参数列表方法的主体方法方法体若局部变量与类的成员变量同名,则类的成员变量被隐藏。方法体是对方法的实现,它包括局部变量的声明以及所有合法的Java指令。方法体中声明的局部变量的作用域在该方法内部。方法体若局部变量与类的成员变量同名,方法体是对方法的实类的定义举例classCar{intcolor;intname;intspeed;
voidbrake(){…}voidspeedUp(){…}voidslowDown(){…}}
类的定义举例classCar{类的实现任务一实现classPerson{ Stringname; intage; Stringsex; publicvoideat() { System.out.println("It'sdelicious!"); }}类的实现任务一实现classPerson【实战】:定义一个名为Rectangle表示长方形的类,它包含double类型的长length和宽width两个数据成员和设置长方形长宽值的方法setDim()、计算长方形面积的方法area()。
类的实现【实战】:定义一个名为Rectangle表示长方形的类,它包对象的创建实例化初始化对象的声明对象的创建对象的创建实例化初始化对象的声明对象的创建声明类名对象名;声明并不为对象分配内存空间,而只是分配一个引用空间声明类名对象名;声明并不为对象分配内存空间,而实例化类名对象名=new类名()例:Personp=newPerson();运算符new为对象分配内存空间,它调用对象的构造方法,返回引用实例化类名对象名=new类名()例:Perso初始化另外执行构造方法,可进行初始化当一个变量被创建时,会对其中各种类型的成员变量自动按下表进行初始化赋值。初始化另外执行构造方法,可进行初始化当一个变量被创建时,对象的使用访问对象成员的一般形式为:对象名.成员变量名对象名.成员方法名()
运算符”.”在这里称为成员运算符对象的使用访问对象成员的一般形式为:运算符”.”在这里称为成创建对象举例classTestPerson{ publicstaticvoidmain(String[]args) { Personp1=newPerson(); ="Tom"; p1.age=12; p1.sex="male"; p1.eat(); }}按照前面设计Person类来充当生产车间,创建Person对象创建对象举例classTestPerson按照前面设计任务二通过构造方法,初始化Person类的实例,为其成员变量赋初值。任务二通过构造方法,初始化Person类的实例,为其成员构造方法在Java中,任何变量在被使用前都必须先设置初值。Java提供了为类的成员变量赋初值的专门功能:构造方法。构造方法在Java中,任何变量在被使用前都必须先设置初值构造方法的特点构造方法名与类名相同。构造方法不返回任何值,也没有返回类型。每一个类可以有零个或多个重载的构造方法。若没有为一个类显式的定义构造方法,则当创建类对象时,编译器将自动为它创建一个没有参数的默认构造方法.构造方法只能在创建对象时通过new关键字来自动调用。注意:一旦我们自己定义了构造方法,系统将不再为我们提供默认的不带参数的构造方法。构造方法的特点构造方法名与类名相同。注意:一旦我们自己定义了classPerson{ Stringname; intage; Stringsex; publicPerson(Strings1) { name=s1; } publicPerson(Strings1,intx) { name=s1; age=x; }任务二实现publicPerson(Strings1,intx,Strings2) { name=s1; age=x; sex=s2; } publicvoideat() { System.out.println("It'sdelicious!"); }}
classTestPerson{ publicstaticvoidmain(String[]args) { Personp1=newPerson("Tom"); Personp2=newPerson("John",20); Personp3=newPerson("Bob",22,"male"); System.out.println(+p1.age+p1.sex); System.out.println(+p2.age+p2.sex); System.out.println(+p3.age+p3.sex); }}通过构造方法赋初值classPerson任务二实现publicPersonThis引用句柄构造方法的形式参数与类的成员变量名相同在构造方法中调用其他重载的构造方法,用this(参数列表)的形式自主学习内部类的定义和使用。This引用句柄构造方法的形式参数与类的成员变量名相同自主学面向对象的基本特征封装性、继承性、多态性是面向对象的三个主要特性。特征描述封装性通过提供一个或多个公有(public)方法,实现对该类的私有成员变量的访问和修改继承性通过extends关键字实现子类继承父类的所有非私有成员多态性通过方法重载和方法重写实现方法的多态性面向对象的基本特征封装性、继承性、多态性是面向对象的三个主要封装性的引入classPerson{ Stringname; intage; Stringsex; publicvoideat() { System.out.println("It'sdelicious!"); }}
classTestPerson{publicstaticvoidmain(String[]args) { Personp1=newPerson(); ="Tom";
p1.age=-12;//非法的值 p1.sex="male"; System.out.println(“p1的年龄是:”+p1.age); }}通过实例启发学生思考为什么引入封装性?封装性的引入classPersonclassTestPe封装性的实现私有数据公有方法外部世界所谓封装,就是信息隐藏,隐藏对象的实现细节,不让用户看到封装性的实现私有数据公有方法外部世界所谓封装,就是信息隐藏,封装的示例3-1接口
采购经理罗杰斯先生法拉力公司.迪斯尼汽车公司.市场经理雪莉女士
要求封装的示例3-1接口采购经理罗杰斯先生法拉力公司.迪斯
封装的示例3-2有选择地提供数据法拉力公司迪斯尼汽车公司公共电话号码电子邮箱产品种类私有备件的制造方法备件库存备件的制造成本公共电话号码电子邮箱汽车种类私有汽车的组装方法汽车库存汽车的组装成本封装的示例3-2有选择地提供数据法拉力公司迪斯尼汽车公封装的示例3-3
实体法拉力公司实体迪斯尼汽车公司
AutiLtd.ButoLtd.属性电话号码电子邮箱产品种类现有存货数量雇员详情所需物料详情属性电话号码电子邮箱汽车种类汽车规格雇员详情库存详情经销商详情方法接收订单备件的制造方法计算备件的制造成本计算利润率方法发出订单汽车的组装方法计算汽车的组装成本计算工资发出订单编制必要报告封装的示例3-3实体法拉力公司实体迪斯尼汽车公司Au设置器和访问器方法设置私有成员变量值的方法称为设置器方法,通常为:publicvoidsetX(类型x){this.x=x; }访问私有成员变量值的方法称为访问器方法,通常为:public类型getX() {returnx; }设置器和访问器方法设置私有成员变量值的方法称为设置器方法,通封装举例classPerson{
privateintage; publicvoidsetAge(inti) { if(i<0||i>130) return; age=i; } publicintgetAge() { returnage; }}将其设为私有的方法设为公有封装举例classPerson{ 将其设为私有的方法设为公封装的好处封装的优点可进行数据检查便于修改,增强代码的可维护性隐藏类的实现细节封装的好处封装的优点可进行数据检查便于修改,增强代码的可维护任务三定义Person类的子类Student类任务三定义Person类的子类Student类继承性类继承是指一个类可以继承其他类的非私有成员,实现代码复用。被继承的类称为父类,继承父类后产生的类称为子类。继承性类继承是指一个类可以继承其他类的非私有成员,实现代码复继承父类
子类父类/子类是相对的Cow类Lion类Tiger类Animals类Carnivorous类Herbivorous类Coat类继承父类子类父类/子类是相对的CowLionTiger继承的实现classSubClassextendsSuperClass{……}Java中的继承是通过extends关键字来实现的。关键字继承的实现classSubClassextends任务三实现classStudentextendsPerson{Stringschool; publicvoidstudy(){ System.out.println("Studding");}publicstaticvoidmain(String[]args){ Personp=newPerson(); ="Tom"; p.age=30; p.getInfo(); Students=newStudent();="John";s.age=16;s.school=“清华大学”;s.getInfo();s.study();}}
任务三实现classStudentextendsPer继承的特点继承的特点具有层次结构子类继承了父类的非私有属性和方法Object是所有类的超类注意:在Java语言中,只允许单继承。继承的特点继承的特点具有层次结构子类继承了父类的非私有属性和继承的优点继承的优点代码的可重用性父类的属性和方法可用于子类设计应用程序变得更加简单可以轻松地自定义子类继承的优点继承的优点代码的可重用性父类的属性和方法可用于子类构造方法的继承构造方法不能继承,但子类在创建对象时要对继承来自父类的成员进行初始化,因此,在创建子类时除了执行子类的构造方法外,还需要调用父类的构造方法,具体遵循原则如下:
当子类未定义构造方法时,创建对象时将无条件地调用父类的无参构造方法;对于父类的含参数构造方法,子类可以在自己构造方法中使用super调用它,但super调用语句必须是子类构造方法中的第一个可执行语句;子类在自己的构造方法中如果没有用super明确调用父类的构造方法,则在创建对象时,将自动先执行父类的无参构造方法,然后再执行自己定义的构造方法。构造方法的继承构造方法不能继承,但子类在创建对象时要对继承来任务四
对上例中Student类继承了父类的所有非私有方法进行重写任务四对上例中Student类继承了父类的所有非私有方多态性方法重写实现的动态多态性(运行时多态)
方法重载实现的静态多态性(编译时多态)
多态性多态性方法重写实现的方法重载实现多态性方法重写方法重写子类和父类的方法具有相同的名称和类型用子类对象调用子类中的重写方法super.methodname()用于调用父类中的方法方法重写方法重写子类和父类的方法具有相同的名称和类型用子类classRectangle{
intlength;
intwidth;Rectangle(intlen,intwid){length=len;width=wid;}/*计算矩形的周长.*/voidgetPerimeter(){System.out.println(“矩形的周长为"+(2*(length+width)));}}方法重写classSquareextendsRectangle{Square(intlen){length=len;}/*计算周长.*/voidgetPerimeter(){System.out.println(“正方形的周长为"+(4*length));}}publicstaticvoidmain(String[]arg){RectanglerectObj=newRectangle(10,15);rectObj.getPerimeter();RectanglesqObj=newSquare(15);sqObj.getPerimeter();}调用父类方法调用子类方法classRectangle{方法重写classSqu任务四实现classPerson{publicStringname;publicintage; publicvoidgetInfo(){ System.out.println(name); System.out.println(age); } publicvoideat() { System.out.println("It'sdelicious!"); }}classStudentextendsPerson{Stringschool;publicvoidstudy(){
System.out.println("Studding");}publicvoidgetInfo(){ System.out.println(name); System.out.println(age); System.out.println(school); }publicstaticvoidmain(String[]args){ Personp=newPerson(); ="Tom"; p.age=30; p.getInfo(); Students=newStudent();="John";s.age=16;s.school="塔山小学";s.getInfo();s.study();}}任务四实现classPerson System.多态性【实战】:通过分析,编程实现上图多态性【实战】:通过分析,编程实现上图成员方法覆盖应注意的问题覆盖方法的方法名、返回类型和参数列表必须与它所覆盖的方法相同覆盖方法不能比它所覆盖的方法访问性更低覆盖方法不能比它所覆盖的方法抛出更多的异常成员方法覆盖应注意的问题覆盖方法的方法名、返回类型和参数列表成员变量的覆盖若子类声明了与父类同名的变量,则父类的变量被隐藏起来,直接使用的是子类的变量,但父类的变量仍占据空间,可通过super或父类名来访问。
成员变量的覆盖若子类声明了与父类同名的变量,则父类的变量程序运行结果:Subclass:200Superclass:100成员变量的覆盖classA{intx=100;}classBextendsA{intx=200;voidprint(){System.out.println("Subclass:"+x);System.out.println("Superclass:"+super.x);}publicstaticvoidmain(Stringargs[]){(newB()).print();}}成员变量的覆盖程序运行结果:成员变量的覆盖classA{成员变量的覆盖类对象之间的类型转换父类对象和子类对象的转换需要注意以下原则:子类对象可以被视为是其父类的一个对象,反之则不可。若一个方法的形式参数定义的是父类的对象,则调用该方法的实际参数可以使用子类对象。若父类对象引用指向的实际是一个子类对象,则这个父类对象的引用可以用强制类型转换转化成子类对象的引用。类对象之间的类型转换父类对象和子类对象的转换需要注意以下原则类变量—static修饰符我们在Person类中增加一个成员变量国籍,并假设所有的人都来自中国,该如何实现?思考?类变量—static修饰符我们在Person类中增加一个类变量
country=Chinaname=“John”age=15……name=“rose”age=14……name=“Tom”age=16……static静态变量或类变量静态变量的访问:类名.变量名类变量类变量的应用classCount{ publicstaticvoidmain(Stringargs[]) { Useru1=newUser(); u1.login(); Useru2=newUser(); u2.login(); }}classUser{ staticintcount=0; voidlogin() { count++; System.out.println("你是第"+count+"位访问者"); } }类变量的应用classCountclassUser类方法—static修饰符static修饰符修饰的方法叫静态方法
目的:使方法独立于类的实例,使用类去访问类方法—static修饰符static修饰符修饰的方法叫静类方法
规则可以调用其他静态方法必须访问静态数据不能使用
super
或this关键字调用静态方法的语法为:
classname.methodname();类方法类方法的应用publicclassIsPrime{ publicstaticbooleanprime(intx) { for(intk=2;k<=Math.sqrt(x);k++) { if(x%k==0) returnfalse; } returntrue; } ClassTestIsPrime publicstaticvoidmain(Stringargs[]) { for(intm=10;m<=100;m++) { if(IsPrime.prime(m)) System.out.println(m+“是素数。"); }}}类方法的应用publicclassIsPrimeClas类方法的应用为什么main()方法要用static来修饰?思考?类方法的应用为什么main()方法要用static来修饰?思final修饰符
final类不能被继承子类不能重写方法变量只能被赋值一次final修饰符任务五思考:怎样用一个方法实现两种体积的计算编程实现计算圆柱体和长方体的体积任务五思考:怎样用一个方法实现两种体积的计算编程实现计算圆柱抽象类由abstract修饰的方法叫抽象方法,抽象方法没有方法体;包含抽象方法的类叫抽象类,由abstract修饰。抽象方法必须声明在抽象类中。抽象方法语法:abstracttypemethod_name(parameter_list);声明抽象类语法:
abstractclass{……}使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方法的实现细节抽象类由abstract修饰的方法叫抽象方法,抽象方法没有方任务五实现abstractclassShape{...........doublelength;doublewidth;doubleheight;doubleradius;...........abstractdoublevol();}classCircleextendsShape{*计算圆柱体的体积.
...........doublevol(){returnMath.PI*radius*radius*height;}}classRectangleextendsShape{*计算长方体的体积............doublevol(){returnlength*width*height;}}任务五实现abstractclassShape{cla抽象类
abstract抽象类不能被实例化构造方法、static和private方法不能是抽象的父类的抽象方法往往在子类中实现
抽象类可以具有指向子类对象的对象引用抽象类任务六通过接口计算边长分别为3和4的长方形面积
任务六通过接口计算边长分别为3和4的长方形面积接口
接口是一种抽象类,只包含抽象方法及常量接口可以实现多态,支持多重继承变量默认是public、static、final的,方法默认为public、abstract的接口接口的定义publicinterfaceMyinterface{ intcompute(intx,inty); }使用interface关键字定义一个接口:接口的定义publicinterfaceMyinterf接口的实现publiccalssMyclassimplementsMyinterface{
public
intcompute(intx,inty) { returnx+y; }}publiccalssYourclassimplementsMyinterface{
public
intcompute(intx,inty) { returnx*y; }}
注意:若实现接口的类不是抽象类,则在该类的定义部分必须实现指定接口的所有抽象方法。接口的实现publiccalssMyclassimp接口的继承接口可以通过关键字extends继承其他接口例如:InterfaceB{……}InterfaceAextendsB{……}接口的继承接口可以通过关键字extends继承其他接口interfaceA{Stringa="在接口A中";voidshowA();}interfaceBextendsA{Stringb="在接口B中";voidshowB();}classInterfaceABCimplementsC{publicvoidshowA(){System.out.println(a);}publicvoidshowB(){ System.out.println(b);}}
接口的继承举例程序运行结果:在接口A中在接口B中interfaceA{接口的继承举例程序运行结果:
publicclassUseInterface1{publicstaticvoidmain(Stringargs[]){intx=5,y=10;Myinterfaceo;Myclassmy=newMyclass();o=my;System.out.println("xy的和=“+pute(x,y));Yourclassyou=newYourClass();o=you;System.out.println(“xy的积="+pute(x,y));}}接口类型的使用接口可以作为一种引用类型来使用publicclassUseInterfac接口的优点接口的使用使得方法的描述说明和方法功能的分开,有助于降低程序的复杂性,使程序设计灵活,便于扩充修改。这也是Java面向对象程序设计方法中多态特性的体现。接口的优点接口的使用使得方法的描述说明和方法功能的分开,任务六实现interfaceIrect{ doublew=3,l=4; voidcompute();}定义接口classCrectimplementsIrect{ publicvoidcompute(){ System.out.println("边长分别为3和4的长方形面积为:"+w*l); }}
定义实现接口的类classInterfaceDemo{ publicstaticvoidmain(Stringargs[]){ Crectr=newCrect(); pute(); }}定义主类创建接口对象任务六实现interfaceIrect{定义接口class综合实战(1)根据要求实现Circle类:①成员变量:radius—半径②成员方法:Circle()—构造方法,将半径置0Circle(doubler)—构造方法,将半径初始化为rdoublegetRadius()—获取圆的半径doublegetPerimeter()—获取圆的周长doublegetArea()—获取圆的面积voiddisp()—将圆的半径、周长和面积输出到屏幕(2)通过继承Circle类,派生圆柱体类Cylinder:①成员变量:height—高②成员方法:Cylinder(doubler,doubleh)—构造方法,初始化半径和高doublegetHeight()—获取圆柱体的高doublegetVol()—获取圆柱体体积voiddispVol()—将圆柱体体积输出到屏幕综合实战(1)根据要求实现Circle类:包包将类和接口有机地组织成层次结构,与具体的文件系统的目录树结构层次一致。包允许将类组合成较小的单元,使其易于找到和使用相应的类文件。有助于避免命名冲突。包允许在更广的范围内保护类、数据和方法。包包将类和接口有机地组织成层次结构,与具体的文件系统的目录树创建包package[包名1[.包名2[.[...]]]]语法格式如下:注意:在Java程序中,package语句必须是程序的第一条非空格、非注释语句。创建包package[包名1[.包名2[.[...]创建包举例packagemypackage;publicclassPerson{publicStringname;publicintage; publicvoidgetInfo(){ System.out.println(name); System.out.println(age); } publicvoideat() { System.out.println("It'sdelicious!"); }}声明包创建包举例packagemypackage;声明包导入包1、使用import语句import包名.标识符;
import包名.*;2、直接使用包java.applet.Appletap=newjava.applet.Applet();导入包1、使用import语句impo导入包举例packageyourpackage;importmypackage.Person;classStudentextendsPerson{Stringschool; publicvoidstudy(){ System.out.println("Studding");}publicstaticvoidmain(String[]args){ Students=newStudent();="John";s.age=16;s.school="清华大学";s.getInfo();s.study();}}导入包导入包举例packageyourpackage;导入包访问修饰符访问修饰符访问修饰符privateprotectedpublic默认访问修饰符访问修饰符访问修饰符privatep访问修饰符该类或非该类均可访问public只有该类可以访问private相同数据包中的类可以访问默认该类及其子类的成员可以访问,同一个包中的类也可访问protected访问修饰符该类或非该类均可访问public只有该类可以访问p访问修饰符位置private默认protectedpublic同一个类是是是是同一个包内的类否是是是不同包内的子类否否是是不同包并且不是子类否否否是访问修饰符位置private默认protectedpubli访问修饰符的使用【实战】通过对任务六的Person类和Student类设置包和访问修饰符,掌握访问修饰符的使用访问修饰符的使用【实战】通过对任务六的Person类和St包装类Java语言中专门提供了包装类,将基本类型包装成类。与基本类型对应的包装类有Byte、Short、Integer、Long、Character、Float、Double、Boolean和Void,可以完成一些数据的转换。通过通过查看JDK帮助文档自主学习包装类Java语言中专门提供了包装类,将基本类型包装成类任务七从一个代表带有路径的文件名中分离出文件名和路径任务七从一个代表带有路径的文件名中分离出文件名和路径类String字符串定义可以用字符串常量直接初始化一个String对象
Strings="HelloWorld";通过构造方法构造方法说明String()它将创建一个空字符串 String(Stringvalue)它将新建一个字符串作为指定字符串的副本String(char[]value)它将根据字符数组构造一个新字符串String(byte[]value)它将通过转换指定的字节数组新建一个字符串类String字符串定义可以用字符串常量直接初始化一个StrString构造方法的使用举例
Strings,s1,s2,s3,s4,s5,s6,s7;bytebyteArray[]={(byte)'J',(byte)'a',(byte)'v',(byte)'a'};CharcharArray[]={'程','序','设','计'};StringBuffersb=newStringBuffer("欢迎");;s=newString("Hello!");s1=newString();s2=newString(s);s3=newString(sb);s4=newString(charArray,2,2);s5=newString(byteArray,0);s6=newString(charArray);s7=newString(byteArray,0,0,1);
String构造方法的使用举例Strings,s1,s2字符串长度由length()
方法确定语法publicintlength();返回字符串中的字符数String的常用方法—字符串长度Stringname="JohnSmith";System.out.println(name.length());字符串长度由length()语法publicintlString的常用方法—字符串比较字符串1字符串2字符串1字符串2由equals()方法确定检查组成字符串内容的字符同一个对象用==运算符检查检查字符串是否指向同一个或不同的对象String的常用方法—字符串比较字符串1字符串2字符串
publicclassStringCompare{ publicstaticvoidmain(String[]args) { Strings1="abc"; Strings2="abc"; Stringt1=newString("abc"); Stringt2=newString("abc"); System.out.println(s1==s2); System.out.println(s1.equals(s2)); System.out.println(t1==t2); System.out.println(t1.equals(t2)); }}字符串比较举例程序运行结果如下:truetruefalsetrue思考:为什么?Java在编译时对字符串常量的存储有一个优化处理策略,相同字符串常量只存储一份
publicclassStringCompare字符串字符串比较方法方法说明booleanequalsIgnoreCase(Stringvalue)此方法比较两个字符串,忽略大小写形式intcompareTo(Stringvalue)按字母顺序比较两个字符串。如果两个字符串相等,则返回0;如果字符串在该值之前,则返回值小于0;如果字符串在该值之后,则返回值大于0booleanstartsWith(Stringvalue)检查一个字符串是否以另一个字符串开始。booleanendsWith(Stringvalue)检查一个字符串是否以另一个字符串结束。字符串比较方法方法说明booleanequalsIgnor搜索字符串字符串1情形1:indexOf(character)方法找到第一个匹配索引
0123情形2:如果没有找到匹配,则返回-1返回找到的第一个匹配的位置索引搜索字符串字符串1情形1:indexOf(charact搜索字符串举例publicclassSearchString{ publicstaticvoidmain(String[]args){ Stringname="JohnSmith@123.com"; System.out.println(“EmailID是:"+name); System.out.println(“@的索引是:"+name.indexOf('@')); System.out.println(“.的索引是:"+name.indexOf('.')); if(name.indexOf('.')>name.indexOf('@')){ System.out.println(“该电子邮件地址有效"); }else{ System.out.println(“该电子邮件地址无效"); } }}搜索字符串举例publicclassSearchStri提取字符串方法方法说明publiccharcharAt(intindex)此方法用于从指定位置提取单个字符,该位置由索引指定,索引中的值必须为非负publicStringsubstring(intindex)此方法用于提取从位置索引开始的字符串部分publicStringsubstring(intbeginindex,intendindex)此方法用于提取beginindex和endindex位置之间的字符串部分publicStringconcat(Stringstr)此方法用于连接两个字符串,并新建一个包含调用字符串的字符串对象publicStringreplace(charold,charnew)此方法用于将调用字符串中出现某个字符的所有位置都替换为另一个字符publicStringtrim()此方法用于返回一个前后不含任何空格的调用字符串的副本提取字符串方法方法说明publiccharcharAt(提取字符串方法说明publiccharcharAt(intindex)此方法用于从指定位置提取单个字符,该位置由索引指定,索引中的值必须为非负。publicStringsubstring(intindex)此方法用于提取从位置索引开始的字符串部分。publicStringsubstring(intbeginindex,intendindex)此方法用于提取beginindex和endindex位置之间的字符串部分。publicStringconcat(Stringstr)此方法用于连接两个字符串,并新建一个包含调用字符串的String对象。publicStringreplace(charold,charnew)此方法用于将调用字符串中出现某个字符的所有位置都替换为另一个字符。publicStringtrim()此方法用于返回一个前后不含任何空格的调用字符串的副本。...charch;ch="orange".charAt(3);...它将从index(3)中提取单个字符串“n”并将其存储在变量ch中提取字符串方法说明publiccharcharAt(in提取字符串举例
publicclassStringMethods{ publicstaticvoidmain(String[]args){ Strings="Javaisa"+"platformindependentlanguage"; Strings1="Helloworld"; Strings2="Hello"; System.out.println(s); System.out.println("indexoft="+s.indexOf('t')); System.out.println("lastindexoft="+s.lastIndexOf('t')); System.out.println("indexof(t,10)="+s.indexOf('t',10)); System.out.println(s1.substring(3,8)); System.out.println(s2.concat("World")); System.out.println(s2.replace('l','w')); System.out.println(s1.trim()); }}提取字符串举例publicclassStringMet任务七实现publicclassGetFilename{ privateStringfullPath; privatefinalcharpathSepatator='\\'; publicGetFilename(Stringfname){ fullPath=fname; } publicStringgetName(){ intpos=fullPath.lastIndexOf(pathSepatator); if(pos==-1) { returnfullPath; } else { returnfullPath.substring(pos+1); } }publicStringgetPath(){ intpos=fullPath.lastIndexOf(pathSepatator); if(pos==-1){ returnfullPath; } else{ returnfullPath.substring(0,pos); } } publicstaticvoidmain(String[]args){ GetFilenamefn=newGetFilename("F:\\ava\\myexample\\a.java"); System.out.println(fn.getName()); System.out.println(fn.getPath()); }}任务七实现publicclassGetFilename{更改字符大小写方法Hello使用toUpperCase()方法HELLOHELLO使用toLowerCase()方法hello语法publicStringtoUpperCase();语法PublicStringtoLowerCase();更改字符大小写方法Hello使用toUpperCase(更改字符大小写方法举例
publicclassStringTest{ publicstaticvoidmain(String[]args){ Stringname=newString("George"); System.out.println(“姓名是"+name); intlength=name.length(); System.out.println(“姓名的长度为”+length+“个字符"); System.out.println(“姓名用大写形式表示为:"); StringnameUppercase=name.toUpperCase(); System.out.println(nameUppercase);}}更改字符大小写方法举例publicclassStrin任务八判断一个字符串是否为回文,即将一个字符串进行反转,得到的字符串与源串相同:例如原始字符串为“aba”,逆转后的字符串也为“aba”。任务八判断一个字符串是否为回文,即将一个字符串进行反转,StringBuffer类构造方法说明publicStringBuffer()保留16个字符的空间publicStringBuffer(intlength)设置缓存器大小publicStringBuffer(Stringvalue)接收字符串参数,用来设置初始内容,并在不重新分配的情况下保留16个字符的空间StringBuffer用于表示可以修改的字符串使用连接运算符(+)的字符串会自动创建字符串缓冲对象StringBuffer类构造方法说明publicStrStringBuffer类的方法方法说明StringBufferinsert(Strings)在指定位置插入指定的字符串intlength()确定StringBuffer对象的长度intcapacity()返回当前容量voidsetCharAt(intpos,charch)使用ch指定的新值设置pos指定的位置上的字符StringtoString()转换为字符串形式StringBufferreverse()将此字符序列用其反转形式取代
StringBufferdelete(intstart,intend)删除调用对象中从start位置开始直到end指定的索引–1位置的字符序列StringBufferdeleteCharAt(intpos)删除pos指定的索引处的字符StringBufferreplace(intstart,intend,Strings)使用一组字符替换另一组字符。将用替换字符串从start指定的位置开始替换,直到end指定的位置结束StringBuffer类的方法方法说明StringBuf不变性String类创建后直接修改不变性的概念解决方法StringBuffer类String的对等类表示可增加和可编写字符的可变序列将字符插入到字符串中间或附加到字符串末尾不变性String类创建后直接修改不变性的概念解决方法Str不变性举例publicclassStringBuf{ publicstaticvoidmain(String[]args){ StringBufferbuf=newStringBuffer("Java");
buf.append(“GuideVer1/”); buf.append(3); intindex=5;
buf.insert(index,"Student");
index=23;
buf.setCharAt(index,'.');
intstart=24; intend=25;
buf.replace(start,end,"4");
Strings=buf.toString();//转换为字符串 System.out.println(s); }}不变性举例publicclassStringBuf{任务八实现publicclassStringReverse{ publicstaticvoidmain(String[]args) { Strings="IamaChinese"; intlen=s.length(); StringBufferdest=newStringBuffer(len); for(inti=len-1;i>=0;i--) { dest.append(s.charAt(i)); } System.out.println(dest.toString()); }}任务八实现publicclassStringReversmain方法的参数main方法的形参为String类的数组参数args,args可以用来接收Java命令行传送给Java应用程序的数据。例如:
javaHelloEchoHowareyou?123若要将包含多个空格的单词作为一个字符串,可用引号括起来。例如:
javaHelloEcho"Howareyou?"123main方法的参数main方法的形参为String类的数组参main方法的参数举例classCommandLine{publicstaticvoidmain(Stringargs[]){for(inti=0;i<args.length;i++)System.out.println("args["+i+"]:"+args[i]);}}显示所有命令行参数main方法的参数举例classCommandLine{Java异常处理任务九publicclassExceptionRaised{publicExceptionRaised(){}publicintcalculate(intoperand1,intoperand2){intresult=operand1/operand2;returnresult;}publicstaticvoidmain(String[]args){ExceptionRaisedobj=newExceptionRaised();intresult=obj.calculate(9,0);System.out.println(result);}}OS!异常情况异常程序突然终止并将控制交给操作系统在运行时发生的错误
Java异常处理任务九publicclassExcept什么是异常在程序运行过程中发生的、会打断程序正常执行的事件称为异常(Exception),也称为例外。例如,零用作除数(产生算术异常ArithmeticException)、在指定的磁盘上没有要打开的文件(产生文件未找到异常FileNotFoundException)数组下标越界(产生数组下标越界异常ArrayIndexOutOfBoundsException)等常见异常什么是异常在程序运行过程中发生的、会打断程序正常执行的事件称异常类的层次为内部错误,因此在正常情况下不期望用户的程序捕获它们Java虚拟机在运行时生成的例外,由系统检测,用户可不做处理,系统将它们交给缺省的异常处理程序程序中可预知的问题,可能会带来意想不到的结果,Java程序必须捕获或声明所有的非运行时异常异常类的层次为内部错误,因此在正常情况下不期望用户的程序捕获异常处理机制
捕获异常声明抛出异常throwsTry-catch消极的处理方式积极的处理方式异常处理机制捕获异常声明抛出异常throwsTry-cat捕获异常捕获异常是通过try-catch-finally语句实现的。
tryfinallycatch要监控的程序语句包含在此块中以合理的方式捕获和处理异常释放资源等捕获异常捕获异常是通过try-catch-finally语句try和catch块执行catch后程序继续正常运行程序控制引发代码块trycatch异常单元try和catch块执行catch后程序程序控制任务九的解决方案一publicclassExceptionRaised{publicExceptionRaised(){}publicintcalculate(intoperand1,intoperand2){intresult=0;try{ result=operand1/operand2;
}catch(Exceptione){System.err.println("发生异常:"+e.toString());e.printStackTrace();}returnresult;
}}指明catch可以捕获并处理的异常类型调用异常类的方法任务九的解决方案一publicclassExceptio异常类的常用方法异常类的常用方法实战阅读下列程序代码,分析程序可能产生的异常情况,捕获并处理异常。publicclassExceptionDemo{intarray[]={1,2,3,4,5,6,7,8,9,0}; publicvoidexceptest(intj) { for(inti=0;i<j;i++) {System.out.println("array["+i+"]="+array[i]);} } publicstaticvoidmain(Stringargs[]) {ExceptionDemoex=newExceptionDemo();ex.exceptest(11);}}
实战阅读下列程序代码,分析程序可能产生的异常情况,捕获多重catch块2-1一段代码可能会生成多个异常当引发异常时,按顺序查看每个catch语句,并执行第一个类型与异常类型匹配的语句执行其中的一条catch语句之后,其他的catch语句将被忽略try{…….}catch(ArrayIndexOutOfBoundsExceptione){……}catch(Exceptione){……}多重catch块2-1一段代码可能会生成多个异常try{多重catch块2-2try{
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年安徽卫生健康职业学院单招综合素质考试题库含答案详解(新)
- 2024-2025学年度仓储管理人员模拟试题含答案详解【A卷】
- 2026年安徽商贸职业技术学院单招职业适应性测试题库及参考答案详解(新)
- 2026年安徽商贸职业技术学院单招职业适应性考试题库含答案详解(满分必刷)
- 2026年安徽国防科技职业学院单招职业倾向性测试题库含答案详解(预热题)
- 2026年安徽国防科技职业学院单招职业适应性测试题库及答案详解一套
- 2026年安徽工业经济职业技术学院单招职业技能测试题库含答案详解(培优a卷)
- 2026年安徽工业经济职业技术学院单招职业适应性考试题库附答案详解(巩固)
- 2026年安徽工业职业技术学院单招职业倾向性测试题库附答案详解(基础题)
- 2024-2025学年度电梯考试题库及参考答案详解【基础题】
- 《数学课程标准》义务教育2022年修订版(原版)
- 解读2024年《学纪、知纪、明纪、守纪》全文课件
- 数字电子技术 第六版 课件全套 杨志忠 第1-10章 绪论、逻辑代数基础-可编程逻辑器件
- HG+20231-2014化学工业建设项目试车规范
- 2024年湖南高速铁路职业技术学院单招职业适应性测试题库附答案
- 中国肢端肥大症诊治共识(2021版)
- 《1.2种植凤仙花》说课稿、教案、教学设计和同步练习
- MOOC 数据库系统(上):模型与语言-哈尔滨工业大学 中国大学慕课答案
- 中间人提成合同
- 春季过敏性疾病医学课件
- 智慧供水方案
评论
0/150
提交评论