本文目录
第6章 面向对象入门
编程语言发展史:
- 面向机器
- 汇编语言
- 面向过程
- 面向对象
- 面向切面
- 面向服务
1. 面向过程和面向对象
面向过程(OPP
,Procedure Oriented Programming):是一种以事物为中心的编程思想。主要关注“怎么做”,即完成任务的具体细节。
关注功能行为 —— 执行者
行为1
行为2
行为3
面向对象(OOP
,Object Oriented Programming):是一种以对象为基础的编程思想。主要关注“谁来做”,即完成任务的对象。
行为是事物所具备的功能,我们使用事物来执行 —— 指挥者
事物.行为1
事物.行为2
事物.行为3
面向切面(AOP
,Aspect Oriented Programming):基于 OOP 延伸出来的编程思想。主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
Java 对象分为三类:
- JDK 中提供的类
- 开发人员自定义的类
- 引入第三方的类
2. 类和对象
类是一种描述,描述的有什么,能做什么,对同一类事物的公共特征的描述
有什么:类的属性,类的变量
做什么:类的行为,类的方法
对象是给描述赋值,同一类事物中具体的那一个,一个类有多个对象
找对象做事情
2.1 类的组成
类的组成:
- 属性:成员变量
- 行为:成员方法
2.2 类的定义
全面定义类
package 包名;
[修饰符] class 类名 [extends 父类] [implements 接口名] {
成员变量; // 一般为基本数据类型,也可以是引用类型
构造方法;
成员方法;
}
2.3 对象的使用
对象的创建:变量的创建,分配内存空间
对象属性的使用与赋值:
- 使用:对象名.属性
- 赋值:对象名.属性 = 值
对象方法的使用:对象名.方法名()
2.4 对象的内存模型
1.堆栈模型
- 对象:引用类型变量,即容器
- 栈:存放的是实例化后对象的堆地址
- 堆:实例化后的对象,new 时在堆里为对象开辟了一块空间
2.变量比较
- ==
- 基本数据类型:比较值
- 引用类型:比较地址
- equals
- 引用类型:比较地址
- String 类:比较值(String 类中的 equals() 被重写了)
3. 对象的属性
3.1 变量的作用域
变量声明的位置决定了变量的作用域。
Java 的变量作用域一共有四种,分别是类级、对象实例级、方法级、块级。
- 类级变量又称全局级变量或静态变量,需要使用 static 关键字修饰,类级变量在类定义后就已经存在,占用内存空间,可以通过类名来访问,不需要实例化。
- 对象实例级变量就是成员变量,实例化后才会分配内存空间,才能访问。
- 方法级变量就是在方法内部定义的变量。
- 块级变量就是定义在一个块内部的变量,变量的生存周期就是这个块,出了这个块就消失了,比如 if、for 语句的块,还有 static 块。
3.2 成员变量(全局变量)和局部变量
成员变量:属于对象,位于堆内存中
局部变量:属于方法,位于栈内存中
二者的区别:
-
-
在同一个方法中不允许有同名的局部变量,不同方法中,可以有
-
在同一个类中不允许有同名的成员变量,不同类中,可以有
-
变量同名时,局部变量具有更高的优先级
成员变量的默认初始值:
4. 对象的行为
4.1 方法调用
方法之间运行互相调用,不需要知道方法的具体实现,提高了效率
调用规则:
- 同一个类中,非 mian 方法之间可以之间相互直接调用
- 不同的类中,使用 对象名.方法名() 间接调用
4.2 方法参数传递
- 基本数据类型:数据拷贝
- 引用类型:地址的引用
- 如果传递的是引用类型,方法内部对于该引用的修改会影响到出方法后引用的值
- 数组类型:地址的引用
5. 包(package)
5.1 包的概念
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
- 包 - 解决类的同名问题
5.2 包的命名规范
- 包名由小写字母组成,不能以圆点开头或结尾
- 自己设定的包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名。如:
package net.javagroup.mypackage
; - 自己设定的包名部分依不同机构各自内部的规范不同而不同。如:
package net.javagroup.research.powerproject
;
5.3 包的导入
为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用 “import” 语句可完成此功能。
在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:
import package1[.package2…].(classname|*);
如果在一个包中,一个类想要使用本包中的另一个类,那么该包名可以省略。
5.4 JavaDoc 的生成
两种生成方式:
- 通过命令行使用 javadoc 生成 Javadoc 文档
- 通过 IDE 自动生成
认真、沉着做事,每天进步一小点!!!