




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java面向对象程序设计第4章,类与对象续,主讲:王美丽办公室:信息学院204Email:meili_w,本章内容,面向对象程序设计的基本概念,类的定义,创建对象,隐藏和封装,4,1,2,3,三、创建对象,使用对象的成员变量或方法,对象间赋值(拷贝它的引用),把对象作为方法的参数,注1:先声明对象引用的名字,加一个“.”,跟上对象成员的名字注2:在Java语言里,方法只能是类的一部分;因此,只能通过对象来调用方法,equivalance.java,返回,publicclassEquivalancepublicstaticvoidmain(Stringargs)Integern1=newInteger(47);Integern2=newInteger(47);System.out.println(n1=n2);System.out.println(n1!=n2);,falsetrue,assignment.java,返回,classNumberinti;publicclassAssignmentpublicstaticvoidmain(Stringargs)Numbern1=newNumber();Numbern2=newNumber();n1.i=9;n2.i=47;System.out.println(n1.i=+n1.i+;n2.i=+n2.i);n1=n2;System.out.println(n1.i=+n1.i+;n2.i=+n2.i);n1.i=27;System.out.println(n1.i=+n1.i+;n2.i=+n2.i);,n1.i=9;n2.i=47,0,0,9,47,27,n1.i=47;n2.i=47,n1.i=27;n2.i=27,Passobject,返回,classLettercharc;publicclassPassObjectstaticvoidf(Lettery)y.c=z;publicstaticvoidmain(Stringargs)Letterx=newLetter();x.c=a;System.out.println(1:x.c:+x.c);f(x);System.out.println(2:x.c:+x.c);,y=x;,a,z,callbyvalue,返回,classCallbyvaluepublicstaticvoidmain(Stringargs)Passtestobj=newPasstest();intx=5,y=30;System.out.println(xandybeforecall:+x+y);obj.f(x,y);System.out.println(xandyaftercall:+x+y);,classPasstestvoidf(inti,intj)i*=2;j/=2;,530还是1015?,返回,publicclassCallbyintx,y;Callby(inti,intj)x=i;y=j;voidf(Callbyobj)/传入对象obj.x*=2;obj.y/=2;publicstaticvoidmain(Stringargs)Callbyobj=newCallby(5,30);System.out.println(obj.xandobj.ybeforecall:+obj.x+obj.y);obj.f(obj);System.out.println(obj.xandobj.yaftercall:+obj.x+obj.y);,this的使用,可以调用本类中的方法-一般方法(表示当前对象)this.jump-构造方法(注意),可以调用本类中的属性(Flower.java),三、创建对象,classDogpublicvoidjump()System.out.println(“jumping”);publicvoidrun()System.out.println(“jumping”);,Dogd=newDog();d.jump();,如何在run方法中调用jump方法?,publicclassTestDogpublicstaticvoidmain(Stringargs)Dogdog=newdog();dog.run();,在run方法中考虑2个问题:1、调用jump时是否一定需要一个Dog对象?2、是否一定需要重新创建一个Dog对象?,this.jump();,此时this所代表的对象是不确定的,但它的类型是确定的,它所代表的对象只能是当前类;只有当这个方法被调用时,它所代表的对象才被确定下来;谁在调用这个方法,this就代表谁。,三、创建对象,在一个构造函数中调用另外一个构造函数时,用this,但构造函数调用必须是该构造函数的第一句话,并且不能在一个构造函数里调用2个构造函数打开:Flower.java,Flower.java,publicclassFlowerprivateinti=0;privateStrings=newString(null);Flower(intj)i=j;System.out.println(Firstconstructor,i=+i);Flower(Strings,intj)this(j);System.out.println(“Secondconstructor);publicstaticvoidmain(Stringargs)Flowerhua=newFlower(asd,3);,调用哪个?,三、创建对象,回顾,内存分配,栈内存:对象的名字堆内存:对象的具体内容(属性)全局代码区:保存所有的方法全局数据区:存放static类型的属性,三、创建对象,一般我们怎样访问类中的成员?,必须通过一个类对象才能访问。,若想创建一个无需引用具体的实例对象就能访问的类成员,只需在声明前加上static关键字即可。,三、创建对象,两种情况:1)无论创建对象与否,都要有一段保存某些数据的内存2)有某个方法不从属于任何对象当声明某些方法或变量是static时,这项数据或方法没有被连到类的任何一个实例上。,三、创建对象,区别:不管为类创建了多少对象,系统仅在第一次调用类的时候为类变量分配内存,所有对象共享该类的类变量。因此,可以通过类本身或某个对象来访问类变量。,没用关键字static修饰的方法就是实例方法,只能通过对象来调用;反之称为类方法,重要用途:不用创建对象就能调用方法。,三、创建对象,类方法只能访问类变量,不能访问实例变量类方法既可以用类名来调用,也可以用对象来调用。但用类名调用类方法程序的可读性更好(FlowerStatic.java),三、创建对象,定义初始化,classAbooleanb=false;charx=a;inti=47;,classAFlowerhua=newFlower();,classainti=f();,classainti=f();intj=g(i);,classaintj=g(i);inti=f();,Cons.java构造函数的重载,classRockRock()System.out.println(缺省构造函数!);Rock(inti)System.out.println(带参数的构造函数!);publicclassConspublicstaticvoidmain(Stringargs)RockRock1=newRock();RockRock2=newRock(1);,返回,运行结果?,四、隐藏和封装,封装是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。,如:Person对象的age属性,通常不能随意修改它。,访问控制符,四、隐藏和封装,访问控制级别由小到大,如果类里的一个成员(包括属性和方法)使用private修饰,则这个成员只能在该类的内部被访问。,默认访问控制,可以被相同包下的其它类访问。,既可以被同一个包中其它类访问,也可以被不同包中的子类访问。,可以被所有类访问。,四、隐藏和封装,四、隐藏和封装,只能在Person类内才可以操作和访问,四、隐藏和封装,publicclassTestPersonpublicstaticvoidmain(Stringargs)Personp=newPerson();,p.age=1000;,p.setAge(50);,System.out.println(“age=”+p.getAge();,如何输出年龄的值呢?,四、隐藏和封装,publicclassPersonprivateintage;publicvoidsetAge(intage)if(age100|age0)System.out.println(“年龄不合法”);return;elsethis.age=age;publicintgetAge()returnthis.age;,改进!,在方法中允许程序员增加自己的控制逻辑,从而保证age属性不会出现与实际不符的情形。,四、隐藏和封装,类里的绝大部分属性都应该用private修饰,除了一些static修饰的、类似全局变量的属性,考虑使用public。,如果某个类主要用作其它类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不想被外界直接调用,则应该用protected修饰。,希望暴露出来给其它类自由调用的方法应该用public修饰。,四、隐藏和封装,你遇到过与自己同名的同学么?,Java引入了包(package)机制,提供了类的多层命名空间,用于解决类的命名冲突、类文件管理等问题。,四、隐藏和封装,包的定义语句格式为:,package包名;,注:如果一个Java文件中有package语句,那么package语句必须写在Java源程序的第一行,最多只能有一条package语句。,一个包对应一个文件夹,一个包中可以包括许多类文件。,Java语言的包等级和windows的文件组织方式完全相同,只是表示方法不同。,四、隐藏和封装,如:packagemypackage;publicclassMyclass/,mypackage.Myclassm=newmypackage.Myclass();,用import来引入包或包里的成员,如:importjava.util.*;importjava.util.Timer;,四、隐藏和封装,如:packagemypackage;publicclassMyclass/,importmypackage;Myclassm=newMyclass();,mypackage.Myclassm=newmypackage.Myclass();,初学者不要涉及太多包的概念,把所有类放在一个文件下即可。,返回主菜单,4.12反编译和文档生成器,JDK提供的反编译器javap.exe可以将字节码反编译为源码,查看源码类中的public方法名字和public成员变量的名字,例如:javapjava.util.Date,4.12.1javap反编译,4.12.2javadoc制作文档,使用JDK提供的javadoc.exe可以制做源文件的html格
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基金从业考试 挂靠及答案解析
- 宁夏餐饮从业人员考试及答案解析
- 细菌性疫苗生产工培训考核试卷及答案
- 车辆维修工岗前考试及答案解析
- 履带运输车司机质量追溯知识考核试卷及答案
- 考过证券从业考试后及答案解析
- 工程热处理工协作考核试卷及答案
- 微水电利用工专项考核试卷及答案
- 装卸搬运工转正考核试卷及答案
- 涂装后处理工工艺考核试卷及答案
- 慢性阻塞性肺疾病伴肺曲霉病诊治和管理专家共识解读课件
- 2025人教版八年级道德与法治上册全册知识点
- 2025年水利资料员基础知识考试题库及答案1
- T-CAV 032-2025 T-CAS 1061-2025 生物制品临床研究术语
- 民办学校财务管理体系构建与制度汇编
- 2025年时事政治试题库及答案(共550题)
- 助理医师题库及答案
- 食品关键控制点知识培训
- DZ/T 0275.1-2015岩矿鉴定技术规范第1部分:总则及一般规定
- 纸箱委托加工合同协议书
- 竞选青协笔试题及答案
评论
0/150
提交评论