欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    类与面向对象编程.ppt

    • 资源ID:6329505       资源大小:858.50KB        全文页数:78页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    类与面向对象编程.ppt

    第四章 类与面向对象编程,面向对象编程基础类的编程实现对象的定义与使用重载访问控制符其他修饰符,目标:面向对象编程思想学习重点:类、对象、构造方法、重载,4.1 面向对象编程基础,4.1.1 面向对象编程的基本概念 面向对象编程与传统的面向过程编程的区别 面向过程编程:按照计算机的问题处理逻辑来描述和 处理现实世界中的具体问题,采用结构化程序设 计和编程方法,将复杂任务逐步分解为多个子任 务,用一组函数实现任务求解。(动宾结构)面向对象编程:程序的设计和编写力求符合人们的思 维方式,让计算机处理模拟人们对现实世界的问 题求解方法,使现实世界中的事务与面向对象程 序中的类和对象相对应。(主谓结构),4.1.1 面向对象编程的基本概念,1、对象(Object):两个层次,一一对应-客观存在。现实生活中的对象:客观世界中的实体(属性和行为);程序中的对象:变量和相关方法的集合(数据和方法);即类是对象的抽象,而对象则是类的实例化(具体化),实体对象(有共同特征),描述,映射,抽象,抽象数据类型,程序对象,类,4.1.1 面向对象编程的基本概念,2、类(Class)-对应现实世界的类别将具有共性的一类对象,抽象为“类”-概念上的意义。是一种数据类型,在Java中是一种复合/引用数据类型。类是创建某一类对象的模板,属于类的某个对象为类的一个实例,使用对象前需要先定义它所属的类。类中定义一类对象共有的变量和方法。类的定义可实现代码的复用。我们不用去描述每一个对象(如某辆汽车),而是通过创建类(如汽车类)的一个实例来创建类的一个对象,这大大减化了软件的设计。,4.1.1 面向对象编程的基本概念,3、成员与方法 抽象为一个类的不同对象具有许多相同的特点,这些特点基本上可以分为两类:一是描述对象静态状态的,这就是对象的属性/状态,在程序设计中,称之为变量(Variable)/成员;另一个是描述对象的动作和行为,这就是对象的方法(Method),方法决定了该类中的数据如何使用。例:“汽车”的属性:颜色、重量、功率、速度等;方法:前进、后退、加速、减速等。,汽车类示例,class Car int color_number;int weight;void brake();void speedUp();void slowDown();,4.1.2 面向对象编程的优点,与面向过程编程相比较,面向对象编程具有如下优点:提高了程序的可维护性(全局变量-不共享数据)可重用性高-继承(提高效率,降低成本)保护数据-封装类比:组装电脑,4.1.3 对象的抽象,抽象是一种思维形式,就是把事物共同点抽取出来,以统一的方式进行概要描述的一种过程。,4.1.3 对象的抽象,面向对象的编程中,系统由多个包含不同属性和方法的对象组成,每个对象实现部分功能。(如上页交通工具)什么是抽象:用面向对象的方法解决现实世界的问题时去掉物体中与问题不相关的部分,形成所需要类的过程,称为抽象。采用数据抽象方法-构建程序的类,4.1.4 封装,什么是封装:封装是将数据和对数据的操作封装在一个抽象的数据类型中,数据被保护在抽象数据类型的内部,其他对象只能通过接口与数据进行交互。,私有数据,方法,方法,数据,对象A,对象B,公有数据,接口,4.1.4 封装,在程序中,用类将数据和方法封装在类体中。模块之间通过接口进行交互。封装技术的优点:(1)降低问题的复杂度;(2)提高了类或模块的可重用性;(3)保护数据的完整性和安全性。类比:计算机的主机,4.2 类的编程实现,为什么使用类 采用基本数据类型表示现实世界中的概念存在一些局限性。例如:采用int型数据表示一个日期概念,需要使用3个变量:int day,month,year;如果要表示2个人的生日,就要使用6个变量。而使用类就可以避免这种情况,因为类中不但有变量,还有与之相关的操作所定义的方法,将变量和方法放在一个类中,外部对类成员的访问都通过方法进行,从而隐藏成员变量,保护类成员不被非法修改。,类定义,语法结构:修饰符 class 类名 extends 父类名 implements 接口名/类头 类成员声明及初始化;类方法声明及方法体;修饰符:说明类的性质,包括访问控制符(空或public)和类型说明符(abstract抽象、final最终)。类名:用户自定,约定每个单词的首字母大写。extends 父类名:实现继承/派生implements 接口名:多重继承,类体,二者不能同时修饰一个类,类定义,类声明只是创建一个模板(或类型描述),并不会创建一个实际的对象,只有用new方法创建一个该类的实例对象时,才具有“物理”的真实性。例 BoxDemo.java的源程序,4.2.2 域/成员变量的定义,1、什么是域 域:类体中数据部分体现为成员变量的定义,也称为域或 静态属性。域体现了类的状态,状态的改变由类体中 的方法实现。注:域必须在类体中直接定义,不能包含在方法中定义。2、域定义的语法 修饰符 变量类型 变量名=变量初始值/简单变量 修饰符 类名 对象名=new 类名(实际参数列表)/对象,4.2.2 域/成员变量的定义,3、说明修饰符:包括访问控制符(空、public、private、protected)、静态static、常量final、多线程中备份volatile、过渡(暂时)transient修饰符。修饰符为可选项,也可有两个以上的修饰符;若使用其他类的对象作为当前类的成员时,须保证其他类在当前类中是可见的,即它可以被当前类所引用。变量类型,可以是基本数据类型,也可以是复合数据类型。,4.2.2 域/成员变量的定义,成员变量与局部变量 成员变量:类体中定义的变量,在整个类中都可 以使用;局部变量:在方法体中定义的变量和方法的参 数,在方法中有效。,例4-1 Person.java的源代码,class Person String name;/域的定义 int sex;private double salary;int age;Box mybox;,1、什么是方法方法,也叫成员函数,是类的动态属性,表示类具有的功能和行为,用来改变对象的状态。其他对象通过调用对象的方法获得该对象的服务。方法只能在类的内部进行定义。按照习惯方法的定义一般在域之后。方法决定该类中的数据如何使用。2、方法定义的语法:修饰符 返回值类型 方法名(参数列表)/方法头 局部变量声明;语句序列;/方法体,4.2.3 方法的定义,4.2.3 方法的定义,3、说明修饰符:包含访问控制符(空、public、private、protected)、静态static、抽象abstract、最终final、同步synchronized;返回值的类型任意,无返回值用void,有则在方法体中使用return语句;参数可有(指明类型和名称)可无,其类型任意,必须用(),多个用“,”分开;方法的作用:围绕类的成员进行各种操作;与其他的类或对象进行数据交流、消息传递等操作。,例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中定义方法必须说明返回值的类型:没有返回值,那么在方法名前必须加void;有返回值,方法本身也可当作一个值或表达式,可以将它赋值给一个同类型的变量,方法中有return语句。注:return语句后面的表达式为返回值,且return语句 必须为方法的最后一条可执行语句。,例4-3 ReturnType.java的源代码,public class ReturnType int i,j;int mx()i+;j=i+;/return(j*i);(”i=”+i+”,j=”+j);return(j*i);/return 必须为最后一句可执行语句 void mp()i=j=6;(”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、方法的参数-从外部传递信息编写方法时,需要确定参数的数量和类型,多个参数用“,”分开,在方法头定义中说明。例 double computeArea(double x,double y)double s;s=x*y;return s;,4.2.3 方法的定义,若方法的参数名与类中成员变量名相同,则参数名将在方法体内隐藏同名的成员变量。若在方法中想使用与方法变量同名的成员变量,可使用关键字this(指当前的对象)实现,this.同名的变量名。复习-形式参数与实际参数,值传递与地址传递。,主调方法实际参数,被调方法形式参数,a=1b4=2,x=1c4=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”+puteArea(10,10);,例4-4 Rectangle.java的运行结果,4.2.3 方法的定义,6、方法体中的变量 方法体中对数据变量进行处理,这些变量可以是 成员变量 方法调用传递的参数值 方法内定义的局部变量局部变量:在方法体中定义的变量,只能在定义它的方法内部使用,使用前必须进行初始化。(无构造方法)成员变量:可以被类中的所有方法访问。注:二者的作用域不同。,例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 Scope1int 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);,注:s2.i=4;已经改变了i的值,i只有在实例化对象中才分配内存空间。,4.2.3 方法的定义,当方法中局部变量/参数与类的成员变量同名时,方法内使用的是局部变量/参数,即局部变量/参数将隐藏同名的全局/成员变量,如果想使用成员变量,使用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()方法,main()方法是Java Application程序特有的方法,表示Java程序的入口。语法:public static void main(String args)方法体 其中局部变量使用前必须显示赋值,否则出错。Java Application程序中有且只有一个类包含main()方法。在运行程序时,输入的类名必须与main()方法所在的类名相同。main()是Java中唯一能直接与用户交换信息的方法,其他方法通过所在类才能够被访问。命令行参数:main()方法可以有零个或多个参数,参数是字符串类型,依次放入args数组的各个元素中,供方法使用。,命令行参数,有时你想在运行程序时将信息传递到一个程序中。这通过将命令行参数(command-line arguments)传递给main()来实现。命令行参数是程序执行时在命令行中紧跟在程序名后的信息。运行时java CommHandle very good在Java 程序中访问命令行参数是相当容易的它们作为字符串存储在传递给main()的String 数组中。例如,下面的程序显示了调用的命令行参数:,命令行参数,命令行参数程序举例,class CommandLine public static void main(String args)for(int i=0;i args.length;i+)System.out.println(“args+i+:+argsi);尝试执行这个程序,命令如下所示:java Commandline this is a test 100-1/命令行参数执行后,你会看到如下输出:注意:所有的命令行参数都是以字符串的形式传递的。,args0:this args1:is args2:a args3:test args4:100 args5:-1,4.2.4 main()方法,main()方法与C/C+中的main()函数区别:Java中的main()方法必须包含在类定义中,C/C+中不是;C/C+中将main()函数所在的程序文件名作为执行的第一个命令行参数,Java不是。,例4-8 CommHandle.java源程序,class CommHandle public static void main(String args)int i;if(args.length0)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 对象的定义与使用,创建对象使用对象释放对象/对象的消失垃圾回收机制,Java语言中,使用对象“三步曲”:,类和对象之间的区别:类创建一种新的数据类型,该种类型能被用来创建对象。也就是,类创建了一个逻辑的框架,该框架定义了它的成员之间的关系。当你声明类的对象时,你正在创造该类的实例。因此,类是一个逻辑构造,对象有物理的真实性(也就是对象占用内存空间)。,4.3.1 对象的创建,对象的创建需要两个步骤:声明对象与实例化对象。格式为:类名 对象名;/声明对象,创建引用对象名=new 类名(参数列表);/实例化,分配内存,初始化如:Mankind somePerson;somePerson=new Mankind();类名 对象名=new 类名(参数列表);/可将声明和实例化共同进行如:Mankind somePerson=new Mankind();以上两种格式等价。注:对象名首字母要小写。,构造方法,somePerson,i,func(),null,4.3.1 对象的创建,对象创建的过程:为对象开辟空间,并对对象的成员变量进行缺省的初始化;(局部变量必须自行初始化)对成员变量进行指定的初始化;调用相应的构造方法。new作用:为对象向系统申请内存;调用类的构造方法,为对象进行初始化。,4.3.2 构造方法,1、构造方法:是类的一种特殊的方法,其作用是在创建 类对象同时,初始化类的实例对象(成员变量)。2、定义构造方法,可在类中显示定义,否则系统调用默 认的构造方法,每个类都有自己的构造方法。3、构造方法的特性:构造方法的方法名必须与类名相同;构造方法没有返回值,不用void声明;用户不能直接调用构造方法;注:构造方法只能由new运算符调用。构造方法在用户创建对象时,系统自动调用执行。不能在方法内部用return语句返回一个值。,成员变量不用初始化的原因,4.3.2 构造方法,4、构造方法的语法 修饰符 方法名(参数列表)方法体修饰符只能是访问控制修饰符,即public,protected和private其中之一。构造方法的重载:一个类中可以定义多个同名的构造方法,但是它们必须拥有不同的参数。例:class Point int x,y;Point()x=0;y=0;Point(int x,int y)this.x=x;this.y=y;,根据参数的数量、类型的不同,调用不同的构造方法,构造方法与初始化方法相比的好处 当用new为一个对象分配内存时,要调用对象的构造方法,而当创建一个对象时,必须用new为它分配内存。因此用构造方法进行初始化避免了在生成对象后每次都要调用对象的初始化方法。new运算符返回对一个对象的引用,但与C、C+中的指针不同 对象的引用是指向一个中间的数据结构,它存储有关数据类型的信息以及当前对象所在的地址,而对于对象所在的实际内存地址是不可操作的,这就保证了安全性。构造方法中可以定义参数,方法中定义了多少参数,在进行对象创建时,需要按顺序提供相同数量、类型的实际参数。,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();,对象的使用:使用“.”操作符。格式:对象名.成员变量名/引用对象中的成员变量对象名.方法名(参数)/调用对象中的方法方法与外界进行信息交换的方式有三种:方法的返回值、类的成员变量、方法中的参数。根据参数数据类型的不同,参数交换的实现分为:方法的赋值调用和引用 如:somePerson.sex或somePerson.employed()例4-10:Mankind.java,4.3.3 对象的使用,实际参数的数量、类型顺序与方法中一致,4.3.3 对象的使用,同一个类可以创建多个对象,它们之间互不干扰。例4-11:MankindObject.java,4.3.3 对象的使用,方法的赋值调用和引用的区别:(1)赋值调用值传递参数是基本数据类型的变量;将实际参数的值赋给形式参数;实参和形参代表两个变量,在内 存中使用不同的内存单元;参数的传递是单向的,实参-形参;形参不能改变实参值形参的作用域是方法内部,方法退 出时,形参变量释放空间,实参值不变。,(2)引用地址传递参数是引用数据类型,类或 数组;实参和形参代表同一个数据,在内存中使用同一内存单元;形参值可改变实参值。,实际参数替代方法中定义的参数时,二者参数的类型、个数和顺序必须一致。,按参数类型的不同划分,例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 方法的重载,方法的重载:在一个类中,存在方法名相同,而方法的参数和实现方式不同的现象称为方法的重载。重载是面向对象中多态性的表现。通过参数表(参数的数量、类型和顺序不同),来区分具有相同名字、不同实现的方法。,例4-14 GraphicArea.javaimport 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 构造方法的重载,构造方法的重载,是指一个类可以有多个方法名相同,但参数表不同的构造方法。目的:使对象具有不同的初始值(成员变量)。例4-15 Person1.java的源代码。注:重载的方法只能用参数表来区分,返回值类 型不能用来区分重载的方法。,4.4.3 关键字this的使用,this代表当前类本身,用来在方法内部指向当前的对象。适用情况:(1)当方法内的局部变量和方法的参数与成员变量同名时,在方法内部用this指向当前类/对象的被隐藏的同名成员变量;(2)在同一个类中,一个方法需要调用另一个方法时,可以用this表示调用当前类/对象的方法。(3)调用同一对象中其他构造方法。只能用在非静态方法中,不能用在静态(static)方法中(如main方法)。this语句必须是方法中的第一句可执行语句。,例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 访问控制符,访问控制符用来规定类、域和方法的访问权限。分为:public,private,protected 和默认的修饰符。修饰类的:public和默认的修饰符;修饰域和方法的:以上四种均可。,1、public修饰符public修饰的类、成员变量和方法可以被所有其他的类直接访问和修改。不利保证数据的一致性和封装性,安全性和可靠性下降。注:程序有多个类时,程序命名、编译为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修饰符只能用来修饰域和方法,说明二者是私有的,只能被定义它们的类所使用。提供了最高级别的保护,如果类中的域不允许其他类随意查看和修改,可在变量声明时,定义为private。如private float salary;这时,如果其他类要调用或修改salary的值,只能通过该类的方法来实现,如getIncome,setIncome。类比:自己的牙具,4.5 访问控制符,3、protected修饰符 protected修饰的域和方法,只能由以下三种类访问和调用:域和方法所在的类;同一个包内的其他类;其他包中该类的子类。4、默认的修饰符当类、域和方法前没有修饰符时,具有默认的访问控制符特性。规定类、域和方法只能被同一个包/程序中的其他类访问和引用。,访问控制符比较表,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);,例4-19 StaticTest.java(体会同一类创建的不同对象中,静态变量值相同),class Mankind static int sex;public class StaticTest extends Mankindpublic 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修饰符,用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.println(“the value of x is+x);return x;static void setx(int t)x=t;public static void main(String args)TestStaticFunc ts=new TestStaticFunc();ts.x=40;/x=40;TestStaticFunc.getx();ts.getx();TestStaticFunc.x=78;TestStaticFunc.getx();ts.getx();,4.6.1 static修饰符,静态初始化(1)由static 修饰的复合语句,来完成静态 变量的初始化工作。(2)静态初始化在所属类被加载到内存时进行。,例4-21 TheStatic.java的源代码,class TheStatic static int a=1;static double b;static a=4;b=a-8;c=90;static int c;/静态变量允许赋值语句位于声明语句前,特例 public static void main(String args)System.out.println(“TheStatic.a=+TheStatic.a);System.out.println(“TheStatic.b=+TheStatic.b);System.out.println(“TheStatic.c=+TheStatic.c);,4.6.1 static修饰符,对象的初始化1、非静态对象的初始化:类在创建对象时,对象所在类的所有成员变量会首先进行初始化,然后才调用其构造方法来创建对象。2、静态对象的初始化(1)静态对象在非静态对象前初始化,且只初始化一次;(2)程序中主类的静态变量在main方法执行前初始化;(3)创建对象或访问其中一个静态变量时,静态对象的变量 都要被初始化。,4.6.2 final修饰符,修饰变量-常量;修饰方法-不能被子类中的相同方法覆盖,保证方法实现的一致性;修饰类-该类不能派生子类,具有固定类(内容、属性和方法)的作用。,习题四,简述面向对象编程的优点?类中的域与方法中的局部变量有什么区别?构造方法与一般方法的区别是什么?什么是构造方法的重载?在一个类中如何修改其它类的私有域的值?this修饰符的意义是什么?什么是最终类,如何实现?如何定义最终方法?与一般方法相比,最终方法的作用是什么?,练习:1.如果要在类中定义一个float型的域f,下面哪种方法是正确的?,A:public class Swit public static void main(String args)System.out.println(“f=+f);static float f=0.12f;,B:public class Swit static float f=0.12f;public static void main(String args)System.out.println(“f=+f);,c:public class Swit public static void main(String args)static float f=0.12f;System.out.println(“f=+f);,2.下面程序能否编译通过,如过不能,指出错误原因,并改正。,public class Myc int x=1;int y=43,z;z=x*y;float f=

    注意事项

    本文(类与面向对象编程.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开