太原理工大学机器人团队20天学习打卡day10
前言:
今天的内容重在理解,理解起来有点困难,尤其是对于像我这样的从来没有接触过编程语言的小白来说。
所以笔记量比较少,但是内容有点难以理解,一起加油啊!!!
1、方法的递归调用
①什么是递归
- 方法自身调用自身
递归是很耗费栈内存的,递归算法可以不用的时候尽量别用
②递归的基础语法
以下程序运行时出现错误【不是异常】
栈内存溢出错误。
错误发生无法挽回,只有一个结果,就是JVM停止工作。
由此可见:
递归必须有结束条件,不然一定会出现栈内存溢出错误
递归即使有了结束条件,即使结束条件是正确的,也有可能会发生栈内存溢出错误,因为递归的太深了
注意:
递归可以不使用尽量别用,但是有些情况下该功能的实现必须依靠递归方式
public class RecursionTest01
{
public static void main(String[] args){
//调用doSome方法
doSome();
}
//以下的代码片段虽然只有一份
//但是可以被重复调用并且只要调用就会在栈内存中分配一块所属空间
public static void doSome(){
System.out.println("doSome begin");
doSome();//这行代码不结束,下一行是不会执行的
System.out.println("doSome over");
}
}
③实例:使用递归计算1~N的和
public class RecursionTest02
{
public static void main(String[] args){
//1~4的和
int n = 4;
int retValue = sum(n);
System.out.println(retValue);
}
public static int sum(int n ){
if( n == 1 ){
return 1;
}
return n + sum(n-1);
//4+sum(3)
//4+3+sum(2) ……
}
}
2、面向对象【java语言的核心机制】
①面向过程和面向对象的区别
- 面向过程:主要关注点是实现的过程,因果关系。【例如集成显卡的开发思路】
- 优点:对于业务逻辑比较简单的程序,可以达到快速开发,前期投入成本较低
- 缺点:采用面向过程的方式开发很难解决非常复杂的业务逻辑,另外面向过程的方式导致软件元素之间的耦合度非常高,只要其中一环出问题,整个系统受到影响,导致最终的软件扩展力差。另外,由于没有独立体的概念,所以无法达到组件复用
- 面向对象:主要关注点是对象【独立体】能够完成哪些功能。【例如独立显卡的开发思路】
- 优点:耦合度低,扩展力强,更容易解决现实世界中更复杂的业务逻辑,组件复用性强。
- 缺点:前期投入成本较高,需要进行独立体的抽取,大量系统分析与设计。
- C语言是纯面向过程的,C++半面向对象,java纯面向对象
- 现在出现的一些新的编程语言多数都是面向对象的。人在认识世界的时候以面向对象的方式,面向对象更符合人的思维方式
②面向对象的三大特征
- 封装
- 继承
- 多态
③从软件开发的生命周期来看,基于面向对象可分为三个阶段
- 面向对象的分析:OOA
- 面向对象的设计:OOD
- 面向对象的编程:OOP
④类和对象的联系
什么是类
- 类在现实世界中是不存在的,是一个模板,是一个概念。是人类大脑思考抽象的结果
- 类代表了一类事物
- 在现实世界当中,对象A与对象B之间具有共同特征,进行抽象总结出一个模板,这个模板被称为类
什么是对象
- 对象是实际存在的个体。现实世界当中实际存在。
类—【实例化】—>>对象
对象又被称为实例
对象—【抽象】—>>类
重点
类描述的是对象的共同特征。
共同特征例如:身高特征
这个身高特征在访问的时候,必须先创建对象,通过对象去访问这个特征。因为这个特征具体的某个对象上之后,值不同。
一个类描述的什么信息
- 一个类描述的是状态+动作
- 状态——>一个类的属性
- 动作——>一个类的方法
例如
状态有:名字,身高,性别,年龄
动作有:吃,唱歌,跳舞,学习
属性描述的是对象的状态信息
方法描述的是对象的动作信息
注意:
状态和动作当具体到某个对象上之后,发现最终的结果可能不一样
对象和对象之间有共同特征,但是具体到对象之后有数据的差异
动作有:吃,唱歌,跳舞,学习
属性描述的是对象的状态信息
方法描述的是对象的动作信息
注意:
状态和动作当具体到某个对象上之后,发现最终的结果可能不一样
对象和对象之间有共同特征,但是具体到对象之后有数据的差异