第6章-创建对象

第6章-创建对象

ID:81932162

大小:326.00 KB

页数:54页

时间:2022-10-14

上传者:胜利的果实
第6章-创建对象_第1页
第6章-创建对象_第2页
第6章-创建对象_第3页
第6章-创建对象_第4页
第6章-创建对象_第5页
第6章-创建对象_第6页
第6章-创建对象_第7页
第6章-创建对象_第8页
第6章-创建对象_第9页
第6章-创建对象_第10页
资源描述:

《第6章-创建对象》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

第6章创建对象主讲:胡伏湘

1回顾与复习Java提供了哪些循环语句?数组是下标是从哪个数字开始编号的?有一个数组a[4][5],它有多少个元素?请一个学生写出数组a[4][5]的全部元素。基本数据类型的参数传递与引用变量的参数传递结果有什么不同?

2本章提要主要知识点:类的实例化;构造方法;对象的使用;对象的清除。学习目标:能根据已经定义了的类进行实例化,并能运用对象编写代码完成一定的功能。

36.1创建对象6.1.1对象的实例化对象实例化的格式是:类型对象名=new类型([参数列表]);其中,类型表示对象的类型,必须是复合类型,包括类、字符串等,对象名是一个合法的标识符。参数列表要根据类的形式参数确定,与之匹配。如:Personwangming=newPerson();

46.1创建对象6.1.2对象的引用类的成员(包括成员属性和成员方法)必须要在产生对象即实例化后才能被引用,引用的方法是:对象名.成员2.引用对象的方法格式:对象引用.方法名([参数列表]);

56.1创建对象6.1.3方法的参数传递1.基本数据类型的参数传递基本类型的变量作为实参传递,并不能改变这个变量的值。方法中的形式参数相当于局部变量,方法调用结束后自行释放,不会影响主程序中的同名变量对象的引用变量并不是对象本身,而是对象的句柄(名称),一个对象可以有多个句柄

66.1创建对象举例:分析下面程序的运行结果。classPassValue{publicstaticvoidmain(Stringargs[]){intx=5;chang(x);System.out.println(x);}publicstaticvoidchang(intx){x=3;}}

76.1创建对象6.1.3方法的参数传递2.引用变量的参数传递引用数据类型(如:类、接口)的参数调用可以改变对象的内容举例:分析下面程序的运行结果。

86.1创建对象classPassRef{intx;publicstaticvoidmain(String[]args){PassRefobj=newPassRef();obj.x=5;chang(obj);System.out.println(obj.x);}publicstaticvoidchang(PassRefobj){obj.x=3;}}

96.1创建对象6.1.4对象的消失Java运行时系统通过垃圾收集器GarbargeCollector周期性地释放无用对象所占的内存,以完成对象的清除Java的垃圾收集器自动扫描对象的动态内存空间,对正在使用的对象加上标记,将所有引用的对象作为垃圾收集起来并释放.

10思考一下假如有一个类Person,问以下实例化操作哪个是正确的。Personxiaoliu=newPerson;Personxiaoliu=newPerson();Personxiaoliu()=newPerson;

116.2构造方法例1:构造方法引例classPerson{//分析运行结果publicPerson(){System.out.println("方法Person被调用了");}privateintage=22;publicvoidshout(){System.out.println("我的年龄已经到了"+age);}}classTestPerson{publicstaticvoidmain(String[]args){Personp1=newPerson();p1.shout();//Personp2=newPerson();p2.shout();//Personp3=newPerson();p3.shout();}}

126.2构造方法6.2.1构造方法的定义构造方法的特征:具有与类相同的名称不能含有返回类型,也不能是void的不能在方法中用return语句返回一个值在类实例化时,它会由系统自动调用

136.2构造方法定义:构造方法是java创建的伪方法,是一种实例方法,名称与其类名相同,是通过new关键字来调用的。构造方法的执行顺序:在创建对象时,对象所在类的所有属性会首先进行初始化,在类的所有成员初始化完成后,才调用对象所在类的构造方法创建对象,构造方法的功能就是初始化。

146.2构造方法例2:构造方法的调用classSuperClass{SuperClass(){ System.out.println("SuperClass的构造方法");} } publicclassSubClassextendsSuperClass{SubClass(){ System.out.println("SubClass的构造方法");} publicstaticvoidmain(String[]args){ SubClasssub=newSubClass();} }

156.2构造方法小结:在子类中只实例化了一个子类对象。从输出结果上看,程序并不是一开始就运行自己的构造方法,而是先运行其父类的默认构造方法。注意:程序自动调用其父类的默认构造方法。输出结果:SuperClass的构造方法SubClass的构造方法

166.2构造方法例3:分析下面程序的运行结果classOne{One(Stringstr){ System.out.println(str);} } classTwo{ Oneone_1=newOne("one-1"); Oneone_2=newOne("one-2"); Oneone_3=newOne("one-3");Two(Stringstr){ System.out.println(str);} } publicclassTest{ publicstaticvoidmain(String[]args){ System.out.println("Testmain()start..."); Twotwo=newTwo("two");} }

176.2构造方法运行结果:Testmain()start... one-1 one-2 one-3 two分析:在main()方法中实例化了一个Two类的对象。但程序在初始化Two类的对象时,并非先调用Two类的构造方法,而是先初始化Two类的成员变量。这里Two类有3个成员变量,它们都是One类的对象,所以要先调用3次One类的相应的构造方法。最后在初始化Two类的对象。

186.2构造方法6.2.2构造方法的重载一个类的构造方法可以有多个,允许重载每个类至少有一个构造方法,如果用户没有定义,系统自动产生一个默认构造方法,没有参数,也没有方法体。用户可以定义构造方法,如果定义了构造方法,则系统不再提供默认构造方法构造方法一般是public,不可定义为private的

196.2构造方法例4:构造方法的重载。classPerson{privateStringname="unknown";privateintage=-1;publicPerson(){System.out.println("constructor1iscalling");}publicPerson(Strings){name=s;System.out.println("constructor2iscalling");System.out.println("nameis"+name);}

206.2构造方法publicPerson(Strings,inti){name=s;age=i;System.out.println("constructor3iscalling");System.out.println("name&age:"+name+age);}publicvoidshout(){System.out.println("Pleaseseeabove!");}}classTestPerson{publicstaticvoidmain(String[]args){Personp1=newPerson();p1.shout();Personp2=newPerson("Jack");p2.shout();Personp3=newPerson("Tom",9);p3.shout();}}

216.3this与super(补充内容)6.3.1thisthis在方法中用来指向引用当前正在执行的那个对象实例需要全面访问当前对象,而不是访问某一个个别的实例对象,也可以使用thisthis(参数表),这个构造函数就会调用同一个类的另一个相同的构造函数

226.3this与super例1:引例classPersonInformation{Stringname,sex,nationality,address;intage;voidChinese(Stringname,Stringsex,Stringnationality,Stringaddress,intage){this.name=name;this.sex=sex;this.nationality=nationality;this.address=address;this.age=age;}}

236.3this与superthis使用最普遍的3种情况:1、在方法的某个形参名与当前对象的某个成员有相同的名字,为了不至于混淆,需要明确使用this关键字来指明要使用哪个成员,使用方法是this.成员名,而不带this的那个便是形式参数。2、还可以用this.方法名来引用当前对象的某个方法,但这时this就不是必不可少的了,可以直接用方法名来访问那个方法,编译器会知道你要调用的是那一个。3、this(参数表),这个构造函数就会调用同一个类的另一个相同的构造函数。

246.3this与super例2:利用this调用另一个构造方法classUserInfo{publicUserInfo(Stringname){this(name,aNewSerialNumber);}publicUserinfo(Stringname,intnumber){userName=name;userNumber=number;}}

256.3this与super例3:this使用举例publicclassDemoThis{privateStringname;privateintage;DemoThis(Stringname,intage){setName(name);//你可以加上this来调用方法,如://this.setName(name);但并不是必须的setAge(age);this.print(); }

266.3this与superpublicvoidsetName(Stringname){this.name=name;//此处必须指明你要引用成员变量}publicvoidsetAge(intage){this.age=age;}publicvoidprint(){System.out.println("Name="+name+"Age="+age);}//在此行中并不需要用this,因为没有会导致混淆的东西publicstaticvoidmain(String[]args){DemoThisdt=newDemoThis("Sofat",22);}}

276.3this与super6.3.2super引例classCountry{Stringname;voidvalue(){Stringname="China";}}此行会让父类中同名变量隐藏如果想要使用父类的构造函数则应当使用super(参数列表)的形式。

286.3this与super改进方法:运用super关键字classCityextendsCountry{Stringname;voidvalue(){Stringname="Changsha";super.value();System.out.println(name);System.out.println(super.name);}}

296.3this与super例4:super和this综合使用举例classPerson{publicintc;privateStringname;privateintage;protectedvoidsetName(Stringname){this.name=name;}protectedvoidsetAge(intage){this.age=age;}protectedvoidprint(){System.out.println("Name="+name+"Age="+age);}}

306.3this与superpublicclassDemoSuperextendsPerson{publicvoidprint(){System.out.println("DemoSuper:");super.print();}publicstaticvoidmain(String[]args){DemoSuperds=newDemoSuper();ds.setName("Sofat");ds.setAge(22);ds.print();}}

316.3this与super运行结果:DemoSuper: Name=SofatAge=22Super小结:1、在DemoSuper中,重新定义的print方法覆写了父类的print方法,它首先做一些自己的事情,然后调用父类的那个被覆写了的方法。2、如果父类的成员可以被子类访问,可以像使用this一样使用它,用“super.父类中的成员名”的方式

32本章总结主要内容:1、创建对象2、方法的参数传递3、构造方法

33复习提问1、构造方法有什么特点?2、对于一个类,如果定义了多个构造方法,这种现象称为构造方法的重载。这些构造方法在声明时应该有什么不同?3、类初始化时,会自动调用构造方法,如果存在着重载现象,系统根据什么原则找到相应的构造方法?

343.5内部类内部类:是在某个类的内部嵌套定义的一个类,内部类可以在一个语句块的内部定义,也可以是其它类的成员,还可以在一个表达式内部匿名定义。内部类的特征:内部类只能声明为private或protected的内部类可以定义为abstract(抽象类)内部类不能与包含它的类名相同

353.5内部类实例:内部类的使用publicclassInnerClassTest{publicstaticvoidmain(Stringargs[]){InnerClassTestclassObj=newInnerClassTest();classObj.Printh();}voidPrint(){innerClassinnObj=newinnerClass();innObj.Print();}classinnerClass{publicvoidPrint(){System.out.println("此处调用了内部类的Print()方法");}}}

363.5内部类使用内部类的主要原因:内部类的对象可访问外部类的成员方法和变量,包括私有成员实现事件监听器时,采用内部类、匿名类编程容易实现其功能编写事件驱动程序,内部类很方便

373.5内部类使用内部类的主要缺点:使用内部类虽然可以节省编译后产生的字节码文件的大小,但会造成程序结构上的不清晰。建议初学者不要编写内部类。编程时一般不要使用内部类。

383.6字符串的处理3.6.1字符串的生成Java.lang语言核心包中定义了String(初始化时长度固定)和StringBuffer(初始化后长度可变)两个来封装对字符串的各种操作,它们都是final类,不能被其它类继承。通过String提供的构造方法,可以生成一个空串,String类默认的构造方法不需要任何参数,如:Strings=newString();

393.6字符串的处理3.6.1字符串的生成StringstrObj=newString(charcharArray[]);StringstrObj=newString(charcharArray[],intstartIndex,intnumChars);如:charcharArray1[]={'h','e','l','l','o'};charcharArray2[]={'h','e','l','l','o','j','a','v','a'};Strings1=newString(charArray1);Strings1=newString(charArray2,1,5)

403.6字符串的处理3.6.1字符串的生成常用方法:也可以用字符串常量初始化一个String对象例:Strings="helloJava";

413.6字符串的处理类StringBuffer和String的区别:String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据。String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。

423.6字符串的处理3.6.1字符串的生成通过类StringBuffer的构造方法生成可变的字符串对象,格式:StringBufferstrObj=newStringBuffer();StringBufferstrObj=newStringBuffer(intnum);StringBufferstrObj=newStringBuffer(Stringstr);

433.6字符串的处理3.6.2字符串的访问Java提供了连接运算符+,可将其它各类型的数据转换为字符串,并连接形成新的字符串,+运算是通过StringBuffer类和它的append方法实现的。如:在Sytem.out.println()方法中经常用到。

443.6字符串的处理3.6.3String类的常用方法1.length()2.charAt(intn)3.toLowerCase()4.toUpperCase()5.subString(intbeginIndex)6.subString(intbeginIndex,intendIndex)

453.6字符串的处理3.6.3String类的常用方法7.replace(charoldChar,charnewChar)8.replaceAll(StringoldStr,StringnewStr)9.replaceFirst(StringoldStr,StringnewStr)10.toCharArray()trim()//压缩头部和尾部的空格indexOf(Stringstr)//不存在则返回-1concat(StringotherStr)//将当前字符串和otherStr连接起来,str3=str1.concat(str2)

463.6字符串的处理3.6.4StringBuffer类的常用方法1、deleteCharAt(intindex):删除指定位置index上的字符2、insert(intoffset,StringsubStr):在给定的字符串的offset位置插入字符串subStr3、append(StringstrObj):在给定的字符串末尾添加中一个字符串strObj4、delete(intbeginIndex,intendIndex):删除从beginIndex开始到endIndex结束之间的字符。如:str.delete(4,9);从字符串str中删除第4到第9共6个字符,结果仍然存放在str中

473.6字符串的处理实例1:字符串String类应用举例//StringOp.java--String类字符串的常用操作publicclassStringOp{publicstaticvoidmain(Stringargs[]){Strings1="AbCdEf中国湖南Changsha";Strings2="ABbCEFgh长沙410004LoadXiangzhang";System.out.println("字符串s1为:"+s1);System.out.println("字符串s1的长度为:"+s1.length());System.out.println("字符串s2为:"+s2);System.out.println("字符串s2的长度为:"+s2.length());System.out.println("s1大写形式是:"+s1.toUpperCase());System.out.println("s2小写形式是:"+s2.toLowerCase());

483.6字符串的处理for(inti=0;i

493.6字符串的处理实例2:字符串StringBuffer类应用举例--反转字符串中的字符publicclassStringBufferOperationDemo{publicstaticvoidmain(Stringargs[]){Strings="0123456789";System.out.println("原来s="+s);intl=s.length();StringBufferbuffer=newStringBuffer(l);for(intj=l-1;j>=0;j--){buffer.append(s.charAt(j));}System.out.println("反转后s="+buffer);}}

503.7JDK的帮助系统3.7.1html格式的JDK文档主界面由两大部分组成:一部分是导航标题,另一部分是结构图。1.导航栏导航栏包括Search、GeneralInfo、API&Language、GuidetoFeatures、ToolDocs、Demos/Tutorials共6个项目

513.7JDK的帮助系统3.7.1html格式的JDK文档2.JAVA平台结构JAVA平台结构由7部分组成,每一部分又包括若干链接对象.DevelopmentTools&APIS:开发工具和应用程序接口DevelopmentTechnologies:开发技术UserInterfaceToolskit:用户接口工具集IntegrationAPIS:集成应用程序接口CoreAPIS:核心应用程序接口JavaVirtualMachine:JVM(Java虚拟机)Platforms:平台

523.7JDK的帮助系统3.7.2chm格式的JDK文档chm格式的JDK文档具有更加强大的查询功能,更加适合于初学者使用如:要查类Integer的方法和有关内容,在左边索引标签处,输入要查找的关键字Integer,并回车,系统会显示与Integer有关的类、方法、包提供类的继承关系、构造方法、常量、方法等详细信息。

533.7JDK的帮助系统练习:利用JDK文档,查询String类的以下属性。继承关系定义属性(字段)接口方法构造方法--------在线JDK文档中文版http://dlc.sun.com.edgesuite.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html/zh_CN/api/index.html

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭