面向过程和面向对象简介 一 、面向过程与面向对象的区别: 前者是一种谓语和宾语的关系;后者是一种主语和谓语的关系 。 二、面向对象的三个特征: 封装 继承 多态 三、类与对象: 对象又称作实例,是实际存在的该类事物的每个个体。类是对某一类事物的描述,是抽象的、概念上的 定义。 面向对象的设计的重点是类的设计。 四、对象的比较: 1 “= =”运算符与equals()方法的区别: 前者辨别实质是否相等;后者辨别长相是否相等。 五、 实现类的封装性: 1不能让外面的类随意修改一个类的成员变量; 2在定义一个类的成员(包括变量和方法),使用private关键字说明这个成员的访问权限,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用; 3为实现封装性,常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有 读取和赋值操作,我们一般定义两个方法来实现这两种操作,即:getXxx()与setXxx(); 4一个类就是一个模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其他的一切内容。再进行程序设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。 六、构造函数的定义与作用: 1、 特征:名称与类相同;不含返回值;不能在方法中用return返回一个值注意:构造方法里不含返回值的概念是不同与void的,在定义构造方法时加了void,结果这个方法就不再被自动调用了。 2作用:当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。 七、若类中已定义了一个构造方法,编译器就不再自动产生类似public Person(){ }的构造方法。 八、this引用句柄的应用: 1、 类的成员名和对其进行赋值的成员方法的形参变量同名时,使用this便于理解; 2、 假设我们有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造方法要接收一个代表其所在容器的参数。 3、 构造方法是在产生对象时被Java系统自动调用的,我们不能在程序中象调用其他方法一样去调用构造方法。不是用构造方法名,而是用this的形式,根据其中的参数列表,选择相应的构造方法。 九 、 垃圾回收过程分析:java中的finalize()方法;System.gc的作用。 Finalize()的调用是在无用对象被回收前发生的。 一○、 static 静态方法: 1、在静态方法中只能直接调用同类中其他的静态成员,而不能直接访问类中的非静态成员。原因是对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象; 2、 静态方法不能以任何方式引用this和super关键字; 3、main()方法是静态的,因此,JVM在执行main方法时不创建main方法所在的类的实例对象,因此在main()方法中,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。 一一、 JVM在程序执行时,只有在调用其他类的时候,才加载这个类并将其初始化(即将构造方法及静态变量进行加载并初始化。 一二、单态设计模式:采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只能产生严格取得其对象实例的方法。若我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类的内部仍可以产生该类的对象。 一三、 内部类: 1、在类中直接定义的内部类??*嵌套类可直接访问嵌套他的类的成员,包括private成员,但嵌套类的成员却不能被嵌套它的类直接访问; * 在内部类对象保存了一个对外部类对象的引用,当内部类的成员方法中访问某一变量时,若在该方法和内部类中都没有定义过这个变量,内部类中对this 的引用会被传递给那个外部类对象的引用; * 若用 static 修饰一个外部类,这个类就相当于是一个外部定义的类,所以 static 的内部类中可声明static 成员,但非static 的内部类中的成员是不能声明为 static 的,static 的内部类不能再使用外层封装类的非 static 的成员变量。 例:若函数的局部变量,内部类的成员变量,外部类的成员变量重名,则应该按下面的程序代码所使用的方式来明确指出我们真正要访问的变量。 public class Outer { private int size; public class inner { private int size; public void doStuff(int size) { size++; //应用doStuff函数的形参 this.size++; //引用Inner类的成员变量 Outer.this.size++; // 引用Outer类的成员变量 } } } 2、在方法中定义的内部类:在方法中定义的内部类只能访问方法中的final 类型的局部变量,用final 定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期。3、在内部类中的方法可以访问外部类的成员变量,而外部类的方法不能直接访问内部类的成员变量,若要访问,除非在内部类中再定义一个构造方法,这个构造方法的参数是外部类。 一四、在一个类中定义的局部变量,编译器可以对他初始化,但在一个方法中定义的局部变量,编译器不对它初始化。 -- 十指互扣 一生相守 特征 ⑴对象唯一性。 每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。 ⑵抽象性。 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。 ⑶继承性。 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。 继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。 在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。 在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。 多重继承,JAVA、VB、NET、Objective-C均仅支持单继承,注意在C++多重继承时,需小心二义性。 在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重用性。 采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。 ⑷多态性(多形性) 多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。 多态性允许每个对象以适合自身的方式去响应共同的消息。 多态性增强了软件的灵活性和重用性。 要素 ⑴抽象。 抽象是指强调实体的本质、内在的属性。在系统开发中,抽象指的是在决定如何实现对象之前的对象的意义和行为。使用抽象可以尽可能避免过早考虑一些细节。 类实现了对象的数据(即状态)和行为的抽象。 ⑵封装性(信息隐藏)。 封装性是保证软件部件具有优良的模块性的基础。 面向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。 对象是封装的最基本单位。封装防止了程序相互依赖性而带来的变动影响。面向对象的封装比传统语言的封装更为清晰、更为有力。 ⑶共享性 面向对象技术在不同级别上促进了共享 同一类中的共享。同一类中的对象有着相同数据结构。这些对象之间是结构、行为特征的共享关系。 在同一应用中共享。在同一应用的类层次结构中,存在继承关系的各相似子类中,存在数据结构和行为的继承,使各相似子类共享共同的结构和行为。使用继承来实现代码的共享,这也是面向对象的主要优点之一。 在不同应用中共享。面向对象不仅允许在同一应用中共享信息,而且为未来目标的可重用设计准备了条件。通过类库这种机制和结构来实现不同应用中的信息共享。 ⒋强调对象结构而不是程序结构