第一章 基本概念
一、主要内容
1-1 面向对象简介
1-2 类与对象的定义
1-3 类与对象的基本使用
1-4 对象内存分析
1-5 引用传递初步
二、分块介绍
2-1 面向对象简介
软件开发模式包括:面向过程 与 面向对象。
面向过程指的是 只完成自己所需要的操作,但是这种设计缺乏可维护性。
面向对象本质来讲 是一种组件化(模块化)设计,且便于代码的局部维护。但是,模块化设计的要求规范比较多。也就是说,模块化设计最为重要的是标准,以及整个项目的把控。
面向对象的特点:
封装性:保护内部的操作对外部不可见;
继承性:相当于一代代的传承;
多态性:在一个范围内定义的改变;
面向对象开发的三个阶段:
OOA:面向对象分析;
OOD:面向对象设计;
OOP:面向对象编程;
2-2 类与对象的定义
真实存在的可以使用的就是对象,而定义概念的就是类。例如:人是一个类,而具体的人,如张三,李四等就属于对象。
2-3 类与对象的基本使用
定义类可以使用class关键字来描述,且类主要由 属性(变量) 与 方法 组成。类的定义案例如下:
class Person{ // 类名称:Person String name; // 属性:name int age; //属性: age public void tell(){ // 方法:tell() System.out.println("姓名:"+name+"年龄:"+age); } } |
类需要通过对象来调用。调用案例如下:
public class mainDemo{ // 定义对象方法1 // 定义对象方法2 // 给属性传值 per.name = "张三"; } |
2-4 对象内存分析
public class mainDemo{ // 定义对象方法1 // 给属性传值 per.name = "张三"; } |
上述代码的内存分析如下:
public class mainDemo{ // 定义对象方法1 per = new Person(); // 给属性传值 per.name = "张三"; } |
上述代码的内存分析如下:
public class mainDemo{ // 定义对象方法1 Person perB = new Person(); // 给属性传值 perA.name = "张三"; perB.name = "李四"; } |
上述代码的内存分析如下:
注意:
public class mainDemo{ // 定义对象方法1 // 给属性传值 per.name = "张三"; } |
上述代码中的per没有指向对内存空间,因此,编译通过,但执行的时候报错“NoPointerException”错误。
2-5 引用传递初步
代码1:
public class mainDemo{ // 定义对象方法1 // 给属性传值 perA.name = "张三"; } |
代码1的引用传递关系图:
代码2:
public class mainDemo{ // 定义对象方法1 // 给属性传值 perA.name = "张三"; perB.age = 10; perB = perA; perB.name = "赵六"; } |
代码2的引用传递关系图(perB之前指向的堆内存空间目前无任何栈内存指向,因此变为垃圾空间。在一定时间内,会被GC(Garbage Collector)回收):