本章内容
- 面向对象思想
- 类与对象及其使用
- 对象的内存图
- 成员变量和局部变量的区别
- 匿名对象
- 封装(private)
- this关键字
- 构造方法
- static关键字
面向对象思想概述
1,面向对象思想概述
- 面向对象是基于面向过程的编程思想面向对象思想的特点
面向对象思想的特点
- 是一种更符合我们思想习惯的思想
- 可以将复杂的事情简单化
- 将我们从执行这变成指挥者(角色发生了转换)
2,面向对象开发,设计,特征
- 面向对象的开发
就是不断的创建对象,使用对象,指挥对象做事情
- 面向对象的设计
管理和维护对象之间的关系
- 面向对象的特征
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
3,类与对象的关系
我们学习编程语言,就是为了模拟现实世界的事务,实现信息化。
- 现实事物的描述
- 属性:该事物的描述信息
- 行为:该事物能够做什么
- 我们学习Java的最基本单元是类,所以我们应该把一个事物用最基本的类来体现。
4,类与对象的关系
- 类:是一组相关的属性和行为的集合
- 对象:是该类事物的具体体现
- 举例:
- 类:学生
- 对象:班长是一个对象
5,类的定义
- 现实世界的事物
- 属性:人的身高,体重等
- 行为:人可以吃饭,学习等
- Java中用class描述事物也是如此
- 成员变量:事物的属性
- 成员方法:事物的行为
- 定义类其实就是定义类的成员(成员变量和成员方法)
- 学生类(举例):
- 如何定义
- 按照事物到类的过程一步步分析
- 如何使用
- 创建对象
- 类名 对象名 = new 类名();
- 对象.成员变量
- 对象.成员方法
- 创建对象
- 如何定义
6,对象内存图(???)
- 1个对象的内存图
- 一个对象的基本初始化过程
- 2个对象的内存图
- 方法的共用
- 3个对象的内存图
- 其中有两个引用指向同一个对象
7,成员变量和局部变量的区别
- 在类中的位置不同
- 成员变量:类中方法外
- 局部变量:方法内或方法的声明上
- 在内存中的位置不同
- 成员变量:堆内存中
- 局部变量:栈内存中
- 生命周期不同
- 成员变量:随着对象的存在而存在,随着对象的消失而消失
- 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
- 初始化值不同
- 成员变量:有默认的初始化值
- 局部变量:没有默认的初始化值,必须先定义,赋值,才能使用
8,形式参数
- 基本类型作为形式参数
- 引用类型作为形式参数
9,匿名对象(???)
- 匿名对象:就是没有名字的对象
- 是对象的一种简化表示形式
- 匿名对象的两种使用情况:
- 对象调用方法仅仅一次的时候
- 作为实际参数传递
10,封装的概述
- 封装的概述
- 隐藏对象的属性和实现细节,仅对外提供公共的访问方式
- 好处
- 隐藏实现细节,提供公共的访问方式
- 提高代码的复用性
- 提高安全性
- 封装原则
- 把不需要对外提供的内容都隐藏起来
- 把属性隐藏,提供公共方法对其访问
11,private关键字
- private关键字
- 是一个权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 被private修饰的成员只有在本类中才能被访问
- private最常见的应用
- 把成员变量用private修饰
- 提供对应的getXxx( )/setXxx( )方法
- 一个标准案例的使用
12,this关键字(???)
- this:代表所在类的对象引用
- 记住:
- 方法被那个对象调用,this就代表那个对象
- 什么时候使用this呢?
- 局部变量隐藏成员变量
- 其他用法后面和super一起讲解
13,构造方法
- 构造方法作用概述:给对象的数据进行初始化
- 构造方法的格式:
- 方法名与类名相同
- 没有返回值类型,连void都没有
- 没有具体的返回值
- 构造方法的注意事项
- 如果你不给出构造方法,系统就会默认构造方法
- 如果你提供了构造方法,系统将不再提供
- 构造方法也是可以重载的
14,类的成员方法
- 成员方法其实就是我们前面讲过的方法
- 方法的具体划分
- 根据返回值
- 有明确返回值的方法
- 返回值为void的方法
- 根据形式参数
- 无参方法
- 带参方法
- 根据返回值
15,一个基本类的标准代码写法
- 类
- 成员变量
- 构造方法
- 无参构造方法
- 带参构造方法
- 成员方法
- getXxx();
- serXxx();
- 给成员变量赋值的方式
- 无参构造方法+setXxx();
- 带参构造方法
16,一个基本累的标准代码案例
- 标准的学生类(讲解)
- 感觉调用getXxx(),输出学生的信息比较麻烦,加入一个方法show(),输出学生对象的成员变量信息
- 注意
- 目前的代码是为了练习的一种标准格式
- 给成员变量赋值有两种方式,可以只写一种
- 如果不单独获取数据,可以不写getXxx()方法
17,类的初始化过程
- Student student = new Student( );在内存中做了哪些事情?
- 加载Student.class文件进内存
- 在栈内存中为s开辟空间
- 在堆内存中为学生对象开辟空间
- 为学生对象的成员变量进行默认初始化
- 对学生对象的成员变量进行显示初始化
- 通过构造方法对学生对象的成员变量进行赋值
- 学生对象初始化完毕,把对象地址赋值给s变量
18,面向对象练习
19,static关键字
- 可以修饰成员变量和成员方法
- static关键字特点
- 随着类的加载而加载
- 优先于对象存在
- 被类的所有对象共享(这也是我们判断是否使用static关键字的条件)
- 可以通过类名调用
- static关键字的注意事项
- 在静态方法中式没有this关键字的
- 静态方法中只能访问静态的成员变量和静态的成员方法
20,静态的内存图
- 静态的内容存在方法区的静态区
21,静态变量和成员变量的区别
- 所属不同
- 静态变量属于类,又被称为类变量
- 成员变量属于对象,又被称为实例变量(对象变量)
- 内存中的位置不同
- 静态变量存储与方法区的静态区
- 成员变量随着对象的创建而存在,随着对象的消失而消失
- 内存出现的时间不同
- 静态变量随着类的加载而加载,随着类的消失而消失
- 成员变量随着对象的创建而存在,随着对象的消失而消失
- 调用不同
- 静态变量可以通过类名调用,也可以通过对象调用
- 成员变量只能通过对象调用
22,main方法是静态的
- public static void main(String[] args){}
- public被jvm调用,访问权限足够大
- static 被jvm调用,不用创建对象,直接类名访问
- void 被jvm调用,不需要给jvm返回值
- main一个通用的名字,不是关键字,但是被jvm识别
- String[] args 以前用于接收键盘录入的
23,制作帮助文档
- 制作工具类
- 制作帮助文档(API)
- javadoc -d 目录 -author -version ArrayTool.java
24,如何使用帮助文档
25,通过API使用Math类
26,代码块