函数
为什么要有函数的存在:函数主要解决的是那些重复的且具有独立功能的代码段
将这些具有独立功能的代码可以进行再次封装 封装出来的东西就成为是
好处:降低了代码冗余(复用函数),降低了主函数的代码量(将主函数进行适当的拆分,以便内存的优化),就是将函数模块化
函数是如何定义的:访问权限 函数类型 返回值类型 函数名(参数列表){
函数体
return 返回值;}
访问权限:指的是函数的适用范围(内部和外部)public(全局) protected 默认 private
函数类型:指的是函数的类型分类,说的就是函数的具体使用场景和场合
static(静态函数) 默认不写(成员函数) abstract(抽象函数)native(本地函数synchronized(同步函数)
函数名:程序员给这一段代码自定义的名称(标识符)
参数列表:有若干个参数类型,参数名...组成 主要用于接收外部传递给函数的一些数据
函数体:就是那些具有独立功能的代码块
return:仅仅表示结束当前函数,如果有返回值,则函数结束前将返回值
返回值:指的就是这一具有独立功能的代码块的计算结果,需要传递给外界 配合return
返回值类型:就是返回值的数据类型(可兼容)
class Test01{
/*
主函数的格式分析
public 主函数是公开权限 最大权限
static 主函数是静态函数
void 该函数没有返回值
main 主函数的名称
String[] String[] 表示的是一个字符串数组(数据类型)
args 就是这个数据类型的变量名称
番外:我们可以在执行程序的时候 给主函数传递一些参数
return:发现return不在
!!!而是因为函数没有返回值 所以return可以忽略不写 不代表不存在
!!!return本身表示结束当前函数!
!!!如果函数有返回值 return 返回值; 必须写
*/
public static void main(String[] args){
// int a=10;
// if(a>5){
// return; //在此处结束当前函数
// }
// System.out.println("来了老弟~");
// return;(函数没有返回值可省略不写)
//目前为止 定义函数的时候 只需要考虑
//返回值类型 函数名 参数列表 函数体 返回值
/*
double res=pow(2,4);
System.out.println(res);
System.out.println(pow(2,-4));
double c=pow(2,3)+10;
System.out.println(c);
show();
*/
//-------↓
int a=4;
int b=4;
double c=pow(a,b);
System.out.println(c);
}
public static double pow(double a,int b){
if(b==0){
return 1;
}
double sum=1;
//2^4
for(int i=1;i<=Math.abs(b);i++){
sum*=a;
}
return b>0?sum:1/sum;
}
public static void show(){
System.out.println("奥利给~~");
}
/*
切记:千万不要在函数的内部创建函数 函数必须在类里面 函数们之间是平级关系
在C/C++/Python当中 函数的定义必须在函数调用之前
在Java当中 随便 之前 之后
需求:计算a的b次幂(b且是整数)
2.1^6
double sum=1;
for(int i=1;i<=6;i++){
sum*=2;
}
5^8
double sum=1;
for(int i=1;i<=8;i++){
sum*=5;
}
a^b
double sum=1;
for(int i=1;i<=b;i++){
sum*=a;
}
return sum;
2^-4
1/(2^4)
*/
}
函数的分类:有返回值有参数 有返回值无参数 无返回值无参数 无返回值有参数
注意:有返回值的函数,参与运算、输出、赋值
无返回值的函数,仅仅调用,并不能对返回结果进行额外的操作
// 以下都是错误的对无返回值函数的操作
// System.out.println(show());
// int d=show();
// int e=show()+10;
//return;
函数传参:
实参(实际参数):就是在调用函数时,给函数传递的数据(常量,变量)
形参(形式参数):就是定义函数时,参数列表当中的数据
实参将什么东西传递给了形参:常量在常量池中的地址,对象在堆内存中的地址
局部变量:但凡是在函数中创建的变量 称之为局部变量
形式参数一定是一个局部变量
函数栈:函数的运行是基于栈运行的,栈是一个先进后出的容器
例如:子弹按顺序123456进栈,按顺序654321出栈
可以将每一个函数理解为子弹(函数帧)
asd