OOP:面向对象编程
OOP三大特征(记住):
封装、继承、多态
面向对象的引入:
如果不同class(类)中,存在相同的函数(功能),在开发中这种编码方式会降低程序的编码效率、复用性降低。
之前函数,是把功能提取出来,是从class(类)中提取到函数;
为了解决编码效率低、复用性差:
把相同的功能(函数)提取出来,使用一个新的class来封装;
怎么去用封装好的Tool类:
创建实例的格式:
Tool t(实例名)=new Tool();
t.getMax(num1,num2);
"t"表示就是t下的 或者 t的功能或者函数
面向过程
过程:一个函数中的功能体的过程
吃饭[买菜==》洗菜==》切菜==》做菜==》吃]
它是一种解决问题的方法;
它就是我们书写的函数(功能)。
面向对象
对象:一个实体或者个体,指得是生活中的某个事物或者某类事物。
面对具体封装了函数的对象(对象在程序中就是类[class])
面向对象其实是一种解决问题的方案。
面向对象是基于面向过程的;
面向对象举例:
组装电脑
面向过程:解决这个问题
1、去网上查询硬件参数和价格
2、去电脑城中的商家咨询价格
3、赛选满意商家,和它谈价格
4、监空整哥电脑的安装流程
5、付钱,电脑扛回家
面向对象:解决这个问题
1、找一个懂电脑硬件人
2、告诉他价格和配置
3、给他钱,让他帮你买
4、等电脑回来
面向过程VS面向对象
1、他都是解决问题的方法
面向对象和面向过程了两个概念是不冲突。面向对象是基于面向过程的;
面向过程:
程序中组成的单位:函数。由若干函数组成。
面向对象:
程序中组成但是:类(class)
对象在需求中使用(伪代码):
案例1:人开门
名词:人 和 门
人{
//特征
姓名;
性别;
//功能
开门(门){
门.开门();
}
}
门{
//特征
门锁;
//功能
开门(){
}
关门(){
}
}
调用方法:
人 r=new 人();
门 m=new 门();
r.开门(m);
案例2:
老师用电脑上课
名词提取:电脑 老师
电脑{
//特征
CUP;
内存;
//功能
开机(){}
运行(){}
关机(){}
}
老师{
//特征
姓名;
性别;
//功能
上课(电脑){
电脑.开机();
电脑.运行();
}
}
电脑 d=new 电脑();
老师 l=new 老师();
l.上课(d);
对象在代码中的体现:
成员变量:类中成员
使用new 关键字创建类的对象
创建格式: 类名 对象名(实例名)=new 类名();
使用 对象名.成员变量(成员函数)去访问类中属性或方法
对象在内存中图解:
在创建对象(new的时候),JVM在开辟完对象的堆内存空间后,会把所有的成员变量加载到所开辟的空间下,然后会对所有的
成员变量进行默认初始化;
String null
int 0
float 0.0
double 0.0
char 空
boolean flase
类 和 对象的关系:
1、类就是描述事物;对象是所描述事物的实例(使用实例名去访问类中成员)
2、现有类的描述(class),后有描述类的对象(类名 实例名=new 类名();)
成员变量 和 局部变量区别
成员变量(属性):定义类中的变量
局部变量:定义在函数中或者语句中(for if)的变量
区别:
定义上:
局部变量定义在函数内部,属于函数;
成员变量定义在类的内务,属于类的;
内存的存储上:
局部变量随着函数的入栈而存在,随着函数的出栈而销毁,存储在栈内存中
成员变量是随着对象的创建而存在,随着对象被标记为垃圾而销毁,存储在堆内存中。
使用上:
局部变量直接使用;
成员变量必须在对象创建完成之后,使用对象去调用;
初始值:
局部变量在定义时候必须要指定初始值;
成员变量可以不指定初始值,随着对象的创建会有初始值;
生命周期:
局部变量的生命周期比较短
成员变量是随着对象的创建到对象的销毁来计算生命周期的
JAVA的三大特征:
封装、继承、多态
封装
其实就是包装的意思:
它会把事物的部分的细节给隐藏
封装的体现:
1、函数:封装了一些功能的代码;
2、类: