函数
定义:函数主要解决那些重复的并且具有独立功能的代码段,将这些代码进行再次封装就成为了函数。
函数的作用:可以在主函数中调用,有利于减少主函数的代码量。可以将函数模块化,便于优化内存。
函数的格式:
- 访问权限(函数使用范围):public(共有 ) protected(受保护的) 默认(什么也不写) private(私有的)
- 函数类型(函数的类型分类,也就是场景和场合):static(静态) 默认(成员函数)abstrac本地t(抽象) native()
- 返回值类型:void(无返回值类型)
- 函数名(自定义的名称)
- 函数体:具有独立功能的代码块
- return本身表示结束当前函数,如果函数有返回值,return必须写,反之则不
- 返回值:指的是这一具有独立功能的代码块的运算结果,这个运算结果需要传递给外界(配合return使用)。
- 返回值类型:就是返回值的数据类型(可兼容即可)。
常见的函数
class D05{
public static void main(String[] args){
}
}
class 为类名
public表示访问权限为公开
static表示此函数为静态函数
void表示无返回值
main为函数名
String[]表示一个字符串数组
args 表示数据类型的变量名称
此处无return是因为void表示无返回值,所以return省略
函数的分类
- 有返回值有参数
- 有返回值无参数
- 无返回值有参数
- 无返回值无参数
函数的传参
实际参数(实参)——就是在调用函数的时候,给函数传递的数据(常量、变量)。
形式参数(形参)——就是定义函数的时候,参数列表当中的数据。
在常量中是将常量在常量池中的地址传递给参数,在对象时是将对象在堆内存的地址传递给参数
函数的栈运行方式
栈的运行方式为先进后出后进先出,意味着main函数先运行进栈,再定义的函数进栈,弹栈(又称出栈)先由定义的函数开始出栈,在将main函数弹栈。
函数的重载
函数的重载就是同一个类中出现同名的函数,与权限,返回值类型和参数名无关,至于参数列表以及参数类型有关。
int a = 1;
int b = 2;
//1.
public static double add(double a ,double b){
return a+b;
}
//2.
public static int add(int a, int b){
return a+b;
}
//3.
public static int add(int c, int d){
return c+d;
}
1和2 就是重载函数,而1和3或者2和3不是重载函数。
好处
函数的重载可以扩展我们函数的功能。
寻找合适函数流程
例如:int +int 先寻找是否有(int ,int),若没有寻找(double,double),最后寻找(double,int)或者(int,double)。
函数的递归
函数的递归是分治法的一种表达,在某些情况下迭代无法解决的问题可以用递归来解决。分治法就是将大的问题化小直至不能再分解,简而言之,分治法其实也就是一种暴力破解法。递归法就是先递后归,我们可将其分为三段,分别为前进段、结束段、返回段。前进意味着将大化小,化到最小结束,在逐层归回。
递归的举例:
斐波那契数列前二十项
class Test02{
public static void main(String[] args){
for(int i=1;i<=100;i++){
System.out.println(fibo(i));
}
}
public static int fibo(int n){
if(n==1||n==2){
return 1;
}
return fibo(n-1)+fibo(n-2);
}
}
常见函数
math类:
- Math.ceil-----向上取整
- Math.floor-----向下取整
- Math.hypot-----两点间距离
- Math,max(a,b)---求a b 的最大数
- Math,min(a,b)---求a b 的最小数
- Math.pow(a,b)----a的b次方
- Math.sqrt()---开方
String类:
- String.length()----字符串的长度
- char charAt()----指定位置的字符
- contain()----判断指定子串是否包含
- compareTo()----按字典顺序比较两个字符串
- endswith()------判断指定子串是否以某字符结尾
- equals()------比较两字符串是否相等