面向对象的编程(基本语法).ppt_第1页
面向对象的编程(基本语法).ppt_第2页
面向对象的编程(基本语法).ppt_第3页
面向对象的编程(基本语法).ppt_第4页
面向对象的编程(基本语法).ppt_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

第3章 面向对象编程(基本语法),第3章 面向对象的编程(基本语法),3.1 面向对象程序设计概述 3.2 类的定义 3.3 类中的方法 3.4 方法中的参数传递 3.5 访问控制,程序设计语言的发展,机器语言由计算机硬件系统可以识别的二进制指令组成的语言,这种语言中的指令都是由0,1组成的序列,称这样的序列为一条机器指令。如1011 0111 0001 汇编语言由机器指令映射出来的容易被人读懂的助记忆符,如ADD DX CX 高级语言 机器码低级高级,面向过程的程序设计,设计思路 自顶向下、逐步求精。采用模块分解与功能抽象,自顶向下、分而治之。 程序结构 按功能划分为若干个基本模块,形成一个树状结构。 各模块间的关系尽可能简单,功能上相对独立;每一模块内部均由顺序、选择和循环三种基本结构组成。 其模块化实现的具体方法是使用子程序。 优点 有效地将一个较复杂地程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。,面向过程的程序设计的局限,在面向过程程序设计中,被操作的数据仍然是嵌入在编程语句中的,并且与程序逻辑混合在一起,计算机的信息世界与现实世界之间的映射关系仍然不直接,不明确。 用面向过程的方法开发较大的软件系统,数据缺乏保护。 使用面向过程程序设计方法建立的应用程序是很难修改。,面向对象程序设计的概念,面向对象程序设计是建立在结构化程序设计基础上的,但它不再是从功能入手,而是从对象(人、地方、事情等)入手; 面向对象程序设计以类作为构造程序的基本单位,它具有封装、数据抽象、继承、多态等特点;,面向对象的方法学,世界是由什么组成的?,对象,一般意义上的对象是现实世界中的一个实际存在的事物,可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划),是构成世界的一个独立单位,具有: 对象标识:即对象名,是一个对象区别于其他对象标识符。 对象状态:可以用某种数据来描述 对象行为:对象所表现的行为或具有的功能,对象,有各自不同的状态,对象,布兰尼,朱丽叶,顾客 姓名:朱丽叶 年龄:28 体重:52千克 操作: 购买商品,姓名:布兰尼 职衔:收银员 年龄:35 体重:60千克 操作: 收款 打印账单,对象的特征属性,属性对象具有的各种特征 每个对象的每个属性都拥有特定值 例如:布兰尼和朱丽叶的体重不一样,60kg,布兰尼,属性,35岁,对象的特征方法,方法对象执行的操作,打单,收银,方法,刷卡,对象的属性和方法,列出尼古拉斯凯奇驾驶的这辆法拉利F360 Spider的属性和方法 列出小狗对象的属性和方法,属性: 品牌:法拉利 型号:F360 Spider 颜色:黄色 价格:380万元 方法: 发动 停止 加速,属性: 颜色:白色 方法: 叫 跑 吃,说一说教室里的对象 描述他们的属性和方法,颜色:黑色 品牌:BENQ 投影,姓名:张三 年龄:20 学习,抽象,分类人类通常的思维方式 分类所依据的原则抽象 忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。,抽象,对象类(抽象化),Shape,从对象抽象出“类”,抽取出下列对象的属性和方法的共同特征,轿车,顾客,类,面向对象方法中的“类” 具有相同属性和方法的一组对象的抽象的描述。类的数据成员是对对象属性的抽象,类的方法成员是对对象行为的抽象,而类本身就是对对象的抽象。 类与对象的关系 犹如模具和铸件之间的关系,一个属于某类的对象称为该类的一个实例。,对象类(抽象化) 类对象(具体化),王艳 2年级3班,刘强 5年级1班,范小飞 2年级1班,Student,类,类和对象,小汽车,类的实例化,是由类具体化对象,类,产地,车体颜色,行驶,刹车,归纳一组相似对象的共性,对象,属性,方法,封装,把对象的属性和方法结合成一个独立的系统单位 对象的属性和方法通常被封装在一起,共同体现事物的特性, 二者相辅相承,不能分割,封装,封装第一个涵义是,把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。 第二个涵义也称作“信息隐蔽”,即尽可能隐蔽对象的内部细节,对外形成一个边界(或者说形成一道屏障),只保留有限的对外接口使之与外部发生联系。,继承,继承是面向对象语言的另一特性。类与类之间可以组成继承层次,一个类的定义(子类)可以定义在另一个已定义类(父类)的基础上。子类可以继承父类中的属性和操作,也可以定义自己的属性和操作。因而具有继承这一特性所带来的优势,大大增加了程序的重用性。,面向对象的方法学,继承,多态,多态性 多态性是指不同类型的对象接收相同的消息时产生不同的行为。如电梯系统中,当向按钮对象发送消息pressButton()时,不同按钮对象如电梯内部按钮(ElevatorButton)和楼层按钮(FloorButton)会自动判断自己的所属类并执行相应的服务。,消息机制,在面向对象技术中,对象间的交互是通过消息的传递来完成的。 消息处理方法就是对象的成员方法。 Windows操作系统也是以消息为基础,事件为驱动的。,3.2 类的定义,类是对象的模板,使用对象前必须先创建类,修饰符 class 类名 extends 父类 implements 接口名 成员变量声明; /描述对象的状态 方法声明; /实现对象的行为 ,public class Customer public string name; public double creditLimit; public int customerID; ,类访问修饰符 默认为:friendly,3.2 类的定义,类是组成Java程序的基本要素。类封装了一类对象的状态和方法。类是用来定义对象的模板。 类的实现包括两部分:类声明和类体。 “class Customer”叫做类声明;“Customer” 是类名。习惯上类名的第一个字母大写,但这不是必须的。 类声明之后的一对大括号“”,“”以及它们之间的内容称做类体。,3.2 类的定义,类修饰符:public公共类、private私有类、protected受保护类; abstract抽象类; final最终类。 class:是关键字,是声明类的必须的符号。 类名:是类设计者指定的标识符。 父类:如果正在定义的类需要从另一个类中继承所有的成员,被继承的类就是父类。,类的访问控制,顶层类只能是public或默认访问级别 public级别的类可以被同一个包或者其他包中的类访问 默认级别的类只能被同一个包中的类访问,public class Sample /public级别 class Sample /默认访问级别 protected class Sample /非法 private class Sample /非法,class trapezia float supside,subside,high,area; /变量定义部分 float computeArea() /方法定义 area=(supside+subside)*high/2.0f; return area; void modifyHigh(float h) /方法定义 high=h; ,3.2 类的定义,成员变量,成员变量是用来描述事物的静态特征的。,修饰符,修饰符 数据类型 变量名;,public:可被所有其他类引用。 private:仅可被该类自身引用和修改,不能被其他任何类(包括子类)引用。 protected:该类自身、子类、同一包中的其他类。 缺省:本包中的类。 static:类成员变量,对所有的实例一致,引用时前缀可使用类名或对象名。 final:数值不变常量,定义同时应对其进行初始化。,成员变量和局部变量,类中变量定义部分所定义的变量被称为类的成员变量。在方法体中定义的变量和方法的参数被称为局部变量。 成员变量在整个类内都有效,局部变量只在定义它的方法内有效。 如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏。这时如果想在该方法内使用成员变量,必须使用关键字this。,变量1类型 变量1; 变量2类型 变量2; 变量3类型 变量3;,public 返回类型 方法1() 变量4类型 变量4; public 返回类型 方法2() 变量5类型 变量5; ,public class AutoLion,AutoLion类的方法 别的类的方法,谁能使用这些变量?,方法1,方法2,成员变量,局部变量,局部变量,成员变量和局部变量,public class AutoLion String color = “黄色“; public void run() /方法1:跑 System.out.println(“正在以0.1米/秒的速度向前奔跑。“); public String bark() /方法2:叫 String sound = “吼“ ; return sound; public String getColor() /方法3:获得颜色属性 return color ; public String showLion() /方法4:输出类的描述信息 return “这是一个“ + getColor() + “的玩具狮子!叫声是“ + sound ; ,可以调用吗?,成员变量和局部变量,类的方法,(2)类的方法 类的方法,用来规定类属性上的操作,实现类对外界提供的服务,也是类与外界交流的接口。 Java中声明方法的语法如下:,修饰符 返回值类型 方法名(参数列表) throws 异常1 /方法体声明 局部变量声明; 语句序列; ,类和对象,类: 相对对象而言,类似于蓝图 包含方法和数据,对象: 是类的实例 使用关键字 new 创建 对象具有行为,对象,类,3.2.2 创建类的实例对象,创建一个对象包括对象的声明和为对象分配内存两个步骤。 (1)对象的声明。 一般格式为:,Person zhangPing;,类的名字 对象名字;,如:,3.2.2 创建类的实例对象,(2)为声明的对象分配内存 使用new运算符为声明的对象分配内存。如:,zhangPing=new Person();,class Person float height,weight; String name; void speak(String s) System.out.println(s); class Program public static void main(String args) Person zhangPing; /声明对象 zhangPing=new Person(); ,(3)对象的内存模型,3.2.2 创建类的实例对象,当用Person类声明一个变量,即对象zhangPing时,如例子中的对象: Person zhangPing; 内存模型如左图所示,3.2.2 创建类的实例对象,当系统见到: zhangPing=new Person(); 时,就会做两件事:, 为height,weight,name各个变量分配内存,即Person类的成员变量被分配内存空间。 new运算符在为变量height,weight,name分配内存后,将返回一个引用给对象变量zhangPing。,3.2.2 创建类的实例对象,值类型与引用类型,JAVA数据类型分为两类:值类型和引用类型。 值类型: 包括简单类型、枚举类型。 引用类型: 包括类、接口、数组。 一般把引用类型的变量称为对象。,值类型与引用类型区别,堆栈,堆,5,6,i,j,实际数据,12345H,obj,public class School /定义属性 String schoolName; / 学校的全称 int classNum; /教室的数目 int labNum; /机房的数目 / 定义方法 public String toString() return schoolName + “n“ + “配备:“+ classNum + “教室“ + labNum + “机房“; ,定义类的toString()方法, 用于输出类相关的信息,public String toString() return 字符串; /方法体 ,成员变量,使用对象,使用对象:使用“.”进行以下操作 给类的属性赋值:对象名.属性 调用类的方法:对象名.方法名(),school.Name = “西亚斯学院“; /给属性赋值 school.toString(); /调用类的方法,该方法中的操作将被执行,public class InitSchool public static void main(String args) School school = new School(); System.out.println(school); school.Name = “郑州轻工业学院“; school.classNum = 100; school.labNum = 20; System.out.println(school); ,创建和使用对象示例,说一说看到什么效果?,编写学生类,输出学生相关信息 编写教师类,输出教师相关信息,3.3 构造函数,Student zhang = new Student(); zhang.Name = “张靓靓“; zhang.Age = 20; zhang.Hobby = “唱歌歌“;,班级来了新学生 添加学生对象,学生类实例化对象、设置属性,初始属性若太多,设置麻烦,能否在实例化时设置属性?,public Student(string name, int age, string hobby) this.Name = name; this.Age = age; this.Hobby = hobby; ,Student zhang = new Student(“张靓靓“, 20, “唱歌歌“);,一次设置完成,类中加入这个方法,添加的方法叫做构造函数,构造函数,访问修饰符 () / 构造函数的主体 ,public class Employee / 默认构造函数 Employee() qualification = “研究生“; ,构造函数,是类中的一种特殊的方法 构造函数名与类名相同,不返回任何值 可初始化成员变量,每次创建类的实例都会调用此方法,static void Main(String args) / 调用默认构造函数 Employee objEmployee = new Employee(); System.out.println(“资格= “ + objEmployee.qualification); System.out.println(“薪水= “ + objEmployee.salary); ,构造函数,class Employee ,private String name; private char gender; private String qualification; private int salary;,/ 默认构造函数 private Employee() qualification = “研究生“; ,实例化对象调用构造函数,使用 new 关键字,finalize()方法,Java中一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存。所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作。 使用finalize()方法的一般格式如下: protected void finalize() / finalization code here 其中关键字protected是防止该类之外的其他对象或代码访问该方法。,3.4方法的使用,写出狮子对象的“跑”方法 写出狮子对象的“叫”方法,电动玩具狮子 属性: 颜色:黄色 行为: 跑 叫,按此按钮, 狮子开始跑,3.4方法的使用,public class AutoLion String color = “黄色“; public void run() System.out.println(“正在以0.1米/秒的速度向前奔跑“); public String bark() String sound = “吼“ ; return sound; ,AutoLion类代码实现,方法名称,方法体,返回类型,如何定义类的方法,方法(Method)是一组程序代码的集合 方法是类或对象的行为 对象需要做某些事情,在类中添加方法,方法的名称,方法的主体,方法返回的数据类型,参数列表,3.4方法的使用,访问修饰符 返回类型 方法名 ( 参数列表 ) / 方法的主体 ,通过return返回值,public private,int double string void ,命名规范:单词首字母大写Pascal命名法,参数传递,访问修饰符(可选),默认情况下为 private,如果不需要返回任何值,方法返回 void 数据类型,方法的声明,定义方法时,需要注意以下几点: 方法名不能和变量、常数或者类中其它的成员相同。 方法可以有参数,也可以没有参数,但是不论是否有参数,小括号都是必需的。 结束某个方法的执行,可以使用return语句,程序遇到return语句后,会将执行流程交还给调用此方法的程序代码段。 如果声明一个非void类型的方法,则方法中必须至少有一个return语句。,3.4方法的使用,方法的返回值,两种情况 如果方法具有返回值,方法中必须使用关键字return返回该值,返回类型为该返回值的类型 如果方法没有返回值,返回类型为void,public class Student String name = “张三“; public void getName() return name; ,返回类型要匹配,return 表达式;,编译错误,常见错误-1,public class School public static void main(String args) return “西亚斯学院! “; ,返回类型是void 方法中不能有返回值,常见错误-2,public class Student public double getInfo() double weight = 95.5; double height = 1.69; return weight, height; ,方法至多可以返回一个值,不能返回多个值,方法调用,方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果 方法调用:执行方法中包含的语句,对象名.方法名();,方法调用,class Program public int MyMethod() System.out.println(“this is MyMethod.“); int i = 10; return i; public static void main(String args) Program method = new Program(); int j = 5; j = method.MyMethod(); System.out.println(“the value is: “+ j); ,方法参数,下面代码输出结果是什么?,public static void main(string args) int num1 = 5, num2 = 10; / 两个数字 System.out.println(“交换前两个数的值分别为:”+ num1+“和”+num2); Swap(num1, num2); / 交换两个数的值 System.out.println(“交换后两个数的值分别为: ”+ num1+“和”+num2); / 交换两个数的方法 private static void Swap(int num1, int num2) int temp; / 中间变量 temp = num1; num1 = num2; num2 = temp; ,方法参数,传递引用类型时: 类:Student 参数在程序中被修改,/传递引用类型参数 Student scofield = new Student(“Scofield“, Genders.Male, 28, “越狱狱“); scofield.SayHi(); Vote(scofield); scofield.SayHi();,引用类型:类,人气属性加1的方法,方法参数,class Program1 public static void AddOne(int a) a+; public static void main(String args) int a = 3; System.out.println(“调用AddOne之前,a=“+a); AddOne(a); System.out.println(“调用AddOne之后,a=“+a); ,1) 传递值类型的参数,方法参数,class Program2 public static void AddOne(int a)a0+; public static void main(String args) int a =3; System.out.println(“调用AddOne之前,a=“+a0); AddOne(a); System.out.println(“调用AddOne之后,a=“+a0); ,2) 传递引用类型的参数,JVM在运行时,做完初始化之后,就会查找main()方法,从这里开始整个程序的运行。在main()方法的括号里面有一个形式参数“String args”,可以接受系统所传递的参数。在命令行执行一个程序通常的形式是:,3.4.6 命令行参数的使用,参数列表中可以容纳多个参数,参数间以空格或制表符隔开,它们被称为命令行参数。,java 类名 参数列表,3.5 访问控制,所谓访问控制是指对象是否可以通过“.”运算符操作成员变量或通过“.”运算符使用成员方法。 JAVA中有以下成员访问修饰符: public:任何类都可以不受限制的存取这个类的成员。 private:所有方法和数据成员只能在此类中使用 protected: 除了类内可以使用之外,继承自此类的子类也可以存取。 缺省: 在当前包中都可以存取。,修饰符与访问控制,class Student private string name;/姓名 public int age; /年龄 public string idNumber ;/身份证号 static void Main(string args) Student myStudent = new Student(); myS = “张三“; myStudent.age = 20; ,类成员访问修饰符,私有成员,公有成员,实例化一个对象,可以访问,无法访问编译错误,类成员访问修饰符,static void Main(String args) Student myStudent = new Student(); myStudent.age = -2; myStudent.idNumber = “123456“; ,非法数据,身份证号不能被修改,无法获得数据,无法正常赋值,有时候将类中的字段公开是不安全的,如果设为私有成员,能否对这些字段进行规则约束或者只读呢?,私有变量和私有方法,一个类中创建了另外一个类的对象后,该类不能通过对象名访问其私有变量和私有方法 .,public class DemoPrivate public int a; / 公共类型的成员变量 private int b; / 私有类型的成员变量 public int getA() /公共类型的成员方法 return a; private int getB() /私有类型的成员方法 return b; public DemoPrivate(int a,int b) /构造方法 this.a = a; this.b = b; ,私有变量和私有方法,public static void main(String args) DemoPrivate aDemoPrivate = new DemoPrivate(1,2); /访问公共类型的成员方法 int a = aDemoPrivate.getA(); System.out.println(“变量a的值:“+a); /访问私有类型的成员方法 int b = aDemoPrivate.getB(); System.out.println(“变量b的值:“+b); ,尽管成员变量和成员方法定义为私有类型。但由于处于同一类中,仍然能够对成员变量和成员方法进行访问。如果在另一类中,则访问受到限制。,.公有变量和公有方法,一个类中创建了另外一个类的对象后,该类能够通过对象名访问其公有变量和公有方法 .,package pub1; public class Demopub1 / public修饰是必需的。 /公共类型的成员变量 public int a; /公共类型的成员方法 public void method() System.out.println(); ,package pub2; import pub1.*; class Demopub2 public static void main(String args) Demopub1 aDemo1 = new Demopub1(); /访问aDemo1中的公共成员方法 aDemo1.method(); /访问aDemo1中的公共成员变量 aDemo1.a = 10; int a = aDemo1.a; System.out.println(“aDemo1中的公共成员变量a的值:“+a); ,.公有变量和公有方法,3.默认变量和默认方法,不用private、public 、protected修饰符的成员变量和方法被称为友好变量和友好方法。 一个类创建了另外一个类的一个对象后,如果两个类在同一包中,该类中可以通过对象访问其默认变量和默认方法,.受保护的成员变量和方法,一个类创建了另外一个类的一个对象后,如果两个类在同一包中, 该类能够通过对象访问其protected变量和protected方法 在后面学习类的继承时,将讲述protected和“友好”之间在继承方面的区别。,/Demopro3.Java package pro3; public class Demopro3 /公共类型的成员变量 public int a; /保护类型的成员方法 protected void method() System.out.println(); ,【例】不同包中公共类中protected修饰的方法的访问,.受保护的成员变量和方法,package pro4; import pro3.*; public class Demopro4 public static void main(String args) Demopro3 aDemo1 = new Demopro3(); /不能访问Demopro3中的保护类型成员方法 /原因是该方法是protected类型 /aDemo1.method(); /可以访问Demopro3中的公共成员变量 aDemo1.a = 10; int a = aDemo1.a; System.out.println(“Demopro3中的公共成员变量a的值:“+a); ,.受保护的成员变量和方法,3.5.2 static关键字的使用,类可以具有静态的成员,如静态字段、静态方法 使用 static 关键字修饰,访问修饰符 static 数据类型 变量名;,访问修饰符 static 返回值类型 方法名(参数列表),3.5.2 static关键字的使用,静态变量 属于类 在类的实例创建以前完成初始化,并且它在应用程序的整个生存期内一直存在。 只开辟一块内存空间存储,被同一个类的所有实例共享,因此static 字段也称为类字段,class Lion public static string family = “felidae“; /猫科动物 . / A Lion object is not created in this code System.out.println( “Family: 0“, Lion.family );,3.5.2 static关键字的使用,实例变量必须首先实例化类的一个对象,再通过对象访问,因此称为实例变量,class Cat string name ; static string food; ,static void Main() Cat.food = “fish”; /OK C = “Kitty”; /错误 Cat cat1 = new Cat(); = “Kitty”; /OK ,static变量不依赖于具体对象,可通过类名直接访问,无需先生成一个实例对象,也可以通过实例对象访问类变量,3.5.2 static关键字的使用,由于在所有的对象间共享,因此可以用于对象之间的通信 思考题:怎样统计被创建的Cat对象的总数?,class Cat public static int count; public string name ; public Cat() count+; ,1 cat1,2 cat2,3 cat3,4 cat4,count = 4,实例变量和类变量,class ABCD char data; static int share_data; class Demo ABCD a,b,c,d,每个对象的实例变量都分配内存 通过对象来访问这些实例变量,类变量仅在第一次使用类时分配内存,所有实例对象共享同一个类变量,2静态代码块 在类中,也可以将某一块代码声明为静态的,这样的程序块叫静态初始化段。静态代码块的一般形式如下:,3.5.2 static关键字的使用,static 语句序列 ,编译通过后,用java命令加载本程序,程序运行结果首先输出:This is static block. 12 接下来才是main()方法中的输出结果,由此可知静态代码块在main方法之前就被执行。,3.5.2 static关键字的使用,static int stVar = 12; /stVar只在本块内有效 System.out.println(“This is static block.“ + stVar); ,如下面代码定义一个静态代码块,3.5.2 static关键字的使用,注意: 1.静态代码块只能定义在类里面,它独立于任何方法. 2.静态代码块里面的变量都是局部变量. 3.静态代码块会在类被加载时自动执行. 4.一个类中允许定义多个静态代码块. 5.静态代码块只能访问类的静态成员.,3.5.2 static关键字的使用,静态方法 静态方法也叫作类方法,类名.方法名 没有static修饰的方法叫实例方法,对象名.方法名 注意事项: static方法中不能使用非静态成员,因为非静态成员与实例相关。 static方法中不能使用t

温馨提示

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

评论

0/150

提交评论