




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IBMjava培训内部资料2022/12/24IBMjava培训内部资料IBMjava培训内部资料2022/12/16IBMjava1Agenda函数类对象构造函数2022/12/24IBMjava培训内部资料2Agenda函数2022/12/16IBMjava培训内部资函数(子程序)的概念与作用。定义一个函数的格式编写打印三个矩形的程序(用流水帐的方式与用函数的方式进行对比分析)。返回值类型函数名(参数类型形式参数1,参数类型形式参数2,….){程序代码return返回值;}其中:形式参数:在方法被调用时用于接收外部传入的数据的变量。参数类型:就是该形式参数的数据类型。返回值:方法在执行完毕后返还给调用它的程序的数据。返回值类型:函数要返回的结果的数据类型。实参:调用函数时实际传给函数形式参数的数据。如何理解函数返回值类型为void的情况函数(方法)2022/12/24IBMjava培训内部资料3函数(子程序)的概念与作用。函数(方法)2022/12/16函数调用的格式在函数中使用return提前返回函数调用的过程分析函数的调用2022/12/24IBMjava培训内部资料4函数调用的格式函数的调用2022/12/16IBMjava培函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。如: publicclassTest { publicstaticvoidmain(String[]args){ intisum; doublefsum; isum=add(3,5); isum=add(3,5,6); fsum=add(3.2,6.5); } publicstaticintadd(intx,inty){ reutrnx+y; } publicstaticintadd(intx,inty,intz) { returnx+y+z; } publicstaticdoubleadd(doublex,doubley){ returnx+y; } }函数的重载2022/12/24IBMjava培训内部资料5函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只Practice1编写一个类ETPTest2_1,使他具有一个方法为:publicintgetArea(inti,intj)并返回i*j的值。再从外部调用这个方法传入相应,并打印出结果值2022/12/24IBMjava培训内部资料6Practice1编写一个类ETPTest2_1,使他具有Practice2求下面代码输出结果public
classETPTest2_2{private
voidchange(intx){x=3;System.out.println(x);}public
static
voidmain(String[]args){intx=5;ETPTest2_2test2_2=newETPTest2_2();test2_2.change(x);System.out.println(x);}}2022/12/24IBMjava培训内部资料7Practice2求下面代码输出结果2022/12/16IPractice3求下面代码输入结果public
classMain{ public
voidchange(Objobj){ obj.x=3; } public
static
voidmain(String[]args){ Mainmain=newMain(); Objobj=newObj(); System.out.println(obj.x); main.change(obj); System.out.println(obj.x); }}classObj{ int
x=5;}2022/12/24IBMjava培训内部资料8Practice3求下面代码输入结果2022/12/16IPractice4privatefloatgetVar(){returnx;}以下哪些可以重载上面这条语句A.floatgetVar()B.publicfloatgetVar()C.publicdoublegetVar()D.protectedfloatgetVar()E.publicfloatgetVar(floatf)2022/12/24IBMjava培训内部资料9Practice4privatefloatgetVar函数的参数传递
—基本数据类型的参数传递
2022/12/24IBMjava培训内部资料10函数的参数传递
—基本数据类型的参数传递2022/12函数的参数传递
—引用数据类型的参数传递2022/12/24IBMjava培训内部资料11函数的参数传递
—引用数据类型的参数传递2022/12/static静态变量当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。编写使用静态变量统计一个类产生的实例对象的个数的程序2022/12/24IBMjava培训内部资料12static静态变量当我们编写一个类时,其实就是在描述其对static静态方法在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。静态方法不能以任何方式引用this和super关键字。与上面的道理一样,因为静态方法在使用前不用创建任何实例对象,当静态方法被调用时,this所引用的对象根本就没有产生。main()方法是静态的,因此JVM在执行main方法时不创建main方法所在的类的实例对象,因而在main()方法中,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,这种情况,我们在以后的例子中会多次碰到。2022/12/24IBMjava培训内部资料13static静态方法在静态方法里只能直接调用同类中其它的静态静态代码块一个类中可以使用不包含在任何方法体中的静态代码块(staticblock),当类被载入时,静态代码块被执行,且只被执行一次,静态块经常用来进行类属性的初始化。类中的静态代码块被自动执行,尽管我们产生了类的多个实例对象,但其中的静态代码块只被执行了一次。当一个程序中用到了其他的类,类是在第一次被使用的时候才被装载,而不是在程序启动时就装载程序中所有可能要用到的类。2022/12/24IBMjava培训内部资料14静态代码块一个类中可以使用不包含在任何方法体中的静态代码块Practice5下面这个类声明了静态变量,并且使用了静态代码块初始化变量public
classStaticClass{private
static
int
i;static{i=3;}public
static
voidmain(String[]args){System.out.print(StaticClass.i);}}请创建一个类,使用静态代码块初始化并打印出来看是否生效2022/12/24IBMjava培训内部资料15Practice5下面这个类声明了静态变量,并且使用了静态下一章节对象和类2022/12/24IBMjava培训内部资料16下一章节对象和类2022/12/16IBMjava培训内部资JAVA中类的声明类说明语法:[类修饰符]
class类名[
extends 超类名][implements接口名]{ 成员变量定义; 方法定义;}类体2022/12/24IBMjava培训内部资料17JAVA中类的声明类说明语法:类体2022/12/16IBMJAVA中类的声明(续)类修饰符(Modifier):public:允许其他类(没有限制)访问本类,一个源文件仅可以有一个public类abstract:没有实例的抽象概念类final:不能再被扩展,不包含子类的类;易于安全性的实现,或用于创建固定功能的类缺省:可被当前包中的其他类访问父类继承声明:extends
父类名实现接口(interface):implements
接口名2022/12/24IBMjava培训内部资料18JAVA中类的声明(续)类修饰符(Modifier):202JAVA中类的声明(续)例:
publicabstractclassshape{…………} classrectangleextendsshape{…………} finalclassroundrectextendsrectangle {….}??final可以与abstract一起使用吗?2022/12/24IBMjava培训内部资料19JAVA中类的声明(续)例:2022/12/16IBMjav类的成员变量的声明声明成员变量〔member〕的语法 [修饰符]数据类型变量名;引用:对象名.变量修饰符访问控制符public:可被所有其他类引用private:仅可被该类自身引用和修改,不能被其他任何类(包括子类)引用
2022/12/24IBMjava培训内部资料20类的成员变量的声明声明成员变量〔member〕的语法 202成员变量的声明(续)protected:该类自身、子类、同一包中的其他类缺省:本包中的类static:类成员变量,对所有的实例一致,引用是前缀可使用类名或对象名final:数值不变常量,定义同时应对其进行初始化2022/12/24IBMjava培训内部资料21成员变量的声明(续)protected:该类自身、子类、同一成员变量的声明(续)例:classshape{
privateintx;
privateinty;
staticfinalfloatMaxArea=100.0f; …….. }2022/12/24IBMjava培训内部资料22成员变量的声明(续)例:2022/12/16IBMjava培方法的声明定义对类内成员变量(数据)的操作方法的声明语法: [修饰符]返回类型方法名(参数列表) [throws例外名]{ 方法体; }谁可以调用方法、接受哪些参数、如何返回信息2022/12/24IBMjava培训内部资料23方法的声明定义对类内成员变量(数据)的操作2022/12/1方法的声明(续)修饰符(Modifier):访问控制符:public、private、protectedstatic:静态方法,又称类方法使用类名或对象名作为前缀,建议使用类名在方法体中只能使用static变量和static方法abstract:只有接口没有语句,要在子类中通过重新定义(override)来实现final:不能被重新定义(override)2022/12/24IBMjava培训内部资料24方法的声明(续)修饰符(Modifier):2022/12/方法的声明(续)返回类型:void、return参数列表:值传递throws:通告本方法中会产生的例外(异常)类型,提醒调用者要对相应的可能例外进行处理。当执行此方法并发生了例外时,程序会转入调用者编制的例外处理程序段。2022/12/24IBMjava培训内部资料25方法的声明(续)返回类型:void、return2022/1方法的声明(续)例:
classshape{
privateintx;
staticfloatMaxArea=100.0f;
publicvoidsetx(intnewx){x=newx;}
publicstaticvoidsetMA(floatnewMA){
MaxArea=newMA;
}
publicfinalgetx(){returnx}}2022/12/24IBMjava培训内部资料26方法的声明(续)例:2022/12/16IBMjava培训内下一章节对象2022/12/24IBMjava培训内部资料27下一章节对象2022/12/16IBMjava培训内部资料2对象的产生Personp1=newPerson();执行完后的内存状态2022/12/24IBMjava培训内部资料28对象的产生Personp1=newPerson();对象的产生当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的都是变量类型都是引用类型,如上面的Person及前面讲过的数组。2022/12/24IBMjava培训内部资料29对象的产生当一个对象被创建时,会对其中各种类型的成员变量自动对象的使用创建新的对象之后,我们就可以使用“对象名.对象成员”的格式,来访问对象的成员(包括属性和方法)classTestPerson{ publicstaticvoidmain(String[]args) { Personp1=newPerson(); Personp2=newPerson(); p1.age=-30; p1.shout(); p2.shout(); }}程序运行的内存布局如下图2022/12/24IBMjava培训内部资料30对象的使用创建新的对象之后,我们就可以使用“对象名.对象成对象的生命周期与基本类型的生命周期一样2022/12/24IBMjava培训内部资料31对象的生命周期与基本类型的2022/12/16IBMja对象的比较“==”运算符与equals()方法的区别怎样比较两个数组对象的内容是否相等2022/12/24IBMjava培训内部资料32对象的比较“==”运算符与equals()方法的区别202Practice6比较两个数组是否相等1.声明两个数组,并使他们各个元素相同2.调用Arrays.equals(a1,a2)方法3.打印出结果值2022/12/24IBMjava培训内部资料33Practice6比较两个数组是否相等2022/12/16实现类的封装性如果外面的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误,就象一个人的身高,不能被外部随意修改,只能通过各种摄取营养的方法去修改这个属性。在定义一个类的成员(包括变量和方法)时,使用private关键字说明这个成员的访问权限,这个成员成了类的私有成员,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用。2022/12/24IBMjava培训内部资料34实现类的封装性如果外面的程序可以随意修改一个类的成员变量,实现类的封装性为了实现良好的封装性,我们通常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操作,一个是getXxx()(Xxx表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是setXxx()用来对这个成员变量赋值。一个类通常就是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。用总统指挥一支军队的例子来说明这种效果。2022/12/24IBMjava培训内部资料35实现类的封装性为了实现良好的封装性,我们通常将类的成员变量类的封装所带来的优点隐藏类的实现细节;让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;便于修改,增强代码的可维护性;2022/12/24IBMjava培训内部资料36类的封装所带来的优点隐藏类的实现细节;2022/12/16下一章节构造函数2022/12/24IBMjava培训内部资料37下一章节构造函数2022/12/16IBMjava培训内部资构造函数的定义与作用构造方法的特征它具有与类相同的名称;它不含返回值;它不能在方法中用return语句返回一个值注意:在构造方法里不含返回值的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动调用了。构造方法的作用:当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。这就好像我们规定每个“人”一出生就必须先洗澡,我们就可以在“人”的构造方法中加入完成“洗澡”的程序代码,于是每个“人”一出生就会自动完成“洗澡”,程序就不必再在每个人刚出生时一个一个地告诉他们要“洗澡”了。2022/12/24IBMjava培训内部资料38构造函数的定义与作用构造方法的特征2022/12/16IB构造方法的重载和一般的方法重载一样,重载的构造方法具有不同个数或不同类型的参数,编译器就可以根据这一点判断出用new关键字产生对象时,该调用哪个构造方法了。产生对象的格式是:new类名(参数列表);重载构造方法可以完成不同初始化的操作,如:p3=newPerson(“Tom”,18);语句,会做这样几件事:创建指定类的新实例对象,在堆内存中为实例对象分配内存空间,并调用指定类的构造方法,最后将实例对象的首地址赋值给引用变量p3。2022/12/24IBMjava培训内部资料39构造方法的重载和一般的方法重载一样,重载的构造方法具有不同构造方法的一些细节在java每个类里都至少有一个构造方法,如果程序员没有在一个类里定义构造方法,系统会自动为这个类产生一个默认的构造方法,这个默认构造方法没有参数,在其方法体中也没有任何代码,即什么也不做。由于系统提供的默认构造方法往往不能满足编程者的需求,我们可以自己定义类的构造方法,来满足我们的需要,一旦编程者为该类定义了构造方法,系统就不再提供默认的构造方法了。声明构造方法,如无特殊需要,应使用public关键字,在我们前面例子中,可以使用private访问修饰符吗?2022/12/24IBMjava培训内部资料40构造方法的一些细节在java每个类里都至少有一个构造方法,this是什么?如果func2方法被调用,一定是事先已经有了一个存在的对象,func2被作为那个对象的方法被使用。在func2内部能引用别的对象,同样也能引用func2所属的那个对象。在func2中,自己所属的那个对象的引用名称是什么呢?this关键字在java程序里的作用和它的词义很接近,它在函数内部就是这个函数所属的对象的引用变量。2022/12/24IBMjava培训内部资料41this是什么?如果func2方法被调用,一定是事先已经this引用句柄的存放位置每个成员方法内部,都有一个this引用变量,指向调用这个方法的对象,类中的成员方法与this之间的关系如图2022/12/24IBMjava培训内部资料42this引用句柄的存放位置每个成员方法内部,都有一个thisthis引用句柄的应用一个类中的成员方法可以直接调用同类中的其他成员,其实我们在一个方法内部使用“this.其他成员”的引用方式和直接使用“其他成员”的效果是一样的,那this还有多大的作用呢?在有些情况下,我们还是非得用this关键字不可的:让类的成员变量名和对其进行赋值的成员方法的形参变量同名是必要的,这样的代码谁看了都能明白这两个变量是彼此相关的,老手看到函数的定义,就能揣摩出函数中的代码,大大节省了别人和自己日后阅读程序的时间。假设我们有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造方法要接收一个代表其所在容器的参数。构造方法是在产生对象时被java系统自动调用的,我们不能在程序中象调用其他方法一样去调用构造方法。但我们可以在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用this(参数列表)的形式,根据其中的参数列表,选择相应的构造方法。2022/12/24IBMjava培训内部资料43this引用句柄的应用一个类中的成员方法可以直接调用同类中的Practice7创建一个类Cla给出三个成员变量inta,b,c使用两个构造函数publicCla()publicCla(inta,intb,intc)使用this句柄在构造函数中给变量赋值在主函数中分别使用两个构造函数创建两个对象2022/12/24IBMjava培训内部资料44Practice7创建一个类Cla2022/12/16IB下一章节继承2022/12/24IBMjava培训内部资料45下一章节继承2022/12/16IBMjava培训内部资料4面向对象的概念——子类子类是作为另一个类的扩充或修正而定义的一个类。bicycle(superclass)MountainbikesRacingbikesTandembikessubclass2022/12/24IBMjava培训内部资料46面向对象的概念——子类子类是作为另一个类的扩充或修正而定义的面向对象的概念——继承继承使得子类可以利用父类中定义的方法和变量,就像它们属于子类本身一样。classEmployee{protected
Stringname;publicvoidshowInfo(){System.out.println(name);}}
classManagerextendsEmployee{private
Stringdepartment;publicvoidshowInfo(){System.out.println(name);System.out.println(“Managerof”+department);}}
2022/12/24IBMjava培训内部资料47面向对象的概念——继承继承使得子类可以利用父类中定义的方法和继承继承性是面向对象程序设计语言的一个基本特征,通过继承可以实现代码的复用。继承而得到的类为子类,被继承的类为父类,父类包括所有直接或间接被继承的类。Java中不支持多重继承。通过在类的声明中加入extends子句来创建一个类的子类:classSubClassextendsSuperClass{}如果省略extends子句,则该类为Object的子类。子类可以继承父类中访问权限设定为public、protected和default的成员变量和方法,但是不能继承访问权限为private的成员变量和方法。2022/12/24IBMjava培训内部资料48继承继承性是面向对象程序设计语言的一个基本特征,通过继承可以继承的例子2022/12/24IBMjava培训内部资料49继承的例子2022/12/16IBMjava培训内部资料49调用父类构造函数super(x,…);调用父类构造函数时应遵循的原则:只能在子类中调用父类的构造函数.调用父类构造函数时,必须使用super(…)不要在父类构造函数前放任何子类构造函数代码。如果子类中没有调用父类构造,会默认调用无参数的super()2022/12/24IBMjava培训内部资料50调用父类构造函数super(x,…);2022/12/16I类方法的覆盖方法覆盖即指在子类中重新实现父类中已有的方法。Java运行时系统根据调用该方法的实例的类型来决定调用哪个实现。方法覆盖时应遵循的原则:覆盖后的方法不能比被覆盖的方法有更严格的访问前提条件。2022/12/24IBMjava培训内部资料51类方法的覆盖方法覆盖即指在子类中重新实现父类中已有的方法。2面向对象的概念——覆盖覆盖使得在子类中可以重新定义父类中已有的方法,从而是子类具有自己的行为。classEmployee{protected
Stringname;publicvoidshowInfo(){System.out.println(name);}}
classManagerextendsEmployee{private
Stringdepartment;publicvoidshowInfo(){System.out.println(name);System.out.println(“Managerof”+department);}}
2022/12/24IBMjava培训内部资料52面向对象的概念——覆盖覆盖使得在子类中可以重新定义父类中已有Practice8有一个父类Car,内有属性:intmaxSpeed方法:voidstop();有两个子类BMW,QQ继承父类请调用父类构造方法,初始化赋值maxSpeed请重写stop()方法,要求BMW当maxSpeed>=300;打印语句“停车”QQ当maxSpeed>=120;打印语句“停车”2022/12/24IBMjava培训内部资料53Practice8有一个父类Car,内有属性:2022/13.接口“对实现我的类,看起来都应该是我的样子”接口规定了一个类的基本形式:自变量,方法名,返回类型.但不规定方法的主体.接口的数据类型:都默认为static,final只是一种形式,不涉及细节2022/12/24IBMjava培训内部资料543.接口“对实现我的类,看起来都应该是我的样子”2022/3.接口定义的形式[public]interfaceinterfaceName[extendsSuperInterfaceList]{ …… //常量定义和方法定义}接口(interface)作为特殊形式的抽象类,和类(class)在使用上具有类似的约束。一个public接口只能定义在同名的.java文件中2022/12/24IBMjava培训内部资料553.接口定义的形式[public]interfacei3.类对接口的实现用implements子句来表示一个类实现某个接口。在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。利用接口可实现多重继承,即一个类可以实现多个接口,在implements子句中用逗号分隔。接口的作用和抽象类相似,只定义原型,不直接定义方法的内容。接口中的方法和变量都必须是public的。2022/12/24IBMjava培训内部资料563.类对接口的实现用implements子句来表示一个类实Practice9有一个接口Car,内有属性:intmaxSpeed方法:voidstop();有两个子类BMW,QQ实现接口请调用父类构造方法,初始化赋值maxSpeed请重写stop()方法,要求BMW当maxSpeed>=300;打印语句“停车”QQ当maxSpeed>=120;打印语句“停车”2022/12/24IBMjava培训内部资料57Practice9有一个接口Car,内有属性:2022/1下一章节多态2022/12/24IBMjava培训内部资料58下一章节多态2022/12/16IBMjava培训内部资料5多态多态提供了另一个层面的接口与实现的分离,也就是说把“做什么”和“怎么做”分开来。多态性不但能改善代码的结构,提高其可读性,而且能让你创建可扩展的程序。所谓“可扩展”是指,程序不仅在项目最初的开发阶段能“成长”,而且还可以在需要添加新特性的时候成长。2022/12/24IBMjava培训内部资料59多态多态提供了另一个层面的接口与实现的分离,也就是说把“做什Java中的多态与重载多态:同名的不同方法共存重载(overload):同名方法被多次重新定义同名提高了抽象程度,降低维护工作量定义、调用时如何区别被重载的方法同类中的同名方法用不同的参数列表来区别同名的不同方法不能用返回值(可忽略)来区别不同类中的同名方法:冠以类名以示区别和override有什么区别2022/12/24IBMjava培训内部资料60Java中的多态与重载多态:同名的不同方法共存和overriAssignment1银行业务的程序结构 银行帐户类BankAccount 数据:余额、利率 操作:查询余额、存款、取款 查询利率、设置利率(选做) 主类UseAccount main()方法,创建BankAccount 类的对象,并完成相应操作2022/12/24IBMjava培训内部资料61Assignment1银行业务的程序结构2022/12/1Assignment2实现以下的类toString()为返回所有内容。写个测试类TestEmployee2022/12/24IBMjava培训内部资料62Assignment2实现以下的类2022/12/16IB演讲完毕,谢谢听讲!再见,seeyouagain2022/12/24IBMjava培训内部资料演讲完毕,谢谢听讲!再见,seeyouagain202263IBMjava培训内部资料2022/12/24IBMjava培训内部资料IBMjava培训内部资料2022/12/16IBMjava64Agenda函数类对象构造函数2022/12/24IBMjava培训内部资料65Agenda函数2022/12/16IBMjava培训内部资函数(子程序)的概念与作用。定义一个函数的格式编写打印三个矩形的程序(用流水帐的方式与用函数的方式进行对比分析)。返回值类型函数名(参数类型形式参数1,参数类型形式参数2,….){程序代码return返回值;}其中:形式参数:在方法被调用时用于接收外部传入的数据的变量。参数类型:就是该形式参数的数据类型。返回值:方法在执行完毕后返还给调用它的程序的数据。返回值类型:函数要返回的结果的数据类型。实参:调用函数时实际传给函数形式参数的数据。如何理解函数返回值类型为void的情况函数(方法)2022/12/24IBMjava培训内部资料66函数(子程序)的概念与作用。函数(方法)2022/12/16函数调用的格式在函数中使用return提前返回函数调用的过程分析函数的调用2022/12/24IBMjava培训内部资料67函数调用的格式函数的调用2022/12/16IBMjava培函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。如: publicclassTest { publicstaticvoidmain(String[]args){ intisum; doublefsum; isum=add(3,5); isum=add(3,5,6); fsum=add(3.2,6.5); } publicstaticintadd(intx,inty){ reutrnx+y; } publicstaticintadd(intx,inty,intz) { returnx+y+z; } publicstaticdoubleadd(doublex,doubley){ returnx+y; } }函数的重载2022/12/24IBMjava培训内部资料68函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只Practice1编写一个类ETPTest2_1,使他具有一个方法为:publicintgetArea(inti,intj)并返回i*j的值。再从外部调用这个方法传入相应,并打印出结果值2022/12/24IBMjava培训内部资料69Practice1编写一个类ETPTest2_1,使他具有Practice2求下面代码输出结果public
classETPTest2_2{private
voidchange(intx){x=3;System.out.println(x);}public
static
voidmain(String[]args){intx=5;ETPTest2_2test2_2=newETPTest2_2();test2_2.change(x);System.out.println(x);}}2022/12/24IBMjava培训内部资料70Practice2求下面代码输出结果2022/12/16IPractice3求下面代码输入结果public
classMain{ public
voidchange(Objobj){ obj.x=3; } public
static
voidmain(String[]args){ Mainmain=newMain(); Objobj=newObj(); System.out.println(obj.x); main.change(obj); System.out.println(obj.x); }}classObj{ int
x=5;}2022/12/24IBMjava培训内部资料71Practice3求下面代码输入结果2022/12/16IPractice4privatefloatgetVar(){returnx;}以下哪些可以重载上面这条语句A.floatgetVar()B.publicfloatgetVar()C.publicdoublegetVar()D.protectedfloatgetVar()E.publicfloatgetVar(floatf)2022/12/24IBMjava培训内部资料72Practice4privatefloatgetVar函数的参数传递
—基本数据类型的参数传递
2022/12/24IBMjava培训内部资料73函数的参数传递
—基本数据类型的参数传递2022/12函数的参数传递
—引用数据类型的参数传递2022/12/24IBMjava培训内部资料74函数的参数传递
—引用数据类型的参数传递2022/12/static静态变量当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。编写使用静态变量统计一个类产生的实例对象的个数的程序2022/12/24IBMjava培训内部资料75static静态变量当我们编写一个类时,其实就是在描述其对static静态方法在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。静态方法不能以任何方式引用this和super关键字。与上面的道理一样,因为静态方法在使用前不用创建任何实例对象,当静态方法被调用时,this所引用的对象根本就没有产生。main()方法是静态的,因此JVM在执行main方法时不创建main方法所在的类的实例对象,因而在main()方法中,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,这种情况,我们在以后的例子中会多次碰到。2022/12/24IBMjava培训内部资料76static静态方法在静态方法里只能直接调用同类中其它的静态静态代码块一个类中可以使用不包含在任何方法体中的静态代码块(staticblock),当类被载入时,静态代码块被执行,且只被执行一次,静态块经常用来进行类属性的初始化。类中的静态代码块被自动执行,尽管我们产生了类的多个实例对象,但其中的静态代码块只被执行了一次。当一个程序中用到了其他的类,类是在第一次被使用的时候才被装载,而不是在程序启动时就装载程序中所有可能要用到的类。2022/12/24IBMjava培训内部资料77静态代码块一个类中可以使用不包含在任何方法体中的静态代码块Practice5下面这个类声明了静态变量,并且使用了静态代码块初始化变量public
classStaticClass{private
static
int
i;static{i=3;}public
static
voidmain(String[]args){System.out.print(StaticClass.i);}}请创建一个类,使用静态代码块初始化并打印出来看是否生效2022/12/24IBMjava培训内部资料78Practice5下面这个类声明了静态变量,并且使用了静态下一章节对象和类2022/12/24IBMjava培训内部资料79下一章节对象和类2022/12/16IBMjava培训内部资JAVA中类的声明类说明语法:[类修饰符]
class类名[
extends 超类名][implements接口名]{ 成员变量定义; 方法定义;}类体2022/12/24IBMjava培训内部资料80JAVA中类的声明类说明语法:类体2022/12/16IBMJAVA中类的声明(续)类修饰符(Modifier):public:允许其他类(没有限制)访问本类,一个源文件仅可以有一个public类abstract:没有实例的抽象概念类final:不能再被扩展,不包含子类的类;易于安全性的实现,或用于创建固定功能的类缺省:可被当前包中的其他类访问父类继承声明:extends
父类名实现接口(interface):implements
接口名2022/12/24IBMjava培训内部资料81JAVA中类的声明(续)类修饰符(Modifier):202JAVA中类的声明(续)例:
publicabstractclassshape{…………} classrectangleextendsshape{…………} finalclassroundrectextendsrectangle {….}??final可以与abstract一起使用吗?2022/12/24IBMjava培训内部资料82JAVA中类的声明(续)例:2022/12/16IBMjav类的成员变量的声明声明成员变量〔member〕的语法 [修饰符]数据类型变量名;引用:对象名.变量修饰符访问控制符public:可被所有其他类引用private:仅可被该类自身引用和修改,不能被其他任何类(包括子类)引用
2022/12/24IBMjava培训内部资料83类的成员变量的声明声明成员变量〔member〕的语法 202成员变量的声明(续)protected:该类自身、子类、同一包中的其他类缺省:本包中的类static:类成员变量,对所有的实例一致,引用是前缀可使用类名或对象名final:数值不变常量,定义同时应对其进行初始化2022/12/24IBMjava培训内部资料84成员变量的声明(续)protected:该类自身、子类、同一成员变量的声明(续)例:classshape{
privateintx;
privateinty;
staticfinalfloatMaxArea=100.0f; …….. }2022/12/24IBMjava培训内部资料85成员变量的声明(续)例:2022/12/16IBMjava培方法的声明定义对类内成员变量(数据)的操作方法的声明语法: [修饰符]返回类型方法名(参数列表) [throws例外名]{ 方法体; }谁可以调用方法、接受哪些参数、如何返回信息2022/12/24IBMjava培训内部资料86方法的声明定义对类内成员变量(数据)的操作2022/12/1方法的声明(续)修饰符(Modifier):访问控制符:public、private、protectedstatic:静态方法,又称类方法使用类名或对象名作为前缀,建议使用类名在方法体中只能使用static变量和static方法abstract:只有接口没有语句,要在子类中通过重新定义(override)来实现final:不能被重新定义(override)2022/12/24IBMjava培训内部资料87方法的声明(续)修饰符(Modifier):2022/12/方法的声明(续)返回类型:void、return参数列表:值传递throws:通告本方法中会产生的例外(异常)类型,提醒调用者要对相应的可能例外进行处理。当执行此方法并发生了例外时,程序会转入调用者编制的例外处理程序段。2022/12/24IBMjava培训内部资料88方法的声明(续)返回类型:void、return2022/1方法的声明(续)例:
classshape{
privateintx;
staticfloatMaxArea=100.0f;
publicvoidsetx(intnewx){x=newx;}
publicstaticvoidsetMA(floatnewMA){
MaxArea=newMA;
}
publicfinalgetx(){returnx}}2022/12/24IBMjava培训内部资料89方法的声明(续)例:2022/12/16IBMjava培训内下一章节对象2022/12/24IBMjava培训内部资料90下一章节对象2022/12/16IBMjava培训内部资料2对象的产生Personp1=newPerson();执行完后的内存状态2022/12/24IBMjava培训内部资料91对象的产生Personp1=newPerson();对象的产生当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的都是变量类型都是引用类型,如上面的Person及前面讲过的数组。2022/12/24IBMjava培训内部资料92对象的产生当一个对象被创建时,会对其中各种类型的成员变量自动对象的使用创建新的对象之后,我们就可以使用“对象名.对象成员”的格式,来访问对象的成员(包括属性和方法)classTestPerson{ publicstaticvoidmain(String[]args) { Personp1=newPerson(); Personp2=newPerson(); p1.age=-30; p1.shout(); p2.shout(); }}程序运行的内存布局如下图2022/12/24IBMjava培训内部资料93对象的使用创建新的对象之后,我们就可以使用“对象名.对象成对象的生命周期与基本类型的生命周期一样2022/12/24IBMjava培训内部资料94对象的生命周期与基本类型的2022/12/16IBMja对象的比较“==”运算符与equals()方法的区别怎样比较两个数组对象的内容是否相等2022/12/24IBMjava培训内部资料95对象的比较“==”运算符与equals()方法的区别202Practice6比较两个数组是否相等1.声明两个数组,并使他们各个元素相同2.调用Arrays.equals(a1,a2)方法3.打印出结果值2022/12/24IBMjava培训内部资料96Practice6比较两个数组是否相等2022/12/16实现类的封装性如果外面的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误,就象一个人的身高,不能被外部随意修改,只能通过各种摄取营养的方法去修改这个属性。在定义一个类的成员(包括变量和方法)时,使用private关键字说明这个成员的访问权限,这个成员成了类的私有成员,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用。2022/12/24IBMjava培训内部资料97实现类的封装性如果外面的程序可以随意修改一个类的成员变量,实现类的封装性为了实现良好的封装性,我们通常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操作,一个是getXxx()(Xxx表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是setXxx()用来对这个成员变量赋值。一个类通常就是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。用总统指挥一支军队的例子来说明这种效果。2022/12/24IBMjava培训内部资料98实现类的封装性为了实现良好的封装性,我们通常将类的成员变量类的封装所带来的优点隐藏类的实现细节;让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;便于修改,增强代码的可维护性;2022/12/24IBMjava培训内部资料99类的封装所带来的优点隐藏类的实现细节;2022/12/16下一章节构造函数2022/12/24IBMjava培训内部资料100下一章节构造函数2022/12/16IBMjava培训内部资构造函数的定义与作用构造方法的特征它具有与类相同的名称;它不含返回值;它不能在方法中用return语句返回一个值注意:在构造方法里不含返回值的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动调用了。构造方法的作用:当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。这就好像我们规定每个“人”一出生就必须先洗澡,我们就可以在“人”的构造方法中加入完成“洗澡”的程序代码,于是每个“人”一出生就会自动完成“洗澡”,程序就不必再在每个人刚出生时一个一个地告诉他们要“洗澡”了。2022/12/24IBMjava培训内部资料101构造函数的定义与作用构造方法的特征2022/12/16IB构造方法的重载和一般的方法重载一样,重载的构造方法具有不同个数或不同类型的参数,编译器就可以根据这一点判断出用new关键字产生对象时,该调用哪个构造方法了。产生对象的格式是:new类名(参数列表);重载构造方法可以完成不同初始化的操作,如:p3=newPerson(“Tom”,18);语句,会做这样几件事:创建指定类的新实例对象,在堆内存中为实例对象分配内存空间,并调用指定类的构造方法,最后将实例对象的首地址赋值给引用变量p3。2022/12/24IBMjava培训内部资料102构造方法的重载和一般的方法重载一样,重载的构造方法具有不同构造方法的一些细节在java每个类里都至少有一个构造方法,如果程序员没有在一个类里定义构造方法,系统会自动为这个类产生一个默认的构造方法,这个默认构造方法没有参数,在其方法体中也没有任何代码,即什么也不做。由于系统提供的默认构造方法往往不能满足编程者的需求,我们可以自己定义类的构造方法,来满足我们的需要,一旦编程者为该类定义了构造方法,系统就不再提供默认的构造方法了。声明构造方法,如无特殊需要,应使用public关键字,在我们前面例子中,可以使用private访问修饰符吗?2022/12/24IBMjava培训内部资料103构造方法的一些细节在java每个类里都至少有一个构造方法,this是什么?如果func2方法被调用,一定是事先已经有了一个存在的对象,func2被作为那个对象的方法被使用。在func2内部能引用别的对象,同样也能引用func2所属的那个对象。在func2中,自己所属的那个对象的引用名称是什么呢?this关键字在java程序里的作用和它的词义很接近,它在函数内部就是这个函数所属的对象的引用变量。2022/12/24IBMjava培训内部资料104this是什么?如果func2方法被调用,一定是事先已经this引用句柄的存放位置每个成员方法内部,都有一个this引用变量,指向调用这个方法的对象,类中的成员方法与this之间的关系如图2022/12/24IBMjava培训内部资料105this引用句柄的存放位置每个成员方法内部,都有一个thisthis引用句柄的应用一个类中的成员方法可以直接调用同类中的其他成员,其实我们在一个方法内部使用“this.其他成员”的引用方式和直接使用“其他成员”的效果是一样的,那this还有多大的作用呢?在有些情况下,我们还是非得用this关键字不可的:让类的成员变量名和对其进行赋值的成员方法的形参变量同名是必要的,这样的代码谁看了都能明白这两个变量是彼此相关的,老手看到函数的定义,就能揣摩出函数中的代码,大大节省了别人和自己日后阅读程序的时间。假设我们有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造方法要接收一个代表其所在容器的参数。构造方法是在产生对象时被java系统自动调用的,我们不能在程序中象调用其他方法一样去调用构造方法。但我们可以在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用this(参数列表)的形式,根据其中的参数列表,选择相应的构造方法。2022/12/24IBMjava培训内部资料106this引用句柄的应用一个类中的成员方法可以直接调用同类中的Practice7创建一个类Cla给出三个成员变量inta,b,c使用两个构造函数publicCla()publicCla(inta,intb,intc)使用this句柄在构造函数中给变量赋值在主函数中分别使用两个构造函数创建两个对象2022/12/24IBMjava培训内部资料107Practice7创建一个类Cla2022/12/16IB下一章节继承2022/12/24IBMjava培训内部资料108下一章节继承2022/12/16IBMjava培训内部资料4面向对象的概念——子类子类是作为另一个类的扩充或修正而定义的一个类。bicycle(superclass)MountainbikesRacingbikesTandembikessubclass2022/12/24IBMjava培训内部资料109面向对象的概念——子类子类是作为另一个类的扩充或修正而定义的面向对象的概念——继承继承使得子类可以利用父类中定义的方法和变量,就像它们属于子类本身一样。classEmployee{protected
Stringname;publicvoidshowInfo(){System.out.println(name);}}
classManagerextendsEmployee{private
Stringdepartment;publicvoidshowInfo(){System.out.println(name);System.out.println(“Managerof”+department);}}
2022/12/24IBMjava培训内部资料110面向对象的概念——继承继承使得子类可以利用父类中定义的方法和继承继承性是面向对象程序设计语言的一个基本特征,通过继承可以实现代码的复用。继承而得到的类为子类,被继承的类为父类,父类包括所有直接或间接被继承的类。Java中不支持多重继承。通过在类的声明中加入extends子句来创建一个类的子类:classSubClassextendsSuperClass{}如果省略extends子句,则该类为Object的子类。子类可以继承父类中访问权限设定为public、protected和default的成员变量和方法,但是不能继承访问权限为private的成员变量和方法。2022/12/24IBMjava培训内部资料111继承继承性是面向对象程序设计语言的一个基本特征,通过继承可以继承的例子2022/12/24IBMjava培训内部资料112继承的例子2022/12/16IBMjava培训内部资料49调用父类构造函数super(x,…);调用父类构造函数时应遵循的原则:只能在子类中调用父类的构造函数.调用父类构造函数时,必须使用super(…)不要在父类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国晶莹玻璃清洁剂市场调查研究报告
- 2025年中国日晒盐市场调查研究报告
- 2025年中国数码机芯板市场调查研究报告
- 2025-2030年中国中厚板产业发展趋势分析及投资风险评估报告
- 2025至2031年中国绣花工艺杯垫行业投资前景及策略咨询研究报告
- 2025-2030年中国ABS产业运行态势及投资前景预测研究报告
- 新疆石河子职业技术学院《中国古典文学史料学》2023-2024学年第二学期期末试卷
- 2025至2031年中国立式超细微球磨机行业投资前景及策略咨询研究报告
- 2025至2031年中国硫酸腺嘌呤行业投资前景及策略咨询研究报告
- 小儿骶管麻醉
- DB11-T 864-2020 园林绿化种植土壤技术要求
- FBZ-3076低周减载控制装置技术规范书
- 六年级下册 人教版 数学 第六单元《图形与位置》课件
- 小红书搜索推广营销师认证考试题库(附答案)
- 《项目沟通管理培训》课件
- 感染性疾病科各项规章制度及岗位职责
- 围术期护理常规及技术规范
- 完整版《中药学》课件
- 工程推动会监理单位总监办发言稿
- 石家庄市既有建筑改造利用消防设计审查指南(2024年版)
- 船舶修造行业安全风险监控与应急措施
评论
0/150
提交评论