类与面向对象编程.ppt_第1页
类与面向对象编程.ppt_第2页
类与面向对象编程.ppt_第3页
类与面向对象编程.ppt_第4页
类与面向对象编程.ppt_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

第四章 类与面向对象编程 n面向对象编程基础 n类的编程实现 n对象的定义与使用 n重载 n访问控制符 n其他修饰符 目标: 面向对象编程思想 学习重点: 类、对象、构造方 法、重载 4.1 面向对象编程基础 4.1.1 面向对象编程的基本概念 面向对象编程与传统的面向过程编程的区别 面向过程编程:按照计算机的问题处理逻辑来描述和 处理现实世界中的具体问题,采用结构化程序设 计和编程方法,将复杂任务逐步分解为多个子任 务,用一组函数实现任务求解。(动宾结构) 面向对象编程:程序的设计和编写力求符合人们的思 维方式,让计算机处理模拟人们对现实世界的问 题求解方法,使现实世界中的事务与面向对象程 序中的类和对象相对应。(主谓结构) 4.1.1 面向对象编程的基本概念 1、对象(Object):两个层次,一一对应-客观存在。 n现实生活中的对象:客观世界中的实体(属性和行为); n程序中的对象:变量和相关方法的集合(数据和方法); 即类是对象的抽象,而对象则是类的实例化(具体化) 实体对象 (有共同特征) 描述 映射 抽象 抽象数据类型 程序对象 类 4.1.1 面向对象编程的基本概念 2、类(Class)-对应现实世界的类别 n将具有共性的一类对象,抽象为“类”-概念上的意 义。 n是一种数据类型,在Java中是一种复合/引用数据类型 。 n类是创建某一类对象的模板,属于类的某个对象为类 的一个实例,使用对象前需要先定义它所属的类。 n类中定义一类对象共有的变量和方法。 n类的定义可实现代码的复用。我们不用去描述每一个 对象(如某辆汽车),而是通过创建类(如汽车类) 的一 个实例来创建类的一个对象,这大大减化了软件的设计 。 4.1.1 面向对象编程的基本概念 3、成员与方法 抽象为一个类的不同对象具有许多相同的特点,这些特点 基本上可以分为两类:一是描述对象静态状态的,这就是对象 的属性/状态,在程序设计中,称之为变量(Variable)/成员 ;另一个是描述对象的动作和行为,这就是对象的方法( Method),方法决定了该类中的数据如何使用。 例:“汽车”的属性:颜色、重量、功率、速度等; 方法:前进、后退、加速、减速等。 汽车类示例 class Car int color_number; int weight; void brake(); void speedUp(); void slowDown(); 4.1.2 面向对象编程的优点 与面向过程编程相比较,面向对象编程 具有如下优点: n提高了程序的可维护性(全局变量-不共享数据 ) n可重用性高-继承(提高效率,降低成本) n保护数据-封装 类比:组装电脑 4.1.3 对象的抽象 抽象是一种思维形式,就是把事物共同点抽取出 来,以统一的方式进行概要描述的一种过程。 轿 车 卡 车 公交车 汽车 对象 类 汽车 火车 轮船 飞机 对象 交通工具 类 具体化/实例化抽象 4.1.3 对象的抽象 n面向对象的编程中,系统由多个包含不同属性和方法的 对象组成,每个对象实现部分功能。(如上页交通工具 ) n什么是抽象:用面向对象的方法解决现实世界的问题时 去掉物体中与问题不相关的部分,形成所需要类的过程 ,称为抽象。 n采用数据抽象方法-构建程序的类 实体 现实 世界概念 模型 抽象 对象 类 抽 象 实 例 化 映射 计算机中的实现 4.1.4 封装 n什么是封装:封装是将数据和对数据的操作封装在 一个抽象的数据类型中,数据被保护在抽象数据类 型的内部,其他对象只能通过接口与数据进行交互 。 私有数据 方法 方法 数据 对象A对象B 公有数据 接口 4.1.4 封装 n在程序中,用类将数据和方法封装在类体中 。模块之间通过接口进行交互。 n封装技术的优点: (1)降低问题的复杂度; (2)提高了类或模块的可重用性; (3)保护数据的完整性和安全性。 类比:计算机的主机 4.2 类的编程实现 n为什么使用类 采用基本数据类型表示现实世界中的概念存在 一些局限性。例如:采用int型数据表示一个日期概 念,需要使用3个变量:int day,month,year;如 果要表示2个人的生日,就要使用6个变量。 而使用类就可以避免这种情况,因为类中不但 有变量,还有与之相关的操作所定义的方法,将变 量和方法放在一个类中,外部对类成员的访问都通 过方法进行,从而隐藏成员变量,保护类成员不被 非法修改。 4.2.1 类定义 语法结构: 修饰符 class 类名 extends 父类名 implements 接口名 /类头 类成员声明及初始化; 类方法声明及方法体; n修饰符:说明类的性质,包括访问控制符(空或public)和类型说明 符(abstract抽象、final最终)。 n类名:用户自定,约定每个单词的首字母大写。 nextends 父类名:实现继承/派生 nimplements 接口名:多重继承 类体 二者不能同时 修饰一个类 4.2.1 类定义 n类声明只是创建一个模板(或类型描述),并不会 创建一个实际的对象,只有用new方法创建一个该类 的实例对象时,才具有“物理”的真实性。 例 BoxDemo.java的源程序 4.2.2 域/成员变量的定义 1、什么是域 域:类体中数据部分体现为成员变量的定义,也称为域或 静态属性。域体现了类的状态,状态的改变由类体中 的方法实现。 注:域必须在类体中直接定义,不能包含在方法中定义。 2、域定义的语法 修饰符 变量类型 变量名 =变量初始值 /简单变量 修饰符 类名 对象名 =new 类名 (实际参数列表)/对象 4.2.2 域/成员变量的定义 3、说明 n修饰符:包括访问控制符(空、public、private、protected )、静态static、常量final、多线程中备份volatile、过渡 (暂时)transient修饰符。 n修饰符为可选项,也可有两个以上的修饰符; n若使用其他类的对象作为当前类的成员时,须保证其他类在当 前类中是可见的,即它可以被当前类所引用。 n变量类型,可以是基本数据类型,也可以是复合数据类型。 4.2.2 域/成员变量的定义 n成员变量与局部变量 成员变量:类体中定义的变量,在整个类中都 可 以使用; 局部变量: 在方法体中定义的变量和方法的参 数,在方法中有效。 例4-1 Person.java的源代码 class Person String name;/域的定义 int sex; private double salary; int age; Box mybox; 1、什么是方法 n方法,也叫成员函数,是类的动态属性,表示类具有的功能和行 为,用来改变对象的状态。其他对象通过调用对象的方法获得该 对象的服务。 n方法只能在类的内部进行定义。按照习惯方法的定义一般在域之 后。 n方法决定该类中的数据如何使用。 2、方法定义的语法: 修饰符 返回值类型 方法名 (参数列表) /方法头 局部变量声明; 语句序列;/方法体 4.2.3 方法的定义 4.2.3 方法的定义 3、说明 n修饰符:包含访问控制符(空、public、private、protected )、静态static、抽象abstract、最终final、同步 synchronized; n返回值的类型任意,无返回值用void,有则在方法体中使用 return语句; n参数可有(指明类型和名称)可无,其类型任意,必须用() ,多个用“,”分开; n方法的作用: 围绕类的成员进行各种操作;与其他的类或对象进行数据交流 、消息传递等操作。 例4-2 Person.java的源代码 class Person String name;/域的定义 int sex; private double salary; int age; String getName() return name; void setName( String s) neme=s; double getIncome() return salary; void setIncome( double d) salary=d; 在Java中对方法进 行定义时,根据方 法的功能需求,要 对返回值类型、参 数表和方法体进行 具体实现。 4.2.3 方法的定义 4、方法的返回值 Java中定义方法必须说明返回值的类型: n没有返回值,那么在方法名前必须加void; n有返回值,方法本身也可当作一个值或表达式,可 以将它赋值给一个同类型的变量,方法中有return 语句。 注:return语句后面的表达式为返回值,且return语句 必须为方法的最后一条可执行语句。 例4-3 ReturnType.java的源代码 public class ReturnType int i,j; int mx() i+; j=i+;/ return(j*i); System.out.println(” i=”+i+”,j=”+j); return(j*i); /return 必须为最后一句可执行语句 void mp() i=j=6; System.out.println(” i=”+i+”,j=”+j); public static void main(String args) int x; ReturnType r=new ReturnType(); r.mp(); x=r.mx(); System.out.println(”x=”+x); 4.2.3 方法的定义 5、方法的参数-从外部传递信息 n编写方法时,需要确定参数的数量和类型,多个参 数用“,”分开,在方法头定义中说明。 例 double computeArea(double x,double y) double s; s=x*y; return s; 4.2.3 方法的定义 n若方法的参数名与类中成员变量名相同,则参数名 将在方法体内隐藏同名的成员变量。 n若在方法中想使用与方法变量同名的成员变量,可 使用关键字this(指当前的对象) 实现,this.同名 的变量名。 n复习-形式参数与实际参数,值传递与地址传递。 主调方法 实际参数 被调方法 形式参数 a=1 b4=2 x=1 c4=2 调用后给形参 分配空间,实 参、形参不同 空间。调用结 束形参释放空 间,实参之不 变-值传递 将首地址 传递给形 参,共用 一个空间 ,实参值 变-地 址传递 例4-4 Rectangle.java public class Rectangle double x=2;double y=3; double computeArea(doublex,double y) double s; s=x*y; /此处的x,y是类的域吗? / s=this.x*this.y; return s; public static void main(String args) Rectangle r=new Rectangle(); System.out.pringtln(“The area is”+r. computeArea(10,10); 例4-4 Rectangle.java的运行结果 4.2.3 方法的定义 6、方法体中的变量 方法体中对数据变量进行处理,这些变量可以是 成员变量 方法调用传递的参数值 方法内定义的局部变量 n局部变量:在方法体中定义的变量,只能在定义它 的方法内部使用,使用前必须进行初始化。(无构 造方法) n成员变量:可以被类中的所有方法访问。 注:二者的作用域不同。 例4-5 LocalVariable.java源程序 public class LocalVariable int i=2; /非静态域 void mv() int x=7,y=8; int s; /局部变量的作用域 s=x*y; System.out.println(”x=”+x+”,y”+y+”,s=”+s); System.out.println(”i=”+i); public static void main(String args) LocalVariable r=new LocalVariable(); r.mv(); System.out.pringtln(“The variable i=”+r.i); /System.out.pringtln(“The variable x=”+x); 静态方法内只 能直接调用静态 域。 非静态域属于 对象,只有实例 化对象后,才分 配空间,所以在 静态方法内必须 通过对象来调用 非静态变量。 LocalVariable.java的运行结果 例4-6 Scope1.java public class Scope1 int i=1; /非静态成员变量 void func() /非静态成员方法 System .out .println (“output i member in class in func =“+i); int i=2; System .out .println (“i in func =“+i); public static void main (String args) int i=3; System .out .println (“i in main=“+i); Scope1 s1=new Scope1(); Scope1 s2=new Scope1(); System .out .println (“output i member of class in main=“+s1.i); s1.func(); s2.i=4; System .out .println (“output i member of class in main again=“+s2.i); s2.func(); /System .out .println (“i in main=“+i); s1 i func() s2 i func() 注:s2.i=4;已经改变了i的值,i只有在实例化对象中才分配内存空间。 4.2.3 方法的定义 n当方法中局部变量/参数与类的成员变量同名时,方 法内使用的是局部变量/参数,即局部变量/参数将 隐藏同名的全局/成员变量,如果想使用成员变量, 使用this。 类比:图书馆的书(成员变量)和自己的书(局部变 量)。 例4-7 EqualVarible.java的源程序 public class EqualVarible int i=2; void mv() int i=6; System.out.println(“i=“+i); /System.out.println(“this.i=“+this.i); public static void main(String args) EqualVarible r= new EqualVarible(); r.mv(); 4.2.4 main()方法 nmain()方法是Java Application程序特有的方法,表示 Java程序的入口。 n语法: public static void main(String args) 方法体 其中局部变量使用前必须显示赋值,否则出 错。 nJava Application程序中有且只有一个类包含main()方法 。 n在运行程序时,输入的类名必须与main()方法所在的类名 相同。 nmain()是Java中唯一能直接与用户交换信息的方法,其他 方法通过所在类才能够被访问。 n命令行参数: main()方法可以有零个或多个参数,参数是 字符串类型,依次放入args数组的各个元素中,供方法使 用。 命令行参数 n有时你想在运行程序时将信息传递到一个程序中。 这通过将命令行参数(command-line arguments ) 传递给main() 来实现。 n命令行参数是程序执行时在命令行中紧跟在程序名 后的信息。运行时java CommHandle very good n在Java 程序中访问命令行参数是相当容易的它 们作为字符串存储在传递给main() 的String 数组 中。 例如,下面的程序显示了调用的命令行参数: 命令 行参 数 命令行参数程序举例 class CommandLine public static void main(String args) for( int i=0 ;i0) System.out.println(“the number of arguments is“+args.length); for(i=0;iargs.length;i+) System.out.println(“args“+i+“=“+argsi); else System.out.println(“no arguments!“); 4.3 对象的定义与使用 n创建对象 n使用对象 n释放对象/对象的消失垃圾回收机制 Java语言中,使用对象 “三步曲”: 类和对象之间的区别: 类创建一种新的数据类型,该种类型能被用来创建对象。也就是 ,类创建了一个逻辑的框架,该框架定义了它的成员之间的关系。当 你声明类的对象时,你正在创造该类的实例。因此,类是一个逻辑构 造,对象有物理的真实性(也就是对象占用内存空间)。 4.3.1 对象的创建 对象的创建需要两个步骤:声明对象与实例化对象。格式为: n类名 对象名; /声明对象,创建引用 对象名=new 类名(参数列表);/实例化,分配内存,初始化 如:Mankind somePerson; somePerson=new Mankind(); n类名 对象名 = new 类名(参数列表);/可将声明和实例化共同进 行 如:Mankind somePerson=new Mankind(); 以上两种格式等价。注:对象名首字母要小写。 构造 方法 somePerson i func() null 4.3.1 对象的创建 对象创建的过程: n为对象开辟空间,并对对象的成员变量进行缺省的 初始化;(局部变量必须自行初始化) n对成员变量进行指定的初始化; n调用相应的构造方法。 new作用: n为对象向系统申请内存; n调用类的构造方法,为对象进行初始化。 4.3.2 构造方法 1、构造方法:是类的一种特殊的方法,其作用是在创建 类对象同时,初始化类的实例对象(成员变量)。 2、定义构造方法,可在类中显示定义,否则系统调用默 认的构造方法,每个类都有自己的构造方法。 3、构造方法的特性: n构造方法的方法名必须与类名相同; n构造方法没有返回值,不用void声明; n用户不能直接调用构造方法; 注:构造方法只能由new运算符调用。 n构造方法在用户创建对象时,系统自动调用执行。 n不能在方法内部用return语句返回一个值。 成员变 量不用 初始化 的原因 4.3.2 构造方法 4、构造方法的语法 修饰符 方法名(参数列表) 方法体 n修饰符只能是访问控制修饰符,即public,protected和 private其中之一。 n构造方法的重载:一个类中可以定义多个同名的构造方法,但 是它们必须拥有不同的参数。 例:class Point int x,y; Point () x=0;y=0; Point (int x,int y) this.x=x;this.y=y; 根据参数的数量 、类型的不同, 调用不同的构造 方法 n构造方法与初始化方法相比的好处 当用new为一个对象分配内存时,要调用对象的构造方法,而当 创建一个对象时 ,必须用new为它分配内存。因此用构造方法 进行初始化避免了在生成对象后每次都要调用对象的初始化方 法。 nnew运算符返回对一个对象的引用,但与C、C+中的指针不同 对象的引用是指向一个中间的数据结构,它存储有关数据类型 的信息以及当前对象所在的地址,而对于对象所在的实际内存 地址是不可操作的,这就保证了安全性。 n构造方法中可以定义参数,方法中定义了多少参数,在进行对 象创建时,需要按顺序提供相同数量、类型的实际参数。 4.3.2 构造方法 例4-9 构造方法的使用 class Person public Person() System.out.println(“method person is using“); private int age=18; public void shout() System.out.println(“age is“+age); class TestPerson public static void main(String args) Person p1=new Person();p1.shout(); Person p2=new Person();p2.shout(); Person p3=new Person();p3.shout(); n对象的使用:使用“.”操作符。格式: 对象名.成员变量名 /引用对象中的成员变 量 对象名.方法名(参数) /调用对象中的方法 n方法与外界进行信息交换的方式有三种: 方法的返回值、类的成员变量、方法中的参数。 n根据参数数据类型的不同,参数交换的实现分为: 方法的赋值调用和引用 如:somePerson.sex或somePerson.employed() 例4-10:Mankind.java 4.3.3 对象的使用 实际参数的数 量、类型顺序 与方法中一致 4.3.3 对象的使用 n同一个类可以创建多个对象,它们之间互不干扰。 例4-11: MankindObject.java 4.3.3 对象的使用 方法的赋值调用和引用的区别: (1)赋值调用值传递 n参数是基本数据类型的变量; n将实际参数的值赋给形式参数; n实参和形参代表两个变量,在内 存中使用不同的内存单元; n参数的传递是单向的, 实参-形参;形参不能改变实参 值 n形参的作用域是方法内部,方法退 出时,形参变量释放空间,实参值 不变。 (2)引用地址传递 n参数是引用数据类型,类或 数组; n实参和形参代表同一个数据, 在内存中使用同一内存单元; n形参值可改变实参值。 实际参数替代方法中定义 的参数时,二者参数的类 型、个数和顺序必须一致 。 按参数类型的不同划分 例4-12 关于引用的程序 Functransfer.java的源代码 public class Functransfer void changex(float x) int i=0; for(i=0;ix.length;i+) System.out.println(”x”+i+”=”+xi); xi*=2; for(i=0;ix.length;i+) System.out.println(”x”+i+”=”+xi); public static void main(String args) float d=new float2;d0=2f;d1=5f; System.out.print(”d0=”+d0); System.out.println(”,d1=”+d1); Functransfer ft=new Functransfer(); ft.changex(d); /引用传递 System.out.println(”d0=”+d0); System.out.println(”,d1=”+d1); 4.4 重载-多态性 1、用同一个方法名实现不同功能的方式,重载方法 之间的区别在于参数的不同即有无参数、参数个 数、参数类型甚至参数的排列顺序不同。 2、通过构造方法的重载实现多个构造方法,用以实现 不同形式的初始化(默认构造方法)。 例4-13:Mankind2.java 例:draw(参数)方法 例4-13:Mankind2.java的运行结果 4.4.1 方法的重载 n方法的重载:在一个类中,存在方法名相同,而方 法的参数和实现方式不同的现象称为方法的重载。 n重载是面向对象中多态性的表现。 n通过参数表(参数的数量、类型和顺序不同),来 区分具有相同名字、不同实现的方法。 例4-14 GraphicArea.java import java.lang.Math; public class GraphicArea double area(double x) return(Math.PI*x*x); double area(double x, double y) return(x*y); double area(double x, double y,double z) return(z*(x+y)/2); public static void main(String args) GraphicArea area1=new GraphicArea(); System.out.println(“area1.area(3.0)=“+area1.area(3.0); System.out.println(“area1.area(3.0,2.0)=“+area1.area(3.0,2.0) ; System.out.println(“area1.area(4.0,8.0,6.0)=“+area1.area(4.0,8. 0,6.0); 4.4.2 构造方法的重载 n构造方法的重载,是指一个类可以有多个方法 名相同,但参数表不同的构造方法。 n目的:使对象具有不同的初始值(成员变量) 。 例4-15 Person1.java的源代码。 注:重载的方法只能用参数表来区分,返回值类 型不能用来区分重载的方法。 4.4.3 关键字this的使用 nthis代表当前类本身,用来在方法内部指向当前的对象。 n适用情况: (1)当方法内的局部变量和方法的参数与成员变量同名时 ,在方法内部用this指向当前类/对象的被隐藏的同名成 员变量; (2)在同一个类中,一个方法需要调用另一个方法时,可 以用this表示调用当前类/对象的方法。 (3)调用同一对象中其他构造方法。 n只能用在非静态方法中,不能用在静态(static)方法中 (如main方法)。 nthis语句必须是方法中的第一句可执行语句。 例4-16 this的使用 class Exam int x ,y; Exam( int a ) x=a; Exam( int a, int b) this( a ); y=b; public static void main(String args) Exam m=new Exam(3,6); 思考:main()方法调用的是哪一个构造方法?this语句的 含义是什么? 4.4.3 关键字this的使用 为了更好理解this引用什么,考虑下面版本的Box(): / A redundant use of this. Box(double w,double h,double d) this.width = w; this.height = h; this.depth = d; 本例中的box( ) 和它的更早版本完成同样样的操作。使用this 是 冗余的,但是完全正确。在Box( ) 内,this 总总是引用调调用的对对象。 虽虽然在本例中它是冗余的,但在另外的环环境中,如局部变来与实例 变量同名时,是有用的。 4.5 访问控制符 n访问控制符用来规定类、域和方法的访问权限。 n分为:public,private, protected 和默认的修饰 符。 修饰类的: public和默认的修饰符; 修饰域和方法的:以上四种均可。 1、 public修饰符 npublic修饰的类、成员变量和方法可以被所有其他 的类直接访问和修改。 n不利保证数据的一致性和封装性,安全性和可靠性 下降。 注:程序有多个类时,程序命名、编译为public所修 饰的类的名字; 解释运行时,运行的类名必须为main方法所在的 类-主类。 4.5 访问控制符 例4-17 Functransfer1.java的源代码。 public class Functransfer1 /保存、编译的类名 void changex(float x) System.out.println(“x=“+x); x*=3.4; System.out.println(“x=“+x); class Classmain /解释运行时使用的类名 public static void main(String args) float d; d=7.8f; System.out.println(“d=“+d); Functransfer1 ft=new Functransfer1(); ft.changex(d); System.out.println(“d=“+d); 4.5 访问控制符 2、 private修饰符 n只能用来修饰域和方法,说明二者是私有的,只能被 定义它们的类所使用。 n提供了最高级别的保护,如果类中的域不允许其他 类随意查看和修改,可在变量声明时,定义为 private。 如private float salary; 这时,如果其他类要调用或修改salary的值,只能通 过该类的方法来实现,如getIncome,setIncome。 类比:自己的牙具 4.5 访问控制符 3、protected修饰符 protected修饰的域和方法,只能由以下三种类访问和调用 : n域和方法所在的类; n同一个包内的其他类; n其他包中该类的子类。 4、默认的修饰符 n当类、域和方法前没有修饰符时,具有默认的访问控制符 特性。 n规定类、域和方法只能被同一个包/程序中的其他类访问和 引用。 可修饰饰内容访问权访问权 限 public类类、域和方法所有类类 private域和方法所在的类类 protected域和方法 包内所有类类; 其他包的子类类 默认认类类、域和方法包内所有类类 访问控制符比较表 4.6 其他修饰符 4.6.1 static修饰符 static称为静态修饰符,可以修饰类中的成员和方法。 被static修饰的成员变量称为静态变量,特点为: (1)都是类变量,不属于任何一个具体对象; (2)访问静态属性可以使用类名,也可使用对象名,一般使用类名; (3)在同一类中是共享的,在类被加载时,就为他们分配了公共内存空 间,即所有对象的静态属性是一个公共的存储单元-类的内存单元; 非静态变量保存 在某个对象的内 存空间中,是属 于具体对象的, 互不影响 非静态域只有当创建 类的实例对象时,才 分配空间,才有值 例4-18 静态变量的使用方法 class Abc int a; static double d; public static void main(String args) Abc myAbc1 = new Abc(); Abc myAbc2 = new Abc(); myAbc1.a=2; myAbc2.a=4; myAbc1.d=3; myAbc2.d=6; int x= myAbc1.a; int y= myAbc2.a; double t1= myAbc1.d; double t2= myAbc2.d; double t3= Abc.d; / 静态变量可以通过类名和对象名访问 System.out.println(”x=”+x+”,y=”+y+”,t1=”+t1+”,t2=”+t2+”,t3= ”+t3); Abc d main() myAbc1a myAbc2a t1 t2 t3 例4-19 StaticTest.java (体会同一类创建的不同对象中,静态变量值相同) class Mankind static int sex; public class StaticTest extends Mankind public static void main(String args) Mankind somePerson=new Mankind();/创建对象 Mankind anotherPerson=new Mankind(); System.out.println(“0.somePerson.sex=“+somePerson.sex); System.out.println(“0.anotherPerson.sex=“+anotherPerson.sex); somePerson.sex=100;/给对象中的数据赋值 System.out.println(“1.somePerson.sex=“+somePerson.sex); System.out.println(“1.anotherPerson.sex=“+anotherPerson.sex); anotherPerson.sex=200; System.out.println(“2.somePerson.sex=“+somePerson.sex); System.out.println(“2.anotherPerson.sex=“+anotherPerson.sex); 程序StaticTest.java 的运行结果 4.6.1 static修饰符 n用static修饰的方法叫静态方法,特点: (1)调用方法可使用类名做前缀; (2)该方法属于整个类,而不属于某个对象,在内存 中分配公共的空间; (3)又称为类方法,是一个类所有对象的公共行为, 静态方法只能直接处理静态与或方法内的局部变量 , 也可通过“实例对象名.非静态域名”,来访问非静 态的成员变量。 注:静态变量或静态方法可以直接使用,无须创建类的对象 ; 静态方法不能访问专属于某个对象的域和方法。 例4-20 TestStaticFunc.java class TestStaticFunc int x; static int getx() return x; /静态方法内使用了非静态域 static void setx(int t) x=t; 思考:本程序编译能否通过? 如果不通过应该如何修改? 修改后的 TestStaticFunc.java源代码 class TestStaticFunc static int x; static int getx() System.out.

温馨提示

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

评论

0/150

提交评论