对象和接口(二)_第1页
对象和接口(二)_第2页
对象和接口(二)_第3页
对象和接口(二)_第4页
对象和接口(二)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4章章 类、对象和接口(二)类、对象和接口(二)本次课教学内容q巩固对象的创建与使用q理解对象的内存模型q掌握Java中参数传递的方式q掌握实例变量和类变量、实例方法和类方法的区别q理解this关键字的含义复习巩固例1:上机题第4题。class ProfessorString name; char sex; int age; String course; Professor(String name,char sex,int age,String course) =name; this.sex=sex; this.age=age; this.course=course; v

2、oid set(String coursename) course=coursename; String get() return course; String getDetails() return 姓名:+name+t性别:+sex+t年龄:+age+t所授课程:+course;函数值通过函数值通过return语句返回语句返回构造函数需与类名相同,且无类型构造函数需与类名相同,且无类型当成员变量与局部变量同名时,需当成员变量与局部变量同名时,需使用使用this关键字来使用成员变量关键字来使用成员变量复习巩固 public static void main(String args) Prof

3、essor professor=new Professor(张三,男,35,C语言程序设计); String couname,detail; detail=professor.getDetails(); System.out.println(detail); professor.set(Java程序设计); couname=professor.get(); System.out.println(课程名称更改为:+couname); detail=professor.getDetails(); System.out.println(detail); 强调:q如果类里定义了构造方法,则Java不提

4、供默认的构造方法,如上例中,Professor professor=new Professor(); q成员变量可以通过对象直接引用q当使用new运算符和类中的构造方法为声明的对象分配内存时,如没有对成员对象进行初始化操作,则整型成员变量的默认值为0,浮点型的默认为0.0,boolean型的默认为false,引用型的默认为null。例2:分析下程序的运行结果。class StudentString name; String address; int score; public void setMessage(String x1,String x2,int x3) name=x1;address

5、=x2;score=x3; public static void main(String args) Student s1=new Student(); System.out.println(+ +s1.address+ +s1.score); s1.setMessage(张三,西安市兴庆路1号,75); System.out.println(+ +s1.address+ +s1.score); 调用无参数的默认构造方法调用无参数的默认构造方法利用成员方法给成员变量赋值利用成员方法给成员变量赋值运行结果如下图所示。练习:将上例改成使用构造方法给成员变量赋值。参考答案

6、:class StudentString name; String address; int score; Student(String x1,String x2,int x3) name=x1;address=x2;score=x3; public static void main(String args) Student s1=new Student(张三,西安市兴庆路1号,75); System.out.println(+ +s1.address+ +s1.score); 例3:使用多个构造方法class Time1int hour,minute,second; publi

7、c Time1() setTime(0,0,0); public Time1(int hh) setTime(hh,0,0); public Time1(int hh,int mm) setTime(hh,mm,0); public Time1(int hh,int mm,int ss) setTime(hh,mm,ss); public void setTime(int hh,int mm,int ss) hour=(hh=0&hh=0&mm=0&ss60)?ss:0); public String toString() return(hour+:+(minute10?0:)+minute+

8、:+(second10?0:)+second); public class MyTime1 public static void main(String args) Time1 t0,t1,t2,t3; t0=new Time1(); t1=new Time1(11); t2=new Time1(22,22); t3=new Time1(33,33,33); System.out.println(t0=+t0.toString(); System.out.println(t1=+t1.toString(); System.out.println(t2=+t2.toString(); Syste

9、m.out.println(t3=+t3.toString(); 运行结果:运行结果:对象的内存模型q声明对象时声明对象时:对象是一个没有数据的指针变量:对象是一个没有数据的指针变量(空对象)。(空对象)。q对象分配内存后对象分配内存后:new操作符返回一个引用操作符返回一个引用(reference),并将它赋给对象名。对象引用实),并将它赋给对象名。对象引用实际上是一个指针,指向对象所在的内存地址。但际上是一个指针,指向对象所在的内存地址。但这个指针(即对象名)是无法更改的,因为出于这个指针(即对象名)是无法更改的,因为出于安全性和健壮性的考虑,安全性和健壮性的考虑,Java取消了指针操作。

10、取消了指针操作。q可以同时创建多个不同的对象。可以同时创建多个不同的对象。q用不同的构造方法创建对象时,为对象申请的内用不同的构造方法创建对象时,为对象申请的内存大小不同。存大小不同。实例化对象后的内存模型如图4.2,此时对象中存放的是一个指向成员变量内存位置的引用。声明对象时的内存模型如图4.1,此时是一个空对象,不能使用。对象的引用和实体Professor professor1=new Professor(张三,男,28,C语言);Professor professor2=new Professor(李四,男,36,Java);professor1=professor2;赋值执行前与执行后

11、的内存模型如图4.3、4.4所示。professor1与与professor2具有完全相同的实体,对象具有完全相同的实体,对象professor1的变量所占有的内存被释放。的变量所占有的内存被释放。参数传递q当方法被调用时,参数变量必须有具体的值q在Java中,参数都是”传值“的q对于基本数据类型的参数,向该参数传递的值的级别不能高于该参数的级别q当参数是引用类型时,传递的是变量的引用而不是变量所引用的实体例:分析参数的传递情况。class People String face; void setFace(String s) face=s; class A void f(int x,doubl

12、e y,People p) x=x+1; y=y+1; p.setFace(笑脸); System.out.println(参数x和y的值分别是:+x+,+y); System.out.println(参数对象p的face是:+p.face); public class E4_5 public static void main(String args) int x=100; double y=100.88; People zhang=new People(); zhang.setFace(很严肃的样子); A a=new A(); a.f(x,y,zhang); System.out.prin

13、tln(main方法中x和y的值仍然分别是:+x+,+y); System.out.println(main方法中对象zhang的face是:+zhang.face); 100X100.88YXY100100.88X101Y101.88x=x+1y=y+1释放释放null0 xAA00zhangface0 xAA00p很严肃的样子很严肃的样子笑脸笑脸static关键字关键字(一)实例变量和类变量的区别q 类体的定义包括成员变量的定义和方法的定义,成员变量又可分为实例变量和类变量(由static修饰);成员方法又可分为实例方法和类方法(由static修饰) 。class Student1Stri

14、ng name; String address; static int count=0; public Student1(String m,String a) name=m;address=a;count=count+1;实例变量实例变量成员变量成员变量q创建对象时,系统为每个对象的每个成员分配一个存储单元,所以每个对象拥有各自的实例变量,各对象的实例成员变量具有不同的值;而系统仅为类成员变量分配一个存储单元,所有对象共享一个类成员变量。当某个对象修改了类成员变量的值后,所有对象都将使用修改了的类成员变量值。q实例成员变量属于对象,只能通过对象引用;类成员变量属于类,既可以通过类名访问,也可以

15、通过对象名访问。例:类成员变量和实例变量的对比。class Student1String name; String address; static int count=0; public Student1(String m,String a) name=m;address=a;count=count+1; public static void main(String args) Student1 p1=new Student1(李明,西安市); Student1 p2=new Student1(张敏,上海市); System.out.println(+ +p1.address+

16、+p1.count); Student1.count=Student1.count+1; System.out.println(+ +p2.address+ +p2.count); p1.count=p1.count-1; System.out.println(+ +p2.address+ +p2.count); 类变量通过类名访问类变量通过类名访问类变量通过对象名访问类变量通过对象名访问P1、p2的内存空间示意图:运行结果:(二)实例方法和类方法的区别q 类方法:由static修饰的成员方法 。q类成员方法中除使用本方法中声明的局部变量时,只可以访问类成员变量,不

17、能访问实例成员变量;实例成员方法除使用本方法中声明的局部变量外,还可以访问类成员变量及实例成员变量。q类成员方法中只能调用类成员方法,不能调用类实例成员方法;实例成员方法既可以调用类成员方法,也可以调用类实例成员方法。q实例成员方法只能通过对象访问;类成员方法既可以通过类名访问,也可以通过对象名访问。如在一个长方形类定义中,下列的方法定义是正确的:double perimeter(double x,double y)return 2*(x+y);static double area(double x,double y)return x*y;void print_message()System.

18、out.println(perimeter(2.1,3.5); System.out.println(area(2.1,3.5)思考:能否改为Static void print_message()class StaticDemo static int x; int y; public static int getX() return x; public static void setX(int newX) x = newX; public int getY() return y; public void setY(int newY) y = newY; 课堂练习:分析下程序的运行结果。课堂练习

19、:分析下程序的运行结果。 public class ShowDemo public static void main(String args) System.out.println(静态变量静态变量x=+StaticDemo.getX(); StaticDemo a= new StaticDemo(); StaticDemo b= new StaticDemo(); a.setX(1); a.setY(2); b.setX(3); b.setY(4); System.out.println(静态变量静态变量a.x=+a.getX(); System.out.println(实例变量实例变量a.y=+a.getY(); System.out.println(静态变量静态变量b.x=+b.getX(); System.out.println(实例变量实例变量b.y=+b.getY(); 若若getXgetX( )( )改为改为getYgetY( )?( )?运行结果运行结果:this关键字qthis表示的是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论