# java201903025 **Repository Path**: GUOSD/java201903025 ## Basic Information - **Project Name**: java201903025 - **Description**: return返回值 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-04-24 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java201903025 #### 介绍 方法(函数)和数组 课堂笔记 1.方法(函数) 1.1 方法概念 方法就是一个可以整体执行的语句块;方法也成为函数; 语法: 访问控制修饰符 其他修饰符 返回值类型 方法名(形参列表){ // 方法体 // return 语句; } 解析: 访问控制修饰符,适用于控制该方法的使用范围的; 一般使用:public 、protected、默认的、private进行修饰;(面试对象时讲解) 其他修饰符,对方法进行其他的限定,常用:static、synchronized、final 返回值类型,指明该方法执行结束之后返回到上层调用者的值; 返回值的类型一般是java的数据类型,基本类型和对象类型;如果没有返回值,则使用void; 如果方法有返回值,则必须在方法体执行最后使用 return 返回值(表达式); 语句将返回值进行返回处理; 如果方法没有返回值使用了void类型,则不需要使用 return 返回值(表达式); 语句进行返回值的返回, 但是也可以使用 return; (return后面没有返回值) 直接返回上层方法调用,该返回操作会直接结束子方法的执行过程; 方法名按照命名规范进行命名即可; 形参列表是该方法执行时所需要的外部传入的参数列表;定义形式: 数据类型 形参变量名1,数据类型 形参变量名n 中间使用逗号分隔 方法体主要进行业务逻辑处理,如果需要有返回值,则必须使用 return 返回值; 的语句进行返回即可; return 语句返回值的类型需要和函数声明时的返回值类型一致或者可以进行自动默认转换即可;(return的返回数据类型可以自动默认转换为函数声明的数据类型,否则需要强制类型转换之后再返回) 一个方法不能声明定义在另一个方法中,方法与方法之间是并列同级的;方法与方法之间通过调用进行交互; 1.2 方法调用 方法与方法之间是可以通过方法名进行方法调用的; 调用语法: 方法名(实参列表); 解析: 方法调用时直接使用方法名即可; 方法调用时需要根据方法定义时给定的形参列表,传入该方法所需要的参数,这个参数就是实参列表; 实参列表在个数、数据类型上需要和形参列表一一对应; 在方法调用用时,实参的值会传递给形参;反过来,形参值的改变也会影响实参;(数组、面向对象之后再讲) 形参和实参概念: 形参:方法定义时给定的参数叫做形参,定义形式如: 数据类型 形参变量名1,数据类型 形参变量名n 实参:方法调用时给定的参数叫做实参,形式如: 实参1,实参2,实参n 区别: 形参需要指明数据类型; 实参直接传值接口,但是数据类型和个数需要和形参一一对应;如果实参的数据类型可以默认转换形参类型也可以; 1.3 方法的递归调用 方法的递归调用:一个方法自己调用自己的过程,就是递归调用; 递归调用的算法过程: (1)递归结束条件; (2)递归调用(自己调用自己); 递归调用的应用场景: 一个算法中,会进行多次重复执行;每次执行的过程类似; 重复性的算法处理,可以考虑使用递归; 举个列子: 斐波那契数列求地n项的值。 斐波那契数列:给定前两项的值,从第三项开始,这项的值是前两项之和;(前两项不都是0) 例如: 1 1 2 3 5 8 13 21 34 ... 算法实现分析: 结束条件:递归到第1项和第2项给定值时结束;(如果没有结束条件,算法就会陷入死循环) 重复操作:重复进行前两项求和; 递归算法优缺点: 优点:算法实现简单; (找出递归的规律,实现简单) 缺点:需要进行大量的方法调用,需要消耗大量内存,执行效率较低; 每个递归算法都可已使用非递归方式进行实现; 课堂练习:非递归方式计算斐波那契数列的第N项的值。(非递归一般会采用两个数的辗转运算) 2.数组 2.1 数组的概念(一维数组) 数组是一组数据类型相同的数的集合;数组是连续存储的; 语法: 数据类型[] 变量名; 变量名 = 初始化赋值; 数据类型[] 变量名 = 初始化赋值; 还可以这样写: 数据类型 变量名[]; // 不推荐,C语言的习惯; 两种写法可以编译运行 解析: 数组是一组数据,且数据类型相同; 数组有下标,可以按下标顺序进行访问; 下标从0开始,可以使用 变量名[下标] 的形式读取或者设值该下标所对应的元素的值; 如果下标超出了数组的表示范围,则会产生数组下标越界异常; 通过 变量名.length 属性获取数组的元素的个数,也就是数组的长度; 数组在内存中是连续存储的,使用的是一段连续的存储空间;(链表结构的存储不是连续) 2.3 数组的初始化 数组的初始化有很多种方式; 初始化语法: 语法1: 数据类型[] 变量名= new 数据类型[数组长度]; 等价于: 数据类型[] 变量名; 变量名= new 数据类型[数组长度]; 解析: 声明和申请内存空间一起完成; 关键字new是用于在内存中申请存储空间的;(java中的new关键字都是用于分配内存空间的) 给数组使用new申请的内存的存储单元中,是有默认值的; 数组申请的内存空间中的默认值: char byte short int long float double boolean 对象类型(引用类型、Object类型) '\0' 0 0 0 0 0.0 0.0 false null 使用 数组变量名[下标] = 初始值; 的方式进行初始化赋值;(可以使用for循环进行完成) 数组的元素的操作(赋值、取值)可以使用for循环完成; 语法2: 数据类型[] 变量名= new 数据类型[]{初始化赋值的列表}; 等价于: 数据类型[] 变量名; 变量名= new 数据类型[]{初始化赋值的列表}; 解析: 初始化赋值的列表使用逗号进行分割; 这种赋值方式相当于是根据{}中初始化赋值的列表的中的元素的个数申请内存空间, 并且按顺序将初始化赋值的列表中的元素依次给数据进行初始化赋值; 这种初始化赋值的方式[]中不需要指明数组的长度,数组的长度由初始化赋值的列表的元素个数决定; 语法3: 数据类型[] 变量名= {初始化赋值的列表}; 等价于:(不可以,编译出错) 数据类型[] 变量名; 变量名= {初始化赋值的列表}; 解析: 是语法2的简写; 这种方式声明和初始化必须合并使用,不能分开使用; 直接使用{}初始化赋值的方式只能和声明同时使用,不能分开; PS: 没有使用new分配内存空间的变量的默认值都是null,java语言规定,在null的变量上不能进行任何操作; 3.二维数组 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)