面向对象基础

1. 面向过程和面向对象

面向过程:面向过程适合简单、不需要协作的事务。会需要列出步骤一步一步去执行。

面向对象:面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。

这两者并不对立,相辅相成。

面向对象和面向过程的总结

1、都是解决问题的思维方式,都是代码组织的方式。 

2、解决简单问题可以使用面向过程

3、解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。

 2. 对象的进化史


3.对象和类的概念

对象:将相关数据和相关方法封装到一个独立的实体,它会包含关于这个实体的一切的数据,属性以及方法。

类:我们叫做class。 对象:我们叫做Object,instance(实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。

总结

  1.对象是具体的事物;类是对对象的抽象;

  2.类可以看成一类对象的模板,对象可以看成该类的一个具体实例。

  3.类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性、方法。


4.第一个类的定义

类的组成:

属性field、方法method、构造器constructor

实际操作:



5.属性

成员变量的默认值

注意:引用类型默认值为null

6.方法

方法用于定义该类或该类实例的行为特征和功能实现。

方法是类和对象行为特征的抽象。

方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。

面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。


这里的display和watchdoor是属于方法,而后面的属性和方法一起描述了这个类的特征。

7.一个典型类的定义和UML图

实际操作:

                                           UML图  

8.面向对象的内存分析


Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area。

栈的特点如下:

  1. 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)

  2. JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)

  3. 栈属于线程私有,不能实现线程间的共享!

  4. 栈的存储特性是“先进后出,后进先出”

  5. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!

堆的特点如下:

  1. 堆用于存储创建好的对象和数组(数组也是对象)

  2. JVM只有一个堆,被所有线程共享

  3. 堆是一个不连续的内存空间,分配灵活,速度慢!

方法区(又叫静态区)特点如下:

  1. JVM只有一个方法区,被所有线程共享!

  2. 方法区实际也是堆,只是用于存储类、常量相关的信息!

  3. 用来存放程序中永远是不变或唯一的内容。(类信息【Class对象】、静态变量、字符串常量等)

实际操作:

           

9.构造方法

     构造器也叫构造方法(constructor),用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。

声明格式:

要点:

  1. 通过new关键字调用

  2. 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。

  3. 如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加!

  4. 构造器的方法名必须和类名一致



10.this关键字

创建一个对象分为如下四步:

1. 分配对象空间,并将对象成员变量初始化为0或空

2. 执行属性值的显示初始化

3. 执行构造方法

4. 返回对象的地址给相关的变量

this的本质就是“创建好的对象的地址”! 由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象” 。

this最常的用法:

  1.  在程序中产生二义性之处,应使用this来指明当前对象;普通方法中,this总是指向调用该方法的对象。构造方法中,this总是指向正要初始化的对象。

  2. 使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。

  3. this不能用于static方法中。

实际操作:

注意:这里的this主要被用来区分局部变量和成员变量。


创建一个对象分为如下四步

你可能感兴趣的:(面向对象基础)