JavaSE核心技术——面向对象编程基础

一、面向对象编程思想

1、面向面向过程编程与对象编程

面向过程编程:
– 传统的C语言属于面向过程编程。面向过程解决问题的思路:通常是分析出解决问题所需要的步骤,然后用方法把这些步骤一步一步实现,最后一个一个依次调用方法来解决。
• 案例:ATM提款机终端系统(面向过程编程)
– 步骤1:输入密码,系统判断是否正确,如正确,进入取款界面,如错误,提示重新输入。
– 步骤2:进入取款界面,输入取款金额,系统判断余额是否足够,如不足,提示;如足够,点钞。
– 步骤3:吐出钞票,打印票据。
面向过程变成思想:
    系统以过程/方法为中心来组织
    过程间相互发送数据
    过程的执行动作与数据被明显的分离
    关注的焦点在于数据结构、算法和执行步骤
    过程通常难以被复用。
注*• 面向过程编程考虑的问题是程序运行的流程,主要是程序的算法,而数据只是在必要的时候插入到算法中间。
面向对象编程(OOP:Object-OrientedProgramming )
    – 从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。面向对象解决问题的思路:通常是把构成问题域的事务分解成各个对象,给对象赋予相应的属性和行为,通过多个对象的相互协调来解决问题。建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为 。支持面向对象编程是Java 语言的重要特点。

案例:ATM提款机终端系统(面向对象编程)
    – 根据要解决的问题,可以抽象出如下对象:
        • 客户
        • 银行卡
        • 现金
        • 票据
    • 这些对象没有先后顺序,共同作用才构成了整个系统。我们只要用代码设计出这几个类型的对象,然后让他们互相通信、传递消息就可以完成系统功能
面向对象编程思想
     系统以对象为中心来组织
    对象相互间发送消息
    相关的属性和行为被统一到对象上
    关注的焦点是对象及对象的职责
    使得系统构建更容易,易维护,易扩展,易复用
    解决问题的方式更接近人的思维方式,使人更容易理解
注*面向对象编程思想实际上就是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。

2、面向对象基本概念

抽象:
    从事物中舍弃个别的非本质特征,抽取共同的本质特征
    只考虑与问题域相关的信息,而忽略与问题域不相关的部分

对象:
    是系统中用来描述客观事物的一个实体。
    可以是有形的,也可以是无形的(如一个客户,一张银行卡,窗体中的一个按钮等等)
    对象是构成世界的一个独立单位
    具有自己的静态结构(属性)和动态行为(方法)
    每个对象有自己的唯一标识

类(class):
    类是一组具有相同属性和行为的对象的抽象,类的作用是用来创建对象,对象是类的一个实例
类和对象的关系
    抽象和具体的关系。
    每一个类在某一时刻都有零个或更多的实例, 类是生成对象的模板
    一个类定义了使用哪些数据来描述属性,每一个对象都有相应的属性值数据,一个类通过一系列方法来定义行为,这些方法能在每个对象中被激活

3、面向对象的主要特征

封装(encapsulation):
    所谓封装是把对象的属性和行为结合在一个独立的系统单位内部
    尽可能隐蔽对象的内部细节,只向外部提供接口
    降低对象间的耦合度
    封装的重要意义:
        使对象能够集中而完整地描述并对应一个具体事物
        体现了事物的相对独立性,使对象外部不能随意存取对象的内部数据
继承(inheritance):
    也称泛化,继承性是子类自动共享父类属性和方法的机制,在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入自己若干新的内容
    继承简化了人们对事物的认识和描述,有益于软件复用,是OO技术提高软件开发效率的重要原因之一
    是类之间的一种关系,一般类与特殊类之间的关系
    继承关系的语义:“is a kind of”

多态(polymorphism):
    指同一个命名可具有不同的语义
    OO方法中,常指在一般类中定义的属性或方法被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为,对于子类,可用不同的方法替代实现父类的服务的方法

4、类的定义

什么是类
    把相似的对象划归成一个类。
    在软件设计中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的属性(变量)和行为(方法)。

5、类的格式

    [类修饰符]  class  类名{
        类的成员
    }

    修饰符一般为public,也可以没有修饰符。
    注意类名的命名规范。类名一般大写
    类的成员:
        成员变量(属性)
        成员方法(方法)
        嵌套类
    通过“.”调用属性和方法

6、类的成员

成员变量
    [修饰符] 类型 属性名 = [默认值];
方法
    [修饰符] 返回值类型  方法名(参数列表){
        方法体
    }

二、对象的创建和使用
1、什么事对象
类(class) — 是对某一类事物的描述
对象(object) — 是实际存在的某类事物的个体,也称为实例(instance)
类是创建对象的模板,对象是类的实例。
2、创建对象

    类名 对象名 = new 构造器;

3、构造器



 1. 具有与类相同的名称
 2. 不含返回值类型
 3. 不能在方法中用return语句返回一个值
 4. 一般访问权限为public
    在一个类中,具有上述特征的方法就是构造器。

4、构造器的作用

 1. 完成对象的创建,即完成对象的实例化
 2. 一般使用构造器来完成对成员变量的初始化
 3. 没有明确的写出构造方法,在编译时编译器会发现该类没有构造器,这时编译器会自动的给这个类增加一个构造器,该构造器没有任何参数,我们称之为“默认的空构造器”
 4. 在Java中,每个类都至少要有一个构造器,如果程序员没有在类里定义构造器,系统会自动为这个类产生一个默认的访问权限为public且参数列表为空的构造器
 5. 一旦编程者为该类定义了构造器,系统就不再提供默认的构造器

5、对象创建的内存模型

在java中所有的变量、数组、对象都是分配在内存中的,根据变量类型的不同分配的内存也有所不同。Java中主要有3种类型的变量:
    局部变量:定义在方法体中的变量;或是方法的形参。
    实例变量:即类的属性,也是全局变量。
    静态变量:在类中声明为static 的属性。 
内存的类别
    栈stack:栈的存取速度比堆快,效率高。在栈内保存基本数据类型的局部变量和对象的引用值。
    堆heap :堆可以保存那些对空间要求较大的变量。如对象的属性和数组的元素。在堆内存中开辟空间,只能通过内存分配操作符号new,凡是出现关键字new的地方必定分配了一个堆内存。
    我们在实例化一个对象时,同时操作了栈内存和堆内存。在栈内保存对象的首地址,即 引用;在堆内存中保存了对象的属性。对对象的所有操作只能通过引用完成,一旦引用出栈释放没有任何引用指向该对象,对象就变成垃圾失效。

7、匿名对象

定义
    创建完对象,在调用该对象的方法时,也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫匿名对象
使用匿名对象的情况
    如果对一个对象只需要进行一次方法调用

8、垃圾回收机制

垃圾回收机制关键字:finalize()
Java的垃圾回收机制是自动的,它保证程序健壮的主要手段,避免了由于程序员忘记回收内存而引起的内存泄漏,同时也避免了回收内存带来的代码繁琐。
垃圾回收机制实际上是JVM内部运行的一个优先级比较低的后台线程,这种多线程的模式使得java 具有更好的性能,完全不用程序员参与。
垃圾回收机制仅仅作用于堆内存,于栈内存无关。
对于程序员来说,对象何时变成垃圾呢?
    对象的引用被赋值为null; Person p = new Person( ); p = null;
    一次性使用的匿名对象;  new Person( ).sayHello( );
    超出生命周期的;如:
        for( int I = 0; i< 100; i++){
            Person p = new Person( );
        } 
    这里,变量p 被实例化100次,每结束一次循环,变量p就超出生命周期,对象变为垃圾。

9、变量的作用域

类变量
    用static修饰的成员变量,它们在类被载入时创建,只要类存在,static变量就存在
实例变量
    类体中声明的成员变量,即非static的属性
局部变量
    方法体中声明的变量,方法中的参数,或代码块中声明的变量,都是局部变量
    局部变量只在方法调用的过程中有效,方法调用结束后失效

10、变量初始化的顺序

 1. 隐式赋予变量默认值
     成员变量
 3. 显式赋予初始值
 4. 通过构造器体赋予新值

三、this关键字
1、this 关键字

代表对象自身的引用
一个引用
指向调用该方法的当前对象
通常在类的方法定义中使用

2、用this 关键字的情况

方法中的变量与成员变量重名
在一个构造器中,调用其它重载的构造器
返回当前对象的引用

猜你喜欢

转载自blog.csdn.net/qq_37067955/article/details/81782360
今日推荐