【文档说明】《JAVA语言程序设计》第3章课件.ppt,共(26)页,286.559 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45114.html
以下为本文档部分文字说明:
1对象和类(续)对象的创建对象的使用对象的释放对象的访问2对象的创建对象成员(变量和方法)静态(static)成员:属于类实例成员:属于对象创建对象/实例化对象—new例1:Applea=newApple();(创建对象)例2:Applea;(对象的说明
)a=newApple();(实例化对象)1.对象的实例化通过构造方法(constructor)来实现2.构造方法的名字与类名相同3.构造方法没有返回值4.构造方法可以有多个,构成方法的重载(overload)3例:对象的实例化和初始化publicstatic
voidmain(Stringargs[]){Squares1=newSquare();Squares2=newSquare(20,50);Squares3=newSquare(s1);System.out.println(s1.width()+“”+s
1.height());System.out.println(s2.width()+“”+s2.height());System.out.println(s3.width()+“”+s3.height());}}classSquare{inta,h;Square(){a=10;h=
20;}Square(intx,inty){a=x;h=y;}Square(Squares){a=s.width();h=s.height();}intwidth(){returna;}intheight(){returnh;}计算结果:102020501020对象的创建4默认构造方法例cla
ssApple{intcolor;}Applea=newApple();对象实例的判断:null例Applea;if(a==null)System.out.println(“Daydream”);对象
的创建运行时系统自动赋予一个空构造函数如publicApple(){;}5再谈构造方法对象的创建classMyTest{MyTest(booleanb){}publicstaticvoidmain(St
ringargs[]){//MyTestm1=newMyTest();MyTestm2=newMyTest(false);}}classMyTest{MyTest(booleanb){}MyTest(){}publicstaticvoidmain(Stringargs[]){
MyTestm1=newMyTest();MyTestm2=newMyTest(false);}}运行时系统自动赋予一个空构造方法,仅仅当该类没定义构造方法的情况下6对象和类(续)对象的创建对象的使用对象的释放对象的访问7对象的使
用通过对象引用对象的成员变量和成员方法classSquare{inta,h;Square(){a=10;h=20;}Square(intx,inty){a=x;h=y;}Square(Squarer){a=r.width()
;h=r.height();}intwidth(){returna;}intheight(){returnh;}voidset(intx,inty){a=x;h=y;}}q1.set(30,40);q1.a=30;q1.h=40;目的相同第一方式更安全、更面向对象(数据封装)避免直接操纵
变量8对象的使用引用对象的变量格式:对象名.变量名引用对象的方法格式:对象名.方法名例1Vectorv=newVector();v.addElement(“s1”);例2inta[]={1,2,3,4,5};intsize=a.length;例3Syste
m.out.println();9对象和类(续)对象的创建对象的使用对象的释放对象的访问10对象的释放将对象从内存中清除内存的管理(枯燥、容易出错)垃圾回收(GarbageCollection
)TheJavaplatformallowsyoutocreateasmanyobjectsasyouwant(limited,ofcourse,bywhatyoursystemcanhandle),andyou
don'thavetoworryaboutdestroyingthem.TheJavaruntimeenvironmentdeletesobjectswhenitdeterminesthattheyarenolongerbeingused.Th
isprocessiscalledgarbagecollection.11对象的释放垃圾搜集器(GarbageCollector)周期性地释放不再被引用的对象,自动完成手动完成,System.gc();(java.lang.System中)publicstaticvoidgc()
--Runsthegarbagecollector.12对象和类(续)对象的创建对象的使用对象的释放对象的访问13对象的访问访问对象的私有(private)成员通过定义一个公共方法来实现classStudent{privateStringnam
e;privateStringid;Student(Strings1,Strings2){name=s1;id=s2;}StringgetName(){returnname;}voidsetName(Strings){name=s;}}Students
t=newStudent(“李忠”,“001”);Strings=st.getName();……st.setName(“李晓”);s=st.getName();……14对象的访问对象作为方法的参数[访问权限修饰符]方法
返回类型方法名(参数)[throws异常名]{方法体;}参数:类型变量名,……类型:基本数据类型/复合类型(对象)参数的传递Passbyvalue15例对象用作方法的参数对象的访问classTest{publicstaticvoidmain(
Stringargs[]){Spots=newSpot(2,3);System.out.println(“s点的坐标:”+s.getX()+“,”+s.getY());Transts=newTrans();ts.move(s,4,5);System.
out.println(“s点的坐标:”+s.getX()+“,”+s.getY());}}classSpot{privateintx,y;Spot(intu,intv){setX(u);setY(v);}voidsetX(in
tx1){x=x1;}voidsetY(inty1){y=y1;}intgetX(){returnx;}intgetY(){returny;}}classTrans{voidmove(Spotp,in
th,intk){p.setX(p.getX()+h);p.setY(p.getY()+k);}}D:\javaTests点的坐标:2,3s点的坐标:6,816例对象用作方法的参数对象的访问classTest{publicstaticvoidmain(Strin
gargs[]){Spots=newSpot(2,3);System.out.println(“s点的坐标:”+s.getX()+“,”+s.getY());Spot.move(s,4,5);System.out.println(“s点的坐标:”+s.getX()+“,”+s.get
Y());}}classSpot{privateintx,y;Spot(intu,intv){setX(u);setY(v);}voidsetX(intx1){x=x1;}voidsetY(inty1){y=y1;}intgetX(){returnx;}intget
Y(){returny;}staticvoidmove(Spotp,inth,intk){p.setX(p.getX()+h);p.setY(p.getY()+k);}}D:\javaTests点的坐标:2,3s点的坐标:6,817例对象用作方法的参数对象
的访问classTest{publicstaticvoidmain(Stringargs[]){Spots=newSpot(2,3);System.out.println(“s点的坐标:”+s.get
X()+“,”+s.getY());s.move(4,5);System.out.println(“s点的坐标:”+s.getX()+“,”+s.getY());}}classSpot{privateintx,y;Spot(intu,intv){setX(u);setY(v);
}voidsetX(intx1){x=x1;}voidsetY(inty1){y=y1;}intgetX(){returnx;}intgetY(){returny;}voidmove(inth,intk){x=x+h;y=y+k;}}D:\ja
vaTests点的坐标:2,3s点的坐标:6,818对象的访问对象的访问对象作为方法的返回值[访问权限修饰符]方法返回类型方法名(参数)[throws异常名]{方法体;}返回类型有返回值:基本数据类型/复合类型(对象)无返回值:void19对象的访问对象作为方法的返
回值例:求两点坐标之间的中点坐标思路:(x1,y1)和(x2,y2)(x,y)x=(x1+x2)/2,y=(y1+y2)/2Spots1=newSpot(2,3);Spots2=newSpot(4,5);
Spots=s1.midSpot(s2);20例对象用作方法的返回值对象的访问classTest{publicstaticvoidmain(Stringargs[]){Spots1=newSpot(3.0,5.
0);Spots2=newSpot(6.0,8.0);System.out.println(“s1点的坐标:”+s1.getX()+“,”+s1.getY());System.out.println(“s2点的坐标:”+s2.get
X()+“,”+s2.getY());Spots=s1.midSpot(s2);System.out.println(“中点的坐标:”+s.getX()+“,”+s.getY());}}classSpot{privatedoublex,y;
Spot(doubleu,doublev){setX(u);setY(v);}voidsetX(doublex1){x=x1;}voidsetY(doubley1){y=y1;}doublegetX(){returnx;}doublegetY(){
returny;}SpotmidSpot(Spots){doublemidX=(x+s.getX())/2;doublemidY=(y+s.getY())/2;returnnewSpot(midX,midY);}}D
:\javaTests1点的坐标:3.0,5.0s2点的坐标:6.0,8.0中点的坐标:4.5,6.521对象的访问数组:类型相同的一列元素作为一个对象看待publicclassArrayDemo{publicstaticvoidmain(String
[]args){int[]anArray=newint[10];for(inti=0;i<anArray.length;i++){anArray[i]=i;System.out.print(anArray[i]+
"");}System.out.println();}}22对象的访问对象数组classStudent{privateStringname;privateStringid;Student(Strings1,
Strings2){name=s1;id=s2;}StringgetName(){returnname;}voidsetName(Strings){name=s;}voiddisplay(){System.out.println(name+“”+id);}
}Studentst[]=newStudent[10];for(inti=0;i<st.length;i++){st[i]=newStudent(…);}for(inti=0;i<st.length;i++){st[i].d
isplay();}23对象的访问对象作为另一个对象的成员变量一个对象中包含另一个对象,组合关系classMobilePhone{privateStringtype;privateWatchw;MobilePhone(Strings){type=s;}voidsetWat
ch(Watcha){w=a;}longgetTime(){returnw.getTime();}}classWatch{longgetTime(){returnSystem.currentTimeMillis();}}MobilePhonemp=newMob
ilePhone(“nokia”);Watchw=newWatch();mp.setWatch(w);longl=mp.getTime();publicstaticlongcurrentTimeMillis()thedi
fference,measuredinmilliseconds,betweenthecurrenttimeandmidnight,January1,1970UTC24对象的访问关键词thisthis指当前对象应用1:加强程序可读性(this可有可无)classDemo1{do
ublex,y;Demo1(doublei,doublej){this.x=i;this.y=j;}doubleave(){return(x+y)/2;}publicstaticvoidmain(Stringargs[]){Demo1d=newD
emo1(3,4);System.out.println(d.ave());}}classDemo2{intx,y,z;Demo2(inta,intb){x=a;y=b;this.swap(a,b);}voidswap(inta,intb){intt;if(x<
y){t=x;x=y;y=t;}}}25对象的访问关键词thisthis指当前对象应用2:对同一个对象执行多次方法调用classLeaf{inti=0;Leafincrement(){i++;r
eturnthis;}voidprint(){System.out.println(“i=”+i);}publicstaticvoidmain(Stringargs[]){Leafx=newLeaf();
x.increment().increment().increment().print();}}D:\javaLeafi=326对象的访问关键词thisthis指当前对象应用3:在一个构造函数中调用另一个构造
函数classFlower{Stringname;intprice;Flower(){this("tulip",10);}Flower(Strings,inti){name=s;price=i;}voidprint(){System.out.
println(name+""+price);}publicstaticvoidmain(Stringargs[]){Flowerf=newFlower();f.print();}}D:\javaFlowertulip10