面向对象之类与对象
面向过程
只考虑事务的发展过程
如:将大象装进冰箱里
1,开冰箱门
2,放大象
3,关冰箱门
面向对象
1,先考虑事物中存在的对象
2,建立对象与对象的关系
如:将大象装进冰箱里
1,在事物中存在两个对象,分别是大象与冰箱
2,大象被放在冰箱里
1,开冰箱门
2,放大象
3,关冰箱门
对象
真实存在的事物称为对象
类
概念:多个对象抽取其共同点形成的概念
注意:
生活中:先有对象后有类
代码中:先有类后有对象
类与对象的关系
1,一个类可以有多个对象
2,多个对象可以属于同一个类
类的组成
属性
概念:描述事物的静态特征
方法:
概念:描述事物的动态特征(行为)
构造函数:
作用:创建对象的特殊方法
类的定义(*)
访问权限修饰符 class 类名{
属性
作用:描述事物的静态特征
别名:成员变量
定义位置:
类中方法以外
语法格式:
访问权限修饰符 数据类型 属性名;
注意:有默认值,基本数据类型默认值为0,引用数据类型默认值为null
方法
作用:描述事物动态特征(行为)
别名:函数,成员函数,成员方法
定义位置:
类中方法以外
语法格式:
访问权限修饰符 返回值类型 方法名(形参列表){
方法体
}
构造函数
作用:创建该类对象的特殊方法
别名:构造方法
定义位置:
类中方法以外
语法格式:
访问权限修饰符 构造函数名(形参列表){
方法体
}
注意:
1,构造函数没有返回值类型,也没有返回值
2,构造函数名必须与所在的类名一致
3,如果一个类中没构造函数,系统将为其提供一个无参构造函数
4,如果一个类中有构造函数,那么系统将不会为其提供无参构造函数
}
如何创建对象(*)
声明的语法:
数据类型 对象名;
注意:引用数据类型的类名就是他的数据类型
创建的语法:
对象名 = new 构造函数名(实参列表);
声明并创建的语法:
类名 对象名 = new 类名() ;
对象名.成员变量名 = 值; (跟成员变量类型一致);
对象名.方法名() ;调用方法,展示这个具体事物有什么功能
对象调用属性(*)
获取属性值
语法:
对象名.属性名
设置属性值
语法:
对象名.属性名=值;
对象调用方法(*)
语法:
对象名.方法名(实参列表);
this关键字(*)
概念:谁调用this所在的方法,this就代表谁
使用:
场景1:
在本类方法中,调用本类其他属性或方法,此时就可以忽略this关键字不写
场景2:
当局部变量与属性相同时,系统优先使用局部变量,如果想区分可以使用this关键字
this.变量名 属性
变量名 局部变量(在方法中声明的变量,包括形参)
场景3:
在本类构造函数中调用本类其他构造函数
注意
1,不能形成递归
2,只能在当前构造函数首行使用
面试题
请问在创建对象时,做了哪些事?步骤是什么?
1,使用new关键字在堆内存中开辟一片空间
2,给队象的属性赋初始值
3,执行调用的构造函数中的代码
4,将堆中的地址,赋值给栈中的引用
图解
创建一个对象内存图解
![](https://i-blog.csdnimg.cn/blog_migrate/cece989ce94070bef9ac502f65b79447.png)
创建多个对象图解
![](https://i-blog.csdnimg.cn/blog_migrate/71021cd75c4347c9349ca8cf543a9b48.png)