@[TOC](面向对象初步)
# 面向对象引入
计算机除了存储八大基本数据类型,还要存储其他数据,比如一个人,一件事,一个视频,一张图片等等
Java在模拟现实过程中提供了类
现实生活中如何描述一个事物:
JAVA | 现实生活
--------|-------------
属性 | 该事物的特征描述
方法 | 该事物的动作行为
举例栗子:表示一只小狗
属性:狗的品种,颜色,体重等
方法:小狗会叫,摇尾巴,跳
**Java语言的基本单位是类,用类来描述事物。**
## 类的定义
```java
[访问权限控制符] class 类名{
属性/成员变量/字段
成员方法
}
```
## 对类和对象的理解
### 对类的理解
1.类是用来描述现实事物的,是Java语言的最基本单位
2.类是抽象的,是由多个对象抽象想象的部分而来
3.类可以理解为一个模板,数属性和行为的集合,可以通过类的模板创建具体的对象
4.Java使用class来描述一个类
5.类的本质用来组织代码(方法归类),封装数据的(理解提高成员变量的安全性)。
### 对对象的理解
1.对象是客观存在的,万事万物皆是对象
2.对象是在类的基础上创建的
3.对象又称为 实例/引用/变量/对象
创建对象的格式:
```java
类名 对象名 = new 类名();
```
访问对象:
对象名.成员变量
对象名.成员方法
# 成员变量和局部变量的区别
1. 定义的位置不同
成员变量: 类体以内,方法体以外
局部变量: 方法的声明上,或者方法体内
2. 在内存位置不同
成员变量: 在堆区分配内存
局部变量: 在栈区分配内存
3. 初始化值不同
成员变量: 系统赋予初始值
```java
byte short int long 0
float double 0.0
boolean false
char \u0000
引用类型 null
```
局部变量: 方法的声明上,或者方法体内
       没有默认值,必须先声明再赋值再使用
4. 变量生命周期不同
 生命周期: 变量从开始创建到销毁的全过程
 成员变量: 随着对象的创建而创建,随着垃圾回收器回收对象的时候销毁
 局部变量: 随着方法的调用而创建,随着方法调用结束而销毁
5. 当成员变量个局部变量重名时,局部变量优先,就近原则;此时要访问成员变量要使用this关键字
# 匿名对象
概念:没有名字的对象,本质还是一个对象
特点:
1. 既然是对象,同样可以访问成员
2. 匿名对象只能够使用一次,如果需要使用多次,必须使用变量接收
3. 匿名对象一旦使用一次完毕,立刻成为垃圾对象,等待垃圾回收期在空闲的时候回收,节约内存资源
4. 匿名对象在Java里一般用于访问一次的情况,简化代码,在Android里节约内存资源
# 垃圾对象
概念:没有地址引用的对象称为垃圾对象
成为垃圾对象的情况:
1. 当指向某个堆区的空间的对象被赋值为null
2. 匿名对象第一次使用完毕
3. 对象所在的方法调用完毕
4. 对象被重新赋值新的地址
# this关键字
## 概念和原理
当局部变量和成员变量重名的时候,可以考虑使用this来区分
this代表当前对象,详细原理看内存图![在这里插入图片描述](https://img-blog.csdnimg.cn/20190418172320521.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hjd2Rk,size_16,color_FFFFFF,t_70)
## this的特点
1. 成员变量和局部变量重名的时候使用this
2. 创建任何一个对象都会创建一个this引用和对象指向同一个堆区的空间
3. this代表当前对象,谁调用了this就是指得谁
4. this只能够出现在类的内部
5. this的设计代表现实生活中代词的概念 ("我的")
6. 默认访问类的成员都可以使用this来访问,如果访问成员没有书写this,默认系统会加上this
# 构造方法
构造方法可以快速的创建对象,省去一步步通过set方法为对象属性赋值的过程。它本身也是一个特殊的方法,可以搭配new关键字,快速给对象分配空间。
格式:
```java
[访问权限控制符] 方法名(参数列表){
方法体
}
```
(注意:构造方法的方法名必须与类名保持一致,包括大小写)
## 构造方法的特点
1. 构造方法没有返回值,连void都没有
2. 构造方法也是方法,存在方法重载
3. 构造方法是用来给成员快速初始化的
4. 构造方法方法名必须和类名保持一致
## 构造方法的注意事项
1. 如果我们没有书写构造方法,系统会帮我们书写一个无参构造方法
2. 如果你一旦书写了一个带参构造方法,就会覆盖系统的无参构造方法
因此,我们最好养成习惯,每次书写一个bean的时候,都写上无参构造方法
这样做的好处:
1. 无参构造方法能够初始化默认成员的值
2. 反射中调用的就是无参构造方法,很多框架中都会利用反射技术创建对象,反射大部分都是依赖无参构造方法
# 类的组成
综上,类的组成如下:
```java
class 类{
成员变量
成员方法
普通方法
get/set方法
构造方法
构造方法可以重载
}
```
网友评论