面向过程思想是一种解决问题的思想/思路,该思路更多的关注功能的实现过程,对实现的细节更加了解。
使用这种思想解决问题,我们关心的是事情中有哪些步骤, 然后一步步进行具体实现;
使用面向过程写程序,首先要分析需求由那些功能组成,然后写函数实现各个功能,最后根据需求依次调用各个函数;在这个过程中,开发者需要参与到实现的每一步中,就是劳动者。
需求简单时,程序设计简单明了,结构清晰;
需求复杂时,开发和维护困难;
不利于二次开发,各功能函数之间耦合度高,不利于代码复用;
在Java中的体现:定义函数,关注所有的细节/经过
面向过程开发,代码更多的集中在一个文件中
面向对象思想也是一种解决问题的思想/思路, 更多的是关注代码复用问题, 追求低耦合高内聚;
使用这种思想解决问题,我们关心的是事情的整体,功能实现需要的参与者;
使用这种思想写程序,开发者更多的是关心系统的整体性(高级开发),功能的可替换性(中级开发),代码的可复用性(初级开发)。
(初级开发)首先分析需求有那些功能,然后找有没有已经实现好功能的类,如果有,就直接拿来,创建它的对象,通过对象调用功能;如果没有,就需要根据系统原型/类图设计开发类,然后在类中书写实现功能的函数【面向过程】,然后创建这个类的对象,通过对象调用功能;
在这种过程中,开发者更多的是在调用其他已经写好的类,是功能的调用和指挥者。
在JAVA中,封装、继承、多态是面向对象(OOD)重要体现。
核心 是 代码复用性
使用此编程思想开发程序,使我们程序员从劳动者变成了一个指挥者
优点:适合开发复杂的功能;
使用在Java语言中的体现:封装、继承、多态
在面向过程中,程序的基本单位是函数;面向对象,程序的基本组成就是类
在开发过程中,是面向对象和面向过程结合的开发,面向对象负责抽象,进行系统的搭建;面向过程负责具体实现
在应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象(object),它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是人和有明确边界和意义的东西。
任何事物都可以用对象来进行描述——万物皆对象。
类:具有相同属性(数据元素)和行为(功能)的对象的抽象就是类
类是对一种或多种事务/过程/事物的共同特征(属性、行为)的抽象描述,是事物的共性,是普遍性质。
在JAVA种,类的实质是一种数据类型,由用户自定义的数据类型。在编程中,类不能直接进行操作,需要用类定义具体的对象,对这对象进行操作。
类的主要作用是对代码复用的一种变革,将共同的逻辑属性进行抽取,防止重复开发,提高效率。
继承解决的是事物的个性问题。
对象: 具有某种身份的事物就是对象
对象是类的具体实现。
对象的性质:唯一性,每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。
类是对象的抽象,对象是类的实现。
public class 类名{
属性(成员变量);
方法(成员方法);
}
概念:又称为属性
作用:描述事物的特征
位置:定义在class中,方法外
格式:数据类型 属性名/变量名;
String name; //此属性只有声明
int i = 10; //此属性声明同时初始化
属性操作
System.out.println(对象名.属性名);补充:对象名又称为引用名
位置:局部位置,不直接在class中
1. 在方法体,方法的形参位置
2. 代码块中
局部变量和成员变量比较
| 比较项 | 成员变量 | 局部变量 |
|---|---|---|
| 定义位置 | class中,方法外 | 不直接在class中 |
| 内存位置 | 堆 | 栈 |
| 默认值 | 有 | 无 |
| 生命周期 | 随着对象的创建而产生,随着对象被回收,而销毁 | 随着方法被调用出现在栈中,方法一旦被执行完毕,就被弹栈了 |
class Veriable1
{
//定义成员变量
int a = 10;
public void show(){
//定义局部变量
int b = 20;
System.out.println("a=" + a);
System.out.println("b=" + b);
}
public void func(){
System.out.println("b=" + b);
/*
错误: 找不到符号
因为b的作用域是整个show方法,
出了show,外界无法访问它
*/
}
}
class Veriable2
{
//定义成员变量
int i = 100;
public void show(){
//定义局部变量
int i = 1000;
/*
java编译器在执行到以下代码时,
会先去当前作用域查找是否有i变量存在;
如果有,就直接拿来使用;
如果没有,它会去外侧(类中)的作用域进行查找
如果有,也拿来使用,
如果没有,编译错误
特点:就近原则
*/
System.out.println("局部变量i=" + i);
System.out.println("成员变量i=" + this.i);
}
}
内部内部类,就是定义在其他类里面的类;
根据类写在其他类里面的位置的不同,可以分为成员内部类和局部内部类;
包含内部类的类就叫做外部类;
隐式三步
上面的步骤都执行完毕,类加载完成
首先JVM在堆内存中开辟空间;
在对象空间中为类中的所有非静态成员变量分配空间,赋默认值;
调用相应的构造函数进栈;
在执行构造函数中的代码之前,先要执行隐式三步:
完成隐式三步后,接下来开始执行构造函数中的代码;
构造函数结束出栈,对象创建完成
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w47sRQnq-1656645827823)(assets/子类对象实例化的全过程图解.png)]