小白的20天Java学习打卡day10

太原理工大学机器人团队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之间具有共同特征,进行抽象总结出一个模板这个模板被称为类
什么是对象
  • 对象是实际存在的个体。现实世界当中实际存在。

类—【实例化】—>>对象

对象又被称为实例

对象—【抽象】—>>类

重点

类描述的是对象的共同特征。

共同特征例如:身高特征

这个身高特征在访问的时候,必须先创建对象,通过对象去访问这个特征。因为这个特征具体的某个对象上之后,值不同。

一个类描述的什么信息
  • 一个类描述的是状态+动作
  • 状态——>一个类的属性
  • 动作——>一个类的方法

例如

状态有:名字,身高,性别,年龄

动作有:吃,唱歌,跳舞,学习

属性描述的是对象的状态信息

方法描述的是对象的动作信息

注意

状态和动作当具体到某个对象上之后,发现最终的结果可能不一样

对象和对象之间有共同特征,但是具体到对象之后有数据的差异

动作有:吃,唱歌,跳舞,学习

属性描述的是对象的状态信息

方法描述的是对象的动作信息

注意

状态和动作当具体到某个对象上之后,发现最终的结果可能不一样

对象和对象之间有共同特征,但是具体到对象之后有数据的差异

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java员工打签到代码的实现方式有很多种,以下是其中一种可能的实现方式: ```java import java.util.Date; public class Employee { private String name; private Date lastSignIn; public Employee(String name) { this.name = name; } public void signIn() { Date now = new Date(); System.out.println(name + "签到成功,时间:" + now); lastSignIn = now; } public void signOut() { Date now = new Date(); System.out.println(name + "签退成功,时间:" + now); } public void checkInStatus() { if (lastSignIn == null) { System.out.println(name + "尚未签到"); } else { System.out.println(name + "上次签到时间:" + lastSignIn); } } } ``` 上面的代码定义了一个`Employee`类,其中包含了员工的姓名和上次签到时间。类中有三个方法:`signIn()`、`signOut()`和`checkInStatus()`。`signIn()`方法表示员工签到,会打印出员工姓名和当前时间,并将当前时间记录为上次签到时间;`signOut()`方法表示员工签退,会打印出员工姓名和当前时间;`checkInStatus()`方法表示查询员工的签到状态,会打印出员工姓名和上次签到时间(如果已经签到过),否则会提示尚未签到。 如果要使用这段代码,可以在其他类中创建`Employee`对象,并调用其中的方法来完成打签到功能。例如: ```java public class Main { public static void main(String[] args) { Employee emp1 = new Employee("张三"); emp1.signIn(); emp1.checkInStatus(); emp1.signOut(); } } ``` 这段代码创建了一个名为`emp1`的`Employee`对象,姓名为“张三”。接着调用了`signIn()`方法进行签到,`checkInStatus()`方法查询签到状态,最后调用了`signOut()`方法进行签退。运行这段代码后,会打印出以下结果: ``` 张三签到成功,时间:Thu Jul 22 14:47:23 CST 2021 张三上次签到时间:Thu Jul 22 14:47:23 CST 2021 张三签退成功,时间:Thu Jul 22 14:47:28 CST 2021 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值