函数
函数的定义:
函数存在的意义:
- 函数主要解决的是那些重复的且具有独立功能的代码
- 将这些具有独立功能的代码可以进行再次封装,封装出来的东西就成为是函数
- 很明显的优势,降低了代码冗余复用函数即可,降低了主函数的代码量,将主函数进行适当的拆分,以便内存优化(就是将函数模块化)
函数格式:
函数格式:
访问权限 函数类型 返回值类型 函数名(参数列表){
函数体
return 返回值;
}
访问权限:指的就是函数使用范围(内部 外部)
- public
- protected
- 默认不写
- private
函数类型:指的就是函数类型分类,说的就是函数的具体使用场景和场合
- static 静态函数
- 默认不写 成员函数
- abstract 抽象函数
- native 本地函数
- synchronized 同步函数
函数名 : 就是程序员给这一段代码自定义的名称(标识符)
参数列表:参数列表有若干个 参数类型,参数名...组成 主要用于接受外界传递给函数的一些数据
函数体: 就是那些具有独立功能的代码块
return:仅仅表示结束当前函数,如果有返回值,则函数结束前将返回值返回给调用者
返回值: 指的就是这一具体有独立功能的代码块的计算结果,需要传递给外界 配合 return
返回值类型: 就是返回值的数据类型(可兼容)
函数的分类:
- 有返回值有参数
- 有返回值无参数
- 无返回值有参数
- 无返回值无参数
(注意:有返回值的函数,参与运算 输出 赋值 无返回值的函数 仅仅调用)
函数传参:
- 实际参数 —— 实参 就是在调用函数的时候,给函数传递的数据(常量,变量)叫做实参
- 形式参数 ——形参 就是定义函数的时候,参数列表当中的数据,叫做形参
实参是将什么东西传递给了形参(1. 常量在常量池中的地址 2. 对象在堆内存中的地址 )
局部变量:但凡是在函数创建的变量 称之为局部变量 局部变量的作用域仅仅是在当前的函数当中(形式参数一定是局部变量)
函数栈
函数的运行是基于栈内存的
- 栈是一个先进后出的容器结构
- 子弹按顺序123456进栈,按顺序654321出栈
- 可以将每一个函数理解为是子弹(函数帧 /帧栈)主函数绝对是第一个进栈的
- return结束当前函数 ->当前函数弹栈
函数的重载
重载的定义: 函数的重载指的是同一个类中出现的同名函数
重载的性质: 与权限没关系,与返回值类型没关系,与参数名没关系,只有个和参数类型的排列组合有关系(注意一下参数类型的向下兼容性问题)
重载的优点 : 在于我们可以拓展函数的功能(函数重名,但是参数类型不一样,执行内容也可以不一样)
寻找适当函数的流程:
- 看是否有确切的参数定义 int+int 查看是否有(int,int)
- 看是否有可兼容的参数定义 int+int 查看是否有(double, double)
- 如果可兼容的参数定义有多个 int+int(double,int)或者(int,double)此时报错 引用不明确
函数的递归调用
递归的体现就是函数自身调用函数自身
递归主要解决的问题:
- 一般而言,但凡能够被迭代(循环)解决的问题,递归都可以解决 反之则不一定
- 递归其实是分治法的一种实现方式(一种实现思路)
- 递归就是函数在进栈 进栈的次数多了,势必会占内存 无法避免的
- 在某些问题上 递归所写的代码要比迭代写的代码少 在某些问题上 迭代是写不出来的 所以只能用递归
分治法: 分治法是一种算法思想,反治法主要解决的问题是将大问题进行拆分 拆分成若干个小的问题进行求解,最终将每个小问题进行合并 其实,分治法就是一种暴力破解法(穷举),也是一种搜索最有答案的算法
递归 : 先递 后归
- 前进段 指的就是将问题从大化小
- 结束段 问题无法再继续化小,则处理当前的问题
- 返回段 将小问题处理完毕之后,向上返回(有些问题是不需要返回的)
常用函数
Math类
- Math.E
- Math.PI
- Math.abs(2)
- Math.ceil(a)
- Math.floor(a)
- Math.hypot(x,y)
- Math.max(a,b)
- Math.min(a,b)
- Math.pow(a,b)
- Math.sqrt(a)
- Math.random()
- Math.rint(a)
- Math.round(a)
String类
String不是基本数据类型而是一个类,既然是类那么肯定有其相关的函数
查询相关:
- char charArt(int index)
- int indexOf(int ch)
- int lastIndexOf(int ch)
- int length()
- substring(int beginIndex, int endIndex)
判断方法:
- boolean contains(String s)
- boolean endsWith(String s)
- boolean startsWith(String prefix)
- int compareTo(String anotherString)
- boolean equals(String anotherString)
- boolean equalslgnoreCase(String anotherString)
- boolean isEmpy()
修改相关:
- String replase(char oldChar,char newChar)
- String toUpperCase()
- String toLowerCase()
- String teim()
对字符串的修改永远都不是对其自身进行修改(字符串本身是不可改变的)
对字符串的修改往往是新建字符串将修改后的内容赋值并返回新的字符串