a-面向对象程序设计.ppt_第1页
a-面向对象程序设计.ppt_第2页
a-面向对象程序设计.ppt_第3页
a-面向对象程序设计.ppt_第4页
a-面向对象程序设计.ppt_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计 面向对象编程的概念 1、面向过程编程: 很多人使用过Fortran、Basic,C等面向过程的程序 设计语言,这些语言是按流程化的思想来组织的 在这些语言的设计思想中,通常将存放基本数据类型的变量作 为程序处理对象、以变量的赋值作为程序的基本操作、以变 量值的改变作为程序运行的状态,这种程序设计风格存在着 数据抽象简单、信息完全暴露、算法复杂、无法很好地描述 客观世界等缺点 在程序设计过程中,为了实现有限度的代码重用,公共代码被 组织成为过程或函数。当需要代码重用时,调用已经组织好 的过程或函数。在这种应用方式中,如果软件项目庞大,程 序的调试和维护将变得异常困难 面向对象编程的概念 2、面向对象编程: 而面向对象的程序设计思想是将数据以及对于 这些数据的操作,封装在了一个单独的数据结构中 这种模式更近似于现实世界,在这里,所有的对象都 同时拥有属性以及与这些属性相关的行为 对象之间的联系是通过消息来实现的,消息是请求对 象执行某一处理或回答某些信息的要求。某个对象 在执行相应的处理时,可以通过传递消息请求其他 对象完成某些处理工作或回答某些消息。其他对象 在执行所要求的处理活动时,同样可以通过传递消 息和另外的对象联系。所以,一个面向对象程序的 执行,就是靠对象间传递消息来完成的 面向对象编程的概念 面向对象编程: 面向对象程序设计是一种新兴的程序设计方 法,或者是一种新的程序设计规范,它使用对象、 类、继承、封装、消息等基本概念来进行程序的设 计。从现实世界中客观存在的事物(即对象)出发 来构造软件系统,并且在系统构造中尽可能运用人 类的自然思维方式 开发一个软件是为了解决某些问题,这些问题所涉及 的业务范围称作该软件的问题域。其应用领域不仅 仅是软件,还有计算机体系结构和人工智能等 面向对象的概念 面向对象程序设计围绕的几个主要概念: p抽象数据类型 p类、类型层次(子类), p封装性,继承性、多态性 p对象,消息和方法 抽象数据类型 class Car int color_number; int door_number; int speed; void brake() void speedUp() ; void slowDown() 计算机中 的对象的原型 用类来表示 现实生活中 的对象 类 什么是类? p类是描述对象的“基本原型”,它定义一种对象所 能拥有的数据和能完成的操作,在面向对象的程 序设计中,类是程序的基本单元 程序中的对象 是类的一个实例 ,是一个软件单 元,它由一组结 构化的数据和在 其上的一组操作 构成 variables methods 变量,方法,消息 p变量(属性):即指对象的所处的状态 p方法:指对象的功能单元 什么是消息? p软件对象通过相互间传递消息来相互作用和通信 p 一个消息由三部分组成: n1. 接受消息的对象 n2. 要完成方法的名字 n3. 方法需要的参数 对象B 对象 A message 例子 p一个例子 p在程序中操作对象是类的一个实例:即对象 p创建一个对象 Hello obj=new Hello(); p调用方法 obj.changeString(“Hello World!”) class Hello private String s; public void showString () System.out.println(s); public String changeString(String str) s=str; 封装 什么是封装? p封装把对象的所有组成部分组合在一起,封装定义 程序如何引用对象的数据 私有数据 方法 封装实际上使 用方法将类的 数据隐藏起来 ,控制用户对 类的修改和访 问数据的程度 方法 数据 对象A对象B 公有数据 继承 什么是继承? p继承是一种由已有的类创建新类的机制 n利用继承,可以先创建一个拥有共有属性的一般类,根 据该一般类再创建具有特殊属性的新类,新类继承一般 类的状态和行为,并根据需要增加它自己的新的状态和 行为 p由继承而得到的类称为子类,被继承的类称为父类 或超类 pJava不支持多重继承,子类只能有一个父类 在Java编程语言中,通过继承可利用已有的类 ,并扩展它的属性和方法。这个已有的类可以是语 言本身提供的、其他程序员编写的或程序员原来编 写的。继承在Java中无所不在 子类 什么是子类? p子类是作为另一个类的扩充或修正所定义的一个 类 bicycle (super class) Mountain bikes Racing bikes Tandem bikes sub class 继承 通过继承,子类利用父类中定义的方法和变 量就像它们属于子类本身一样 class Car int color_number; int door_number; int speed; push_break() add_oil() class Trash_Car extends Car double amount; fill_trash() 继承 v.s. 包含 “is a kind of” v.s. “is a part of” p一个很好的经验: “B is a kind of A?”,如果是 则让B做A的子类 常犯的错误A有一个B吗? 例如让汽 车成为汽车轮子的子类是错误的 多态 对象的多态是由封装和继承引出的面向对象程 序设计语言的另一特征。主要体现在两个方面:方 法重载时实现的静态多态和方法重写时实现的动态 多态 多态性使得我们的同一方法,可以有多种形式 。另外父类中定义的属性或方法被子类继承之后, 可以具有不同的数据类型或表现出不同的行为,同 一个属性或方法在父类及其各个子类中可以具有不 同的语义 重载 overload p什么是方法的重载(编译时多态性)? p在同一个类中至少有两个方法用同一个名字,但有 不同的参数 类 void show(int int_num) void show(double double_num) void show(int int_ num, float float_num) 123 1.23 123,1.23 方法重写(overridden,覆盖) p什么是方法的覆盖(重写,动态多态性)? p在子类中重新定义父类中已有的方法 class Car int color_number; int door_number; int speed; push_break() speed=0; add_oil() class Trash_Car extends Car double amount; fill_trash() push_break() speed=speed-10; 类的构建客观事物的抽象 p在计算机中,一般处理的是软件对象,软件对象实 际上是对现实世界对象的抽象和建模 p为了使计算机能够处理和理解客观事物,必须对事 物进行抽象,以求得事物的本质 p现实事物纷繁复杂,因此,在事物抽象过程中,必 须忽略抽象事物中那些与当前目的无关的特征,求 取对当前需求有直接影响的因素。因此,针对客观 事物的抽象必须掌握一定的抽象原则 我们知道,当确定了一个圆形的圆心位置和圆 的半径后,就可以在平面上确定一个圆。因此,抽 象出来的圆的要素为圆心和半径 类的构建客观事物的抽象 用数据结构来表示,如下: class Circle point center; / 圆心 float radius; / 半径 其中class是面向对象程序设计常用来定义“类”这 种数据结构的关键字 类的构建客观事物的抽象 添加一些基本的行为如获取圆的面积,表示如下: class Circle point center; / 属性或成员 float radius; / 属性或成员 double getArea() / 方法 return radius*radius*3.1415926; double getCircumference() return 2*Math.PI*radius; 类声明 类声明的格式如下: 修饰符 class 类名 extends 超类名 implements接口 名列表 可能的选项有: publicabstract|final class 类名 extends 超类名 implements 接口名列表 public(公共):public修饰的类能被所有的类访问 abstract(抽象):abstract修饰的类不能被实例化,它包含 有未实现的方法 final(最终):final修饰的类不能被继承,即不能有子类 注意: abstract和final不能同时作为一个类的修饰符 类声明 类的声明举例: class Circle point center; / 属性或成员 float radius; / 属性或成员 double getArea() / 方法 return radius*radius*3.1415926; public class Rectangle extends Shapes implements Display / 类体 /上面的Rectangle类继承了Shapes父类,实现了接口 Display,是一个公共类 类声明 类名: p习惯上类名的第一个字母大写,但这不是必须的。 类的名字不能是Java 中的关键字,要符合标识符 规定,即名字可以由字母、下划线、数字或美圆 符号组成,并且第一个字符不能是数字 但给类命名时,最好遵守如下习惯: p如果类名使用拉丁字母,那么名字的首写字母使 用大写字母,例如Hello、Time、People等 p类名最好见名知意,当类名由几个”单词”复合而 成时,每个单词的首写字母使用大写,如: BeijingTime、AmericanMap、HelloChina等 类声明 extends(继承): extends保留字用来表明新创建的类继承哪个类,被继承 的类称为此类的父类。extends后面只能跟一个父类名 implements(实现): 用来表明这个类实现了哪些接口,接口名可以有多个 例如:下面的类是合法的: class MyC1ass /空类,没有任何用处,但是合法 又如:下面的Rectangle类继承了Shapes父类,实现了接口 Display,是一个公共类。 public class Rectangle extends Shapes implement Display / 类体 类体 成员变量说明 成员方法说明 p类体中定义了该类所有的成员变量和该类所支持 的方法,其格式说明如下: 类体 public | protected | private static final transient volatile type variableName; /成员变量 public | protected | private static final | abstract native synchronized returnType methodName(paramList) throws exceptionList statements /成员方法 p类体: 类体成员变量 成员变量说明 p成员变量又称值域。成员变量的说明类似于方法的局部变量 说明,所不同的是,成员变量定义在类中,是类成员的一部 分,整个类都可以访问它。Java中成员变量说明形式如下: 修饰符 成员变量类型 成员变量名列表; n例如:private int number; p成员变量的修饰符有以下几种:缺省访问修饰符、public、 protected、private、final、static、transient和volatile 。 n缺省访问修饰符:可被同一包中的类访问 nstatic: 静态变量(类变量;相对于实例变量 nfinal: 常量 ntransient: 暂时性变量,用于对象存档(序列化) nvolatile: 贡献变量,用于并发线程的共享 类体成员变量 class Circle static final float PI=3.1415926f; / 常量 private Point center; / 属性或成员 private float radius; / 属性或成员 static Color color; public float area; float getArea() / 方法 return radius*radius*PI; /内部访问成员变量 成员变量使用 p类的成员变量在定义它的类内部,可以直接通过 成员变量名来访问 类体成员变量 如果从类的外部访问,类变量和类对象变量的使用方 法是不同 p访问类变量的格式如下: 类名.类变量名 n例如我们可以采用下面形式访问上例中的静态变量color 的:Circle.color,由此可见,访问类变量与类的对象 构造和对象都无关。类变量名必须用static修饰。更详 细的说明见后面的章节。 p访问实例变量的格式如下: 对象名.实例变量名 n例如 Circle c1=new Circle(); /c1是对象名 System.out.println(“area=”+c1.area); 类体成员方法 public | protected | private staticfinal | abstract native synchronized returnType methodName(paramList)throws exceptionList/方法声明 成员方法说明 p在Java中,方法总是Java类的一个组成部分。通 过类的方法,改变对象的状态。方法说明分为方法 首部说明和方法体两部分 p方法首部说明的格式如下: 方法修饰符 返回值类型 方法名(形参列表)throws异常列表 p可能的选项有: 类体成员方法 方法体 p方法体是实现这个方法的代码段,它由“”和 “”括起来的语句序列构成。方法体也可以是一 个分号“;”,表示无方法体,该方法没有实现。 当且仅当方法的修饰符中有abstract或native 时,方法才无方法体 p方法体包括局部变量的声明以及所有合法的Java 指令 p返回值须与返回类型一致,或是其子类 p返回类型是接口时,返回值必须实现该接口 类体成员方法 class Triangle double sizdA,siddB,siddC; /三角形的三边 void setSide(double a,double b,double c) /该方法用来赋初值 sideA=a; sideB=b; sideC=c; boolean isOrNotTriangle() /判断是否是三角形的方法 if(sideA+sideBsideC else return flase; p例如求解三角形问题时可以编写Triangle类,在 Triangle类可以有如下的3个方法。程序如下: 类体成员方法 类方法调用形式如下: 类名.类静态方法名(实参列表) 对象方法调用形式如下: 类对象名.类非静态方法名(实参列表) 例如 Circle c1=new Circle(); / r1是对象名 System.out.println(“area=”+c1.getArea(); 方法的调用 p成员方法又分为类方法(静态方法)和对象方法( 实例方法)两类。他们的调用是有区别的 p前面已经简单讨论了类变量。类变量不属于由类定 义的个别实例对象,而是属于定义它的类;实例变 量是针对实例的。这些讨论同样也适用于类方法 成员方法 p参数采用值传递 p局部变量的作用域在该方法内部。 p若局部变量与类的成员变量同名,则类的成员变 量被隐藏。 pthis-用在一个方法中引用当前对象,它的值 是该方法所在的对象 pEx:PassTest.java,VariableTest.java 成员方法(值参传递) public class PassTest float ptValue; public static void main(String args) int val; PassTest pt=new PassTest(); val=11; System.out.println(“Original Int Value is:”+val); 成员方法(值参传递) pt.changeInt(val); System.out.println(“Int Value after Change is:” +val); pt.ptValue=101f; System.out.println(“Original ptValue is:”+pt.ptValue); pt.changeObjValue(pt); System.out.println(“ptValue after Change is:”+pt.ptValue); 成员方法(值参传递) public void changeInt(int value) value=55; public void changeObjValue(PassTest ref) ref.ptValue=99f; 成员方法(值参传递) p运行结果 c:java PassTest Original Int Value is : 11 Int Value after Change is: 11 Original ptValue is: 101.0 ptValue after Change is : 99.0 成员方法(方法体) class Variable int x=0,y=0,z=0; /类的成员变量 void init(int x,int y) this.x=x; this.y=y; int z=5; /局部变量,隐藏成员变量 System.out.println(“* in init*”); System.out.println(“x=”+x+“ y=”+y+“ z=”+z) 成员方法(方法体) public class VariableTest public static void main(String args) Variable v=new Variable(); System.out.println(“*before init*”); System.out.println(“x=”+v.x+ “y=”+ v.y+“z=”+v.z); v.init(20,30); System.out.println(“*after init*”); System.out.println(“x=”+v.x+ “y=”+ v.y+“z=”+v.z); 成员方法(方法体) 运行结果 c:java VariableTest *before init* x=0 y=0 z=0 * in init * x=20 y=30 z=5 *after init* x=20 y=30 z=0 Java对象 p类是对一类“事物”的属性与行为的抽象 n类是一个抽象的概念,一种抽象的数据结构。它不存在 于现实中的时间/空间里,类只是为其所有的对象定义了 抽象的属性与行为。 p对象是类的一个具体的个体,每个对象可以有属性 值不同 n例:Person(人)是对地球上所有具有特殊智能的生物 包括你,我,他,张三,李四等的抽象。“你”,“我”,“ 他”,“张三”,“李四”等等都属于“人”这一类的个体 p面向对象程序设计中,一般都需要将类具化为实例 才能实现特定的功能 Java对象 p类实例化可生成对象 p对象通过消息传递来进行交互 n消息传递即激活指定的某个对象的方法以改变其状态或 让它产生一定的行为 pJava对象的生命周期 n生成 n使用 n清除 对象的生成 p创建一个对象包括声明、实例化和初始化三步骤 p类是创建对象的模板。当使用一个类创建了一个对 象时,也可说给出了这个类的一个实例,通常的格 式为: type objectName=new type(paramlist); (1)声明 格式为:type objectName p声明并不为对象分配内存空间,而只是分配一个引 用空间; p如:People zhangPing; n这里People 是一个类的名字,zhangPing是我们声明 的对象引用 对象的生成 (2)实例化:运算符new为对象分配内存空间,它调用对象的 构造方法,返回引用 n可以为一个类实例化多个不同的对象,一个类的不同对象分别占据 不同的内存空间,因此改变其中一个对象的状态不会影响其他对象 的状态 (3)初始化:执行构造方法,进行初始化;根据参数不同调用 相应的构造方法 n如果类中没有构造方法,系统会调用默认的构造方法。默认的构造方 法是无参数的 n构造方法的名字必须和类名相同 zhangPing=new People(“20040101”); zhongYong=new People(“20040102”); /实例化另外一个对象 p上面三个步骤,通常可以写成如下简洁的形式: People zhangPing=new People(“20040101”); 对象的使用 p对象的引用是一个中间的数据结构,它存储有关数 据类型的信息以及当前对象所在的堆的地址,而对 于对象所在的实际的内存地址是不可操作的,这就 保证了安全性 p通过运算符“.”可以实现对变量的访问和方法的调用 ,参见前面成员变量和方法的访问 p设定访问权限来限制其它对象对它的访问 Class1 a=new Class1(); a.attr1 a.method1() a attr1 attr2 堆 对象的生成与使用 / EmpInfo.java public class EmpInfo String name; / 雇员的姓名 String designation; / 雇员的职务 String department; / 雇员的部门 void print() / 成员方法 System.out.println(name + “ is “ + designation + “ at “ + department); p【例4-1】下面的例子将建立雇员信息类 EmpInfo,并实例化对象,然后打印出若干信息 对象的生成与使用 public static void main(String argv) EmpInfo employee = new EmpInfo(); / 创建对象并实例化 = “ Robert Javaman “ ; / 给成员变量赋值 employee.designation = “ Manager “ ; /给成员变量赋值 employee.department = “ Coffee Shop “ ; /给成员变量赋值 employee.print(); / 调用方法print() 运行结果如下: Robert Javaman is Manager at Coffee Shop 构造方法 p每当由类构造对象时都要调用该类特定的构造方法,在 Java中,每个类都至少有一个构造方法 n构造方法可以确保用户正确地构造类的对象,同时,构造方法也会 对对象作初始化工作 p构造方法说明形式如下: 构造方法修饰符 方法名(形式参数列表) throws异常列表 方法体 p构造方法修饰符与一般方法修饰符相同 p当我们构造一个类的实例的时候,编译器主要完成以下三件 事情: n为对象分配内存空间; n初始化对象中的实例变量的值,初始值可以是缺省值,或者变量按 指定的值初始化; n调用对象的构造方法 构造方法 p构造方法具有和类名相同的名称,而且不返回任 何数据类型 p构造方法不能像一般的方法那样被直接调用,只 能在构造类的实例的时候被new关键字调用的 p利用构造方法进行初始化 p构造方法不能被继承 p重载经常用于构造方法 n一个类的构造方法可以有多个,它们都具有相同的方 法名,即类名。编译器根据参数的类型来决定调用哪 个构造方法。这就是构造方法的多态 构造方法 构造方法分为缺省的构造方法(不带参数)和自定义 的构造方法 p缺省的构造方法 n如果类的定义没有编写构造方法,Java语言会自动为用 户提供。这个由Java自动提供的构造方法就是所谓的缺 省构造方法。缺省的构造方法确保每个Java类都至少有 一个构造方法,该方法应符合方法的定义 n例如在例4-1的类EmpInfo中,我们没有定义构造方法 ,则Java自动提供了一个缺省的构造方法,如下: public EmpInfo() /缺省的构造方法 构造方法 使用缺省的构造方法时,对象成员变量的初值按Java的规 定进行设置,见下表: 构造方法 例:Point.java class Point int x,y; Point() x=0; y=0; Point(int x, int y) this.x=x; this.y=y; p自定义的构造方法 n自定义的构造方法可以带参数也可不带参数 n带有参数的构造方法能够实现这样的功能:当构造一 个新对象时,类构造方法可以按需要将一些指定的参 数传递给对象的变量 构造方法 【例4-3】在例4-1的基础上编写带参数的构造方法 / EmpInfoC.java public class EmpInfoC String name; / 雇员的姓名 String designation; / 雇员的职务 String department; / 雇员的部门 / 带参数的构造方法 public EmpInfoC(String name,String designation, String department) =name; this.designation=designation; this.department=department; void print() / 成员方法 System.out.println(name + “ is “ + designation + “ at “ + department); 构造方法 【例4-3】在例4-1的基础上编写带参数的构造方法 public static void main(String argv) EmpInfoC employee = new EmpInfoC(“Robert Javaman “,“Manager“,“Coffee Shop“); employee.print(); / 调用方法print() 运行结果如下: Robert Javaman is Manager at Coffee Shop 由于采用了带有参数的构造方法来实例化对象,同时对对象进行初始化 ,与例4-1相比较,代码少了,更简洁更清晰了,如下: EmpInfo employee = new EmpInfo(); / 创建对象并实例化 = “ Robert Javaman “ ; / 给成员变量赋值 employee.designation = “ Manager “ ; /给成员变量赋值 employee.department = “ Coffee Shop “ ; /给成员变量赋值 employee.print(); / 调用方法print() 对象的清除 p不用的对象必须被清除,以释放资源,与c+不同 ,Java可以自动释放无用对象 n当不存在对一个对象的引用时,该对象成为一个无用对 象,对象的引用null a attr1 attr2 堆 b a attr1 attr2 堆 null b c 对象的清除 pJava运行时系统通过垃圾收集器周期性地释放无 用对象所使用的内存,完成对象的清除 nJava的垃圾收集器自动扫描对象的动态内存区,对被 引用的对象加标记,然后把没有引用的对象作为垃圾 收集起来并释放 n垃圾收集器作为一个线程运行,当系统的内存用尽或 程序中调用System.gc()要求进行垃圾收集时,垃圾 收集线程与系统同步运行,否则垃圾收集器在系统空 闲时异步地执行 对象的清除 pJava提供自动内存垃圾收集和处理程序,但在对 象作为垃圾被收集器释放前,往往需要由对象亲自 执行一些垃圾收集器不能处理的特殊清理工作,如 保存必要的数据、关闭文件 p因此,Java运行时系统在破坏对象前,会自动调 用对象的方法finialize(),让对象自己完成必要的 结束工作 p一般地,对象撤销时要完成的功能是类似的,大致 上有: n关闭已打开的文件 n保存对象实例中需要保存的信息 n释放对象占有的内存空间 finalize()方法 p在类的定义中,除了必须定义创建类实例的方法外 ,还可以在定义中提供用于对象清除的方法 finialize() n在根类java.land.Object中实现 n对对象进行垃圾收集前,系统自动调用 n自己重写时需要调用父类的finalize()方法 n它的格式如下: protected void finalize() throws throwable /本类的资源清除代码 super.finalize(); 方法重载 p方法重载(Method Overloading)就是一个类中可以有多个 方法具有相同的名字,但这些方法的参数必须不同,即或者 是参数的个数不同,或者是参数的类型不同,也可以是返回 值不同,但返回类型不能用来区分重载的方法 p重载是Java实现多态性的一种方式 n这也是面向对象的程序设计中的奇妙之处,重载反映了大千世界的 变化 p 从另外的含义上来讲,重载也可以看成是同一个方法具有 不同的版本,每个版本之间在参数特征和返回值方面有差别 p当调用一个重载方法时,JVM自动根据当前对方法的调用形 式在类的定义中匹配形式符合的成员方法,匹配成功后,执 行参数类型、数量均相同的成员方法。方法重载在Java的 API类库中得到大量的使用 方法重载 【例4-4】关于成员方法重载的例子 /DemoOverload.java class Demo2 int a,b; int method() /成员方法一 return a+b; int method(int c) /成员方法二 return a+b+c; int method(int c,int d) /成员方法三 return a+b+c+d; Demo2(int a,int b) /构造方法 this.a = a; this.b = b; 方法重载 【例4-4】关于成员方法重载的例子 public class DemoOverload public static void main(String args) Demo2 aDemo2 = new Demo2(1,2); /实例化 int a = aDemo2.method(); /调用成员方法一 System.out.println(a); int b = aDemo2.method(3); /调用成员方法二 System.out.println(b); int c = aDemo2.method(3,4);/调用成员方法三 System.out.println(c); 上面程序的运行结果为: 3 6 10 方法重载 【例4-5】构造方法也可以重载,/ ConstructionOverload.java class Demo int a,b,c;/成员变量 public Demo() /构造方法1 public Demo(int a) /构造方法2 this.a = a; public Demo(int a,int b) /构造方法3 this.a = a; this.b = b; public Demo(int a,int b,int c) /构造方法4 this.a = a; this.b = b; this.c = c; 方法重载 public class ConstructionOverload public static void main(String args) /应用第一种构造方法 Demo aDemo = new Demo(); System.out.println(“方法一成员变量a:“+aDemo.a); System.out.println(“方法一成员变量b:“+aDemo.b); System.out.println(“方法一成员变量c:“+aDemo.c); /应用第二种构造方法 Demo bDemo = new Demo(1); System.out.println(“方法二成员变量a:“+bDemo.a); System.out.println(“方法二成员变量b:“+bDemo.b); System.out.println(“方法二成员变量c:“+bDemo.c); 方法重载 p从上面的程序中可以看到构造方法的重载。在该 程序中,方法Demo()被定义了四次,每次参 数不同。第一个构造方法,没有参数,也没有方 法体,它和系统的缺省构造方法是一致的。 p缺省的构造方法确保每个Java类都至少有一个构 造方法。如果程序中给出了带参数的构造方法, 而没有给出缺省构造方法,这时调用缺省构造方 法将导致错误(ErrorConstructor.java) p在调用构造方法时,由于使用的是同一方法名, 因此根据构造方法的参数就能找到需要运行的哪 个方法 实例变量和类变量 p在生成每个类的实例对象时,Java运行时系统为每 个对象的实例变量分配一块内存,然后可以通过该 对象来访问这些实例变量。不同对象的实例变量是 不同的 p对于类变量(静态变量),在生成类的第一个实例 时,Java运行时系统为这个类的类变量分配一块内 存。以后再生成该类的实例时,这些对象将共享同 一个类变量,每个对象对类变量的改变都会直接影 响到其他实例对象 n类变量可以通过类名直接访问,也可以通过实例对象来 访问,两种方法的结果是相同的 p申明时使用关键字:static: static type classVar; p每个对象的实例变量都分配内存,通过对象来访问 这些实例变量 p类变量仅在生成第一个对象时分配内存,所有实例 对象共享同一个类变量 p类变量可通过类名直接 访问,无需先生成一个 实例对象,也可以通过 实例对象访问类变量 class ABCD char data; static int_share_data; class Demo ABCD a,b,c,d object a char data object c char data Object d char data static int share_data object b char data 例:实例变量 p【例4-6】下面是关于实例变量的例子 /instVar.java class koA int a; public void display() System.out.print(“ a=“+a);

温馨提示

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

评论

0/150

提交评论