03java面向对象思想

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

J2SE面向对象思想

1面向对象的设计思想跟面向过程设计思想的区别

复用的层次上有区别

面向对象的设计思想:考虑的是

1.问题域有哪些对象和类

2.类和对象应该具有哪些方法和属性

3.对象跟对象,类跟类之间的关系

不关注问题域的实现的过程和步骤。尽量接近人的思维方式。

面向过程的设计思想:要了解整个执行过程,关注的问题域解决的过程和步骤。

2对象和类的概念

2.1 对象:用计算机语言对问题域中事物的描述,对象通过attribute(静态)和method(动

态)来区分事物

2.2 类:用来描述同一类形的对象的一个抽象概念。类定义了这一类对象所因具有的静

态和动态属性

2.3 类可以看成对象的一个模板(template),对象可以看成一个类的具体实例。

3 类(对象)之间的关系

关联关系:一个类里面的方法的参数往往是另外一个类。这个是最弱的关系。

继承关系:XX is a YY的关系。表明XX继承于YY。比如:金丝猴是一种动物,这就是继承关系。

聚合关系:XX is a part of YY。脑袋是人的一部分,手是人的一部分。聚集(松耦合):队长跟队的关系。组合:两者是密不可分的一部分。脑袋属于人,不可能脑

袋既是属于一个人也属于那个人。

实现关系:接口跟实现类的关系。比如去上海这个类,对于走这个方法,可以有很多走的方法,开车,乘车等具体的实现方法。

4为什么使用面向对象:Reuseable、Extensibility、维护和替换更加方便、……

面向组件的编程:比对象更高层次的抽象(二进制级别,其他语言写的组件也能给Java 复用) EJB、Web Service、CORBA、COM、……。

5成员变量和局部变量

5.1变量使用的一般过程:声明--->赋值--->使用

5.2成员变量Java默认有初始化值。如:char为’\u0000’。局部变量没有默认的初始化

值。

5.3引用:除了基本类型之外的变量类型都是引用类型。本质是C或C++的指针

内存分析:堆内存是动态分配内存的。因为对象的所占有的内存空间无法确定,所

以要使用堆内存在运行期间动态分配。

int和String类型的内存分配情况:

6对象的创建和使用

必须使用new关键字创建对象

同一类的每个对象有不同的成员变量存储空间

同一类的每个对象共享该类的方法

7类定义的内存的分析

局部变量声明在stack segment,对象分配在heap segment。

8 构造方法

使用new构造方法创建一个新对象

构造方法定义在Java类中的一个用来初始化对象的方法

构造方法与类名同名且没有返回值

8创建对象的内存分析

解释:所有的局部变量都是栈内存的,这样变量tom即在stack中,里面存放了指向堆内存地址的信息,标识为tom。调用构造方法,该方法是在code segment中,两个变量_id跟_age也都是局部变量。所以也是在stack空间中。当代码运行期执行new Person(1,25) 时,tom所标识的地址空间指向heap空间中的一片区域,同时_id,_age把值传给在heap 空间中id,age。分别为1和25。当方法调用完成之后栈内存为其分配的所有的空间全部消失。至此对象创建完成。

10 系统默认的构造方法

Person person = new Person()

但如果已经定义了构造方法,则编译器不再添加默认构造方法。非静态方法是针对每个对象进行调用

11 例子:内存分析

别指向堆内存中的相对应的区域。而date是基本类型,其值直接放在栈内存空间中。

形参值为9

当执行change1时,方法的形参i,改变值为1234。

补充:上面BirthDate d1=new BirthDate(7,7,1970);这里其实也是有构造方法声明申请空间和

销毁变量的过程。如下:局部变量d1在栈内存分配空间,内部存放指向堆内存中的一个地址。调用构造方法时,在栈内存空间中存在三个变量:day,moth,year。此时在堆内存实参进行赋值即变为:day:7,month:7,year:2007。当方法执行完之后与构造方法相关的内存空间

全部消失,d1指向堆内存空间中的内存区域。

形参所申请的内存空间消失后。没有达到修改i之目的。

的一个引用。

当执行b=new BirthDate(22,2,2004)时,b重新指向在堆内存空间中开辟的新的birthDate对象

当change2中的方法执行完成之后,堆内存中分配的空间失去了b的引用,变成垃圾。等待垃圾收集器回收。同时在栈内存中分配的关于所以于change2相关的变量空间全部消失。

此时d1空间中的值并没有改变。

区域。

当执行b.setDay(22)时,即直接对b所指向的堆内存的区域进行操作。所以使得day值发生改变为22。

如果有返回值,其实也是在栈内存中分配一块临时的存放返回值的内存。当方法调用完成之后自动消失。同局部变量一样。

在堆内存中的变量,如果没有任何引用指向它时,会被垃圾回收器回收。

12 方法的Override和Overwiter

一个类里面定义相同的方法名,但是参数不同(类型或个数)。如果只是返回值不同则是方法重名,重名是不允许。因为使用调用这样的语句:max(a,b)时候就会发生问题。因为方法可能是int max(int a,int b);void max(int a,int b)。编译器无法确定要调用哪个方法,所以是不允许。

构造方法可以重载。

13 this关键字

this值是当前对象的引用,使用该方法的对象的引用。处理成员变量跟参数重名的情况。

以上代码的内存分析流程:

1.在main方法里面创建对象的过程

首先创建一个指向heap内存区域的引用leaf,同时调用构造方法Leaf(int i)。在堆

内存开辟空间,形参i。然后行参获得了实参的值100,经过形参的值传递,使得

在heap内存空间中使得成员变量的值为100。对象构造完成后,与构造方法相关

的一切在栈内存空间的变量消失。

2.this在heap里面是指向当前对象的一个引用。

3.leaf.increment()。执行increment时在栈内存空间中分配一个形参i,当方法结束后

与之相关的在栈内存空间中的变量消失,但是此时有返回参数,返回参数是也是

在栈内存空间中开辟一片区域,然后

相关文档
最新文档