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