java概述课件08对象和类_第1页
java概述课件08对象和类_第2页
java概述课件08对象和类_第3页
java概述课件08对象和类_第4页
java概述课件08对象和类_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

1,第8章对象和类,2,引言,学习过前几章的内容后,我们已经能够使用选择、循环、方法和数组解决很多程序设计问题这些java的特性还不足够用来开发图形用户界面和大型软件系统,假设希望开发一个GUI(图形用户界面)该如何用程序实现它呢?,3,学习目标,描述对象和类,使用类来建模对象(8.2节)使用UML图形符号来描述类和对象(8.2节)演示如何定义类以及如何创建对象(8.3节)使用构造方法创建对象(8.4节)通过对象引用变量访问对象(8.5节)使用引用类型定义引用变量(8.5.1节)使用对象成员访问操作符(.)来访问对象的数据和方法(8.5.2节)定义引用类型的数据域并给对象的数据域赋默认值(8.5.3节)区分对象引用变量和基本类型变量的不同(8.5.4节)使用java类库中的Date类、Random类和JFrame类(8.6节)区分实例变量与静态变量、实例方法和静态方法的不同(8.7节)定义有恰当的get方法和set方法的私有数据域(8.8节)封装数据域以便于类的维护(8.9节)开发带对象参数的方法,区分基本类型参数和对象类型参数的不同(8.10节)在数组中存储和处理对象(8.11节),4,面向对象编程概念,面向对象程序设计(OOP):使用对象进行程序设计对象(objects):代表现实世界中可以明确标识的一个实体例如:一个学生、一张桌子、一个圆、一个按钮甚至一笔贷款都可以看作是一个对象每个对象都有一个独特的标识、状态和行为,5,类,对象具有状态和行为定义了对象,就定义了对象的状态和行为,6,类,Java类使用变量定义数据域,使用方法定义动作除此之外,类还提供了一种称为构造方法(constructor)的特殊类型的方法,调用它可以创建一个新对象构造方法本身是可以完成任何动作的,但是设计构造方法的初衷还是为了完成初始化动作,7,类,8,UML类图,9,举例:定义类和创建类,目的:展示创建对象,访问数据,以及使用方法,TestCircle1,Run,10,举例:定义类和创建类,目的:展示创建对象,访问数据,以及使用方法,TestTV,Run,TV,11,构造方法,Circle()Circle(doublenewRadius)radius=newRadius;,构造函数是一种特殊的方法,用来构造对象。,12,构造方法,续,构造方法的作用是初始化对象构造方法名必须和类名相同构造方法没有返回类型,甚至连void也没有构造方法在创建一个对象时,使用new操作符调用,13,使用构造方法构造对象,newClassName();例:newCircle();newCircle(5.0);,14,默认构造方法,一个类可以不定义构造方法,在这种情况下,类中隐含定义一个方法体为空的无参构造方法这个构造方法称为默认构造方法当且仅当类中没有明确定义任何构造方法时才会自动提供它,15,通过对象引用变量,引用一个对象,分配对象的引用变量声明一个引用变量,使用语法:ClassNameobjectRefVar;例:CirclemyCircle;,16,声明/创建对象:一步完成,ClassNameobjectRefVar=newClassName();例:CirclemyCircle=newCircle();,创建对象,分配对象引用,17,访问对象,引用对象的数据objectRefVar.data例:myCircle.radius调用对象的方法objectRefVar.methodName(arguments)例:myCircle.getArea(),18,跟踪代码,CirclemyCircle=newCircle(5.0);SCircleyourCircle=newCircle();yourCircle.radius=100;,声明myCircle,novalue,myCircle,19,跟踪代码,续。,CirclemyCircle=newCircle(5.0);CircleyourCircle=newCircle();yourCircle.radius=100;,创建circle,novalue,myCircle,20,跟踪代码,续。,CirclemyCircle=newCircle(5.0);CircleyourCircle=newCircle();yourCircle.radius=100;,referencevalue,将对象引用分配给myCircle,myCircle,21,跟踪代码,续。,CirclemyCircle=newCircle(5.0);CircleyourCircle=newCircle();yourCircle.radius=100;,novalue,yourCircle,声明yourCircle,referencevalue,myCircle,22,跟踪代码,续。,CirclemyCircle=newCircle(5.0);CircleyourCircle=newCircle();yourCircle.radius=100;,创建一个新Circle对象,referencevalue,myCircle,novalue,yourCircle,23,跟踪代码,续。,CirclemyCircle=newCircle(5.0);CircleyourCircle=newCircle();yourCircle.radius=100;,将对象引用分配给yourCircle,referencevalue,myCircle,yourCircle,referencevalue,24,跟踪代码,续。,CirclemyCircle=newCircle(5.0);CircleyourCircle=newCircle();yourCircle.radius=100;,改变yourCircle半径,referencevalue,myCircle,yourCircle,referencevalue,25,注意,回想一下,我们曾使用:Math.methodNamemethodName(参数)(例如:Math.pow(3,2.5)来调用Math类中的方法。那么能否用Circle1.getArea()来调用getArea()方法呢?答案是不能。本章之前所有的方法是静态方法,使用静态定义的关键字static,然而getArea()方法非静态,它必须用一个对象调用:objectRefVar.methodName(参数)(例如:myCircle.getArea(),26,引用数据域,数据域也可能是引用型的。例如:下面的Student类包含一个String类型的name数据域,String是一个预定义的Java类。,publicclassStudentStringname;/namehasdefaultvaluenullintage;/agehasdefaultvalue0booleanisScienceMajor;/isScienceMajorhasdefaultvaluefalsechargender;/chasdefaultvalueu0000,27,null值,如果一个引用类型的数据域没有引用任何对象,那么这个数据字域就有一个特殊的Java值,null,28,数据域的默认值,引用类型数据域的默认值是null,数值类型数据域的默认值是0,boolean类型数据域的默认值是false,而char类型数据域的默认值是u0000。但是Java没有给方法中的局部变量赋默认值。,publicclassTestpublicstaticvoidmain(Stringargs)Studentstudent=newStudent();System.out.println(name?+);System.out.println(age?+student.age);System.out.println(isScienceMajor?+student.isScienceMajor);System.out.println(gender?+student.gender);,29,例如,publicclassTestpublicstaticvoidmain(Stringargs)intx;/xhasnodefaultvalueStringy;/yhasnodefaultvalueSystem.out.println(xis+x);System.out.println(yis+y);,Compilationerror:variablesnotinitialized,Java没有给方法中的局部变量赋默认值。,30,基本类型变量和引用类型变量的区别,31,基本类型变量和引用类型变量的赋值,32,垃圾回收,如图所示,执行完赋值语句C1=C2之后,C1指向C2所指的同一个对象C1以前引用的对象就不再有用,因此,它现在就成为垃圾(garbage)垃圾会占用内存空间,java运行系统会检测垃圾并自动回收它所占的空间,这个过程称为垃圾回收(garbagecollection)。,33,垃圾回收,续。,提示:如果我们认为不再需要某个对象,就可以显示的给该对象引用变量赋null值如果某对象没有被任何引用变量所引用,java虚拟机将自动回收它所占的空间。,34,Date类,Java提供了一个系统的封装java.util的日期和时间的日期类。您可以使用Date类创建一个实例为当前日期和时间,并使用它的toString方法返回的该日期和时间以字符串的形式。,35,Date类举例,例如,代码:java.util.Datedate=newjava.util.Date();System.out.println(date.toString();显示一个字符串:SunMar0913:50:19EST2003,36,Random类,我们可以使用Math.random()获取一个0.0到1.0(不包括1.0)之间的double值,另一种产生随机数的方法是使用java.util.Random()类。,37,Random类示例,如果两个Random对象有相同的种子,那它们将产生相同的数列。例如:下面的代码都用相同的种子3来产生两个Random对象。,Randomrandom1=newRandom(3);System.out.print(Fromrandom1:);for(inti=0;i10;i+)System.out.print(random1.nextInt(1000)+);Randomrandom2=newRandom(3);System.out.print(nFromrandom2:);for(inti=0;i10;i+)System.out.print(random2.nextInt(1000)+);,Fromrandom1:734660210581128202549564459961Fromrandom2:734660210581128202549564459961,38,显示GUI组件,开发程序创建图形用户界面时,将会用到像JFrameJButton、JRadioButton、JComboBox和JList这样的Java类来创建框架、单选按钮、组合框、列表,等。下面是一个示例,该示例用JFrame创建两个窗体。,TestFrame,Run,39,跟踪代码,JFrameframe1=newJFrame();frame1.setTitle(Window1);frame1.setSize(200,150);frame1.setVisible(true);JFrameframe2=newJFrame();frame2.setTitle(Window2);frame2.setSize(200,150);frame2.setVisible(true);,声明、创建和分配一个框架。,reference,frame1,:JFrametitle:width:height:visible:,40,跟踪代码,JFrameframe1=newJFrame();frame1.setTitle(Window1);frame1.setSize(200,150);frame1.setVisible(true);JFrameframe2=newJFrame();frame2.setTitle(Window2);frame2.setSize(200,150);frame2.setVisible(true);,reference,frame1,:JFrametitle:Window1width:height:visible:,设置标题属性,41,跟踪代码,JFrameframe1=newJFrame();frame1.setTitle(Window1);frame1.setSize(200,150);frame1.setVisible(true);JFrameframe2=newJFrame();frame2.setTitle(Window2);frame2.setSize(200,150);frame2.setVisible(true);,reference,frame1,:JFrametitle:Window1width:200height:150visible:,设置尺寸属性,42,跟踪代码,JFrameframe1=newJFrame();frame1.setTitle(Window1);frame1.setSize(200,150);frame1.setVisible(true);JFrameframe2=newJFrame();frame2.setTitle(Window2);frame2.setSize(200,150);frame2.setVisible(true);,reference,frame1,:JFrametitle:Window1width:200height:150visible:true,设置是否可见属性,43,跟踪代码,JFrameframe1=newJFrame();frame1.setTitle(Window1);frame1.setSize(200,150);frame1.setVisible(true);JFrameframe2=newJFrame();frame2.setTitle(Window2);frame2.setSize(200,150);frame2.setVisible(true);,reference,frame1,:JFrametitle:Window1width:200height:150visible:true,reference,frame2,:JFrametitle:width:height:visible:,声明、创建和分配另一个框架,44,跟踪代码,JFrameframe1=newJFrame();frame1.setTitle(Window1);frame1.setSize(200,150);frame1.setVisible(true);JFrameframe2=newJFrame();frame2.setTitle(Window2);frame2.setSize(200,150);frame2.setVisible(true);,reference,frame1,:JFrametitle:Window1width:200height:150visible:true,reference,frame2,:JFrametitle:Window2width:height:visible:,设置标题属性,45,跟踪代码,JFrameframe1=newJFrame();frame1.setTitle(Window1);frame1.setSize(200,150);frame1.setVisible(true);JFrameframe2=newJFrame();frame2.setTitle(Window2);frame2.setSize(200,150);frame2.setVisible(true);,reference,frame1,:JFrametitle:Window1width:200height:150visible:true,reference,frame2,:JFrametitle:Window2width:200height:150visible:,设置尺寸属性,46,跟踪代码,JFrameframe1=newJFrame();frame1.setTitle(Window1);frame1.setSize(200,150);frame1.setVisible(true);JFrameframe2=newJFrame();frame2.setTitle(Window2);frame2.setSize(200,150);frame2.setVisible(true);,reference,frame1,:JFrametitle:Window1width:200height:150visible:true,reference,frame2,:JFrametitle:Window2width:200height:150visible:true,设置是否可见,47,窗口中添加GUI组件,我们可以给窗口添加按钮、标签、文本域、复选框和组合框这样的组件组件是使用类来定义的下面是一个示例来创建按钮、标签、文本域、复选框、单选按钮、组合框,GUIComponents,Run,48,实例变量和方法,实例变量属于一个特定的实例调用类中方法的一个实例,49,静态变量、常量和

温馨提示

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

评论

0/150

提交评论