《JAVA编程基础-05面向对象基础.ppt》由会员分享,可在线阅读,更多相关《JAVA编程基础-05面向对象基础.ppt(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、3 Sept.2008 Neusoft ConfidentialJAVA编程基础编程基础 面向对象基础面向对象基础第五章第五章 面向对象基础面向对象基础目标目标:介绍面向对象编程的基本思想,通过介绍面向对象编程的基本思想,通过本课的学习,学员应该掌握如下知识:本课的学习,学员应该掌握如下知识:1)理解什么是类、对象、构造器,)理解什么是类、对象、构造器,2)对象在内存中的表现形式及如何使)对象在内存中的表现形式及如何使用对象等。用对象等。3)this和和static关键字关键字教学方法:教学方法:讲授讲授ppt 上机练习上机练习本章要点本章要点面向对象的思想面向对象的思想类的定义类的定义什么是
2、类类的成员方法重载对象的创建和使用对象的创建和使用创建对象构造器使用对象this关键字关键字static关键字关键字Contents面向对象编程思想面向对象编程思想1类的定义类的定义2对象创建和使用对象创建和使用3this关键字关键字4static关键字关键字5面向过程编程传统的C语言属于面向过程编程。面向过程解决问题的思路:通常是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,最后一个一个依次调用函数来解决。案例:ATM提款机终端系统(面向过程编程)步骤1:输入密码,系统判断是否正确,如正确,进入取款界面,如错误,提示重新输入。步骤2:进入取款界面,输入取款金额,系统判断余额是
3、否足够,如不足,提示;如足够,点钞。步骤3:吐出钞票,打印票据。面向过程编程考虑的问题是程序运行的流程,主要是程序的算法,而数据只是在必要的时候插入到算法中间。面向对象编程思想面向对象编程思想-1/8面向对象编程(OOP:Object-Oriented Programming)从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。面向对象解决问题的思路:通常是把构成问题域的事务分解成各个对象,给对象赋予相应的属性和行为,通过多
4、个对象的相互协调来解决问题。建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。支持面向对象编程是Java 语言的重要特点。面向对象编程思想面向对象编程思想-2/8案例:ATM提款机终端系统(面向对象编程)根据要解决的问题,可以抽象出如下对象:客户银行卡现金票据这些对象没有先后顺序,共同作用才构成了整个系统。我们只要用代码设计出这几个类型的对象,然后让他们互相通信、传递消息就可以完成系统功能。面向对象编程思想实际上就是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。面向对象编程思想面向对象编程思想-3/8面向对象编程思想面
5、向对象编程思想-4/8系统以过程/函数为中心来组织过程间相互发送数据过程的执行动作与数据被明显的分离关注的焦点在于数据结构、算法和执行步骤过程通常难以被复用。系统以对象为中心来组织对象相互间发送消息相关的属性和行为被统一到对象上关注的焦点是对象及对象的职责使得系统构建更容易,易维护,易扩展,易复用解决问题的方式更接近人的思维方式,使人更容易理解vs面向对象面向过程从面向过程到面向对象,不仅仅是编程方式的改变,更重要的是思考方式的改变。面向对象基本概念抽象(abstract):从事物中舍弃个别的非本质特征,抽取共同的本质特征只考虑与问题域相关的信息,而忽略与问题域不相关的部分对象(object)
6、:是系统中用来描述客观事物的一个实体。可以是有形的,也可以是无形的(如一个客户,一张银行卡,窗体中的一个按钮等等)对象是构成世界的一个独立单位具有自己的静态结构(属性)和动态行为(方法)每个对象有自己的唯一标识面向对象编程思想面向对象编程思想-4/8面向对象基本概念类(class):类是一组具有相同属性和行为的对象的抽象,类的作用是用来创建对象,对象是类的一个实例类和对象的关系抽象和具体的关系。每一个类在某一时刻都有零个或更多的实例,类是生成对象的模板 一个类定义了使用哪些数据来描述属性,每一个对象都有相应的属性值数据,一个类通过一系列方法来定义行为,这些方法能在每个对象中被激活面向对象编程思
7、想面向对象编程思想-5/8面向对象主要特征封装(encapsulation):所谓封装是把对象的属性和行为结合在一个独立的系统单位内部尽可能隐蔽对象的内部细节,只向外部提供接口降低对象间的耦合度封装的重要意义:使对象能够集中而完整地描述并对应一个具体事物体现了事物的相对独立性,使对象外部不能随意存取对象的内部数据面向对象编程思想面向对象编程思想-6/8面向对象主要特征继承(inheritance):也称泛化,继承性是子类自动共享父类属性和方法的机制,在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入自己若干新的内容继承简化了人
8、们对事物的认识和描述,有益于软件复用,是OO技术提高软件开发效率的重要原因之一是类之间的一种关系,一般类与特殊类之间的关系继承关系的语义:“is a kind of”面向对象编程思想面向对象编程思想-7/8面向对象主要特征多态(polymorphism):指同一个命名可具有不同的语义OO方法中,常指在一般类中定义的属性或方法被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为,对于子类,可用不同的方法替代实现父类的服务的方法面向对象编程思想面向对象编程思想-8/8Contents面向对象编程思想面向对象编程思想1类的定义类的定义2对象创建和使用对象创建和使用3this关键字关键字4sta
9、tic关键字关键字5什么是类什么是类类的定义类的定义把相似的对象划归成一个类。在软件设计中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的属性(变量)和行为(方法)。什么是类什么是类类的定义类的定义?西游记游戏软件中的游戏人物孙悟空:孙悟空的武器是金箍棒,战斗力五颗星,耐力五颗星唐 僧:唐僧没有武器,战斗力为零,耐力五颗星猪八戒:猪八戒的武器是耙子,战斗力四颗星,耐力两颗星沙 僧:沙僧的武器是月牙铲,战斗力三颗星,耐力四颗星类的格式类的格式类的定义类的定义修饰符一般为public,也可以没有修饰符。注意类名的命名规范。类名一般大写类的成员:成员变量(属性)成员方法(方法)嵌套类通过“
10、.”调用属性和方法类修饰符 class 类名 类的成员 类的格式类的格式类的定义类的定义Employee.javaclass Employee String name;int age;double salary;public String showName()System.out.println(name);return name;public int showAge()System.out.println(age);return age;public void updateName(String name2)name=name2;public void getSalary()System.o
11、ut.println(The salary of this month is 2000);属性属性方法方法类成员的定义类成员的定义成员变量:其中修饰符有:public、private、protected,也可以省略不写。例如:private int id;private int age=20;方法:修饰符 类型 属性名=默认值;修饰符 返回值类型 方法名(形参列表)语句方法的定义方法的定义方法方法方法是完成某个功能的一组语句,通常将常用的功能写成一个方法 示例 Func_sample1.java方法的格式方法的格式访问控制符 修饰符 返回值类型 方法名(参数类型 形式参数,参数类型 形式参数,
12、)方法体示例 Func_sample2.java方法的定义方法的定义方法的格式方法的格式形式参数:在方法被调用时用于接受外部传入的变量参数类型:就是该形式参数的数据类型返回值:方法在执行完毕后返回给调用它的程序的数据返回值类型:方法要返回的结果的数据类型public static int square(int x)int y=x*x;return y;/返回值方法的定义方法的定义方法方法的分类的分类根据参数个数:无参方法有参方法根据返回值类型:有返回值的方法:基本数据类型引用数据类型无返回值的方法void方法的定义方法的定义方法方法的分类的分类public class FunctionAdd
13、public static int add(int x,int y)int z=x+y;return z;public class FunctionRect void drawRect()int width=10 int height=5;for(int i=0;iheight;i+)for(int j=0;jwidth;j+)System.out.print(#);System.out.println();有返回值有参方法有返回值有参方法无返回值无参方法无返回值无参方法方法的调用方法的调用方法方法的调用的调用方法只有在被调用后才生效方法的调用方法:无参方法的调用有参方法的调用无参无参方法的调
14、用的调用方法名方法名()方法的调用方法的调用有参有参方法方法的调用的调用函数名函数名(实参,实参,实参,实参,)public class FunctionDemo public int add(int x,int y)int z=x+y;return z;public static void main(String args)FunctionDemo fd=new FuctionDemo()int x=fd.add(10,20);System.out.println(x);int y=fd.add(100,200);System.out.println(y);形参形参形参形参实参实参实参实参方
15、法的重载方法的重载方法的重载(方法的重载(overload)方法的重载就是在同一个类中允许同时存在一个以上同名的方法方法重载的规则方法重载的规则方法名称相同方法的参数必须不同参数个数不同 或参数类型不同方法的返回值类型可以相同,也可以不同方法的重载方法的重载方法的重载(方法的重载(overload)class Employee public Employee()public Employee(String _name,int age)name=_name;age=_age;salary=_salary;FuncSum.java Employee.java方法的重载方法的重载 练习 下列选项中,
16、哪些可以与下列选项中,哪些可以与void setAge(int year,int month,int day)方法在同一个类中定义方法在同一个类中定义_?A.public void setAge()B.void setAge(int age)C.void setAge(int y,int m,int d)D.int setAge(Date d)E.int setAge(int year,int month,int day)F.void setage(int year,int month,int dat)答案:ABDF方法应该注意的问题方法应该注意的问题使用使用方法方法时的注意问题时的注意问题形
17、参必须注明数据类型实参直接写,不需要类型声明return只能返回一次遇到return语句,方法结束执行,后续语句不执行方法的返回值,必须与方法声明中的返回值类型匹配方法定义,不能写在main()中方法是不能嵌套的Contents面向对象编程思想面向对象编程思想1类的定义类的定义2对象创建和使用对象创建和使用3this关键字关键字4static关键字关键字5什么是对象什么是对象类和对象的关系类和对象的关系类(class)是对某一类事物的描述对象(object)是实际存在的某类事物的个体,也称为实例(instance)类是创建对象的模板,对象是类的实例。创建对象创建对象对象的创建对象的创建语法格式
18、示例 TestEmployee.java类名类名 对象名对象名=new 构造器构造器Employee zhang=new Employee()构造器构造器构造器构造器(构造函数/构造器,Constructor)具有与类相同的名称不含返回值类型不能在方法中用return语句返回一个值一般访问权限为public 在一个类中,具有上述特征的方法就是构造器。构造器的作用构造器的作用完成对象的创建,即完成对象的实例化一般使用构造器来完成对成员变量的初始化 示例 Employee.java构造器构造器 练习练习构造器构造器普通方法普通方法普通方法普通方法构造器构造器public void Employee
19、()public Employer()public Employee(String name,int age)public Employee()构造器构造器默认的构造器默认的构造器在Java中,每个类都至少要有一个构造器,如果程序员没有在类里定义构造器,系统会自动为这个类产生一个默认的访问权限为public且参数列表为空的构造器一旦编程者为该类定义了构造器,系统就不再提供默认的构造器class Employee public Employee()class Employee 构造器构造器 练习 下列关于类的定义的选项中,哪些可以通过下列关于类的定义的选项中,哪些可以通过new Thing()方
20、法来方法来创建该类的一个对象创建该类的一个对象_?A.public class Thing B.public class Thing public Thing()C.public class Thing D.public class Thing public Thing(void)public Thing(String s)E.public class Thing public void Thing()public Thing(String s)答案:A、B匿名对象匿名对象匿名对象创建完对象,在调用该对象的方法时,也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫匿名对象使用匿名对
21、象的情况如果对一个对象只需要进行一次方法调用new Person().sayHello()Person p1=new Person();p1.sayHello();对象创建的内存模型对象创建的内存模型引用类型变量引用类型变量除了8种基本数据类型的变量,其他变量都是引用类型变量类(class)接口(interface)数组Person p;Animal a;int c;对象创建的内存模型对象创建的内存模型0 x8000male44“lisi”Person p0 x8000nameagesexPerson p =new Person(“lisi”,44,“male”);引用类型变量的内存模型引用类
22、型变量的内存模型对象创建的内存模型对象创建的内存模型0 x80000 x3000male44“lisi”Person p0 x3000nameagesexmale33“zhang”nameagesexPerson q0 x8000 引用类型变量的内存模型引用类型变量的内存模型Person p =new Person(“zhang”,33,”male”);Person q =new Person(“lisi”,44,“male”);Contents面向对象编程思想面向对象编程思想1类的定义类的定义2对象创建和使用对象创建和使用3this关键字关键字4static关键字关键字5this关键字关键字
23、this关键字关键字代表对象自身的引用一个引用指向调用该方法的当前对象通常在类的方法定义中使用用用this关键字的情况关键字的情况方法中的变量与成员变量重名在一个构造器中,调用其它重载的构造器返回当前对象的引用 示例 Employee.java、Dog.javaContents面向对象编程思想面向对象编程思想1类的定义类的定义2对象创建和使用对象创建和使用3this关键字关键字4static关键字关键字5static关键字关键字static关键字关键字static可以修饰的元素属性方法代码块需要注意的问题需要注意的问题只能修饰类成员,不能修饰局部变量。static关键字关键字static修饰的
24、变量修饰的变量 静态变量静态变量所有对象共享也称为类变量用static修饰的成员变量,它们在类被载入时创建,只要类存在,static变量就存在两种方式访问:直接访问:类名.属性;实例化后访问:对象名.属性静态属性静态属性变量的作用域变量的作用域变量的作用域变量的作用域类变量用static修饰的成员变量,它们在类被载入时创建,只要类存在,static变量就存在实例变量类体中声明的成员变量为全局变量全局变量在类的整个生命周期中都有效局部变量方法体中声明的变量,方法中的参数,或代码块中声明的变量,都是局部变量局部变量只在方法调用的过程中有效,方法调用结束后失效变量的作用域变量的作用域变量的作用域变量
25、的作用域class Employee String name;int age;double salary;public String showName()String hello=“你好你好”;System.out.println(hello+name);return name;public void updateName(String name2)name=name2;全局变量全局变量局部变量局部变量变量的作用域变量的作用域变量初始化的顺序变量初始化的顺序隐式赋予变量默认值成员变量显式赋予初始值通过构造器体赋予新值 示例 PersianCat.java各类型变量默认初始化值类型类型缺省值缺省
26、值类型类型缺省值缺省值byte(byte)0charu0000 short(short)0float0.0Fint0double0.0Dlong0L引用对象nullbooleanfalsestatic关键字关键字static修饰的方法修饰的方法 静态方法静态方法不需要实例化,可以直接访问也称为类方法两种方式访问:直接访问:类名.方法名()实例化后访问:对象名.方法名()static方法的作用方法的作用简化方法的使用;便于访问静态属性;注意事项注意事项静态方法里只能直接访问静态成员,而不能直接访问类中的非静态成员静态方法中不能使用this、super关键字静态方法不能被非静态方法覆盖,静态方法不
27、能修饰构造器静态方法静态方法static关键字关键字static修饰的代码块修饰的代码块 静态代码块静态代码块一个类中由static关键字修饰的,不包含在任何方法体中的代码块当类被载入时,静态代码块被执行,且只被执行一次静态块经常用来进行类属性的初始化静态代码块静态代码块面向对象基础 以下代码的执行结果是_?答案:答案:A A.编译失败 B.编译成功,输出“0”C.编译成功,输出“1”D.编译成功,输出“2”static关键字关键字 练习public class CircleStatic static double pi=3.14;int radius=100;public static vo
28、id main(String args)System.out.println(_1_);/打印pi _2_;System.out.println(_3_);/打印radius 答案:1.pi2.CircleStatic c=new CircleStatic()3.c.radius单例模式单例模式单例模式(singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点单例模式要点:某个类只能有一个实例它必须自行创建这个示例必须自行向整个系统提供这个实例单例模式单例模式单例模式实现:拥有一个私有构造器 提供一个自身静态私有的成员变量提供一个公有的静态公有的方法public class Singleton /在自己内部定义自己的一个实例,只供内部调用 private static Singleton instance=new Singleton();private Singleton()/do something /这里提供了一个供外部访问本class的静态方法,可以直接访问 public static Singleton getInstance()return instance;小结小结面向对象的思想面向对象的思想类的定义类的定义什么是类类的属性方法定义方法重载对象的创建和使用对象的创建和使用创建对象构造器对象创建的内存模型this关键字关键字static关键字关键字