JavaSE基础05:方法(函数)

方法可以用于定义可重用的代码以及组织和简化编码

6 . 2 定义方法

方法的定义由方法名称参数返回值类型以及方法体组成

定义方法的语法如下所示

修饰符 返回值类型 方法名( 参数列表 ){ 
// 方法体 ; 
}

方法可以返回一个值retumValiieType 是方法返回值的数据类型有些方法只是完成某些要求的操作而不返回值在这种情况下retuniValueType 为关键字 void。方法中返回 值类型也是如此如果方法有返回值则称为带返回值的方法, 则就称这个该方法为 void 方法

================================================================================

定义在方法头中的变量称为形式参数或者简称为形参。参数就像占位符当调用方法时就给参数传递一个值这个值称为实际参数或实参参数列表指明方法中参数的类型顺序和 个数方法名和参数列表一起构成方法签名参数是可选的也就是说方法可以不包含参数例如Math.random()方法就没有参数

注意:在方法头中需要对每一个参数进行独立的数据类型声明例如max(int numl,1nt num2)是正肩的max(int numl,mim2)是错误的

6.3调用方法

方法的调用是执行方法中的代码

在方法定义中定义方法要做什么为了使用方法必须调用据方法是否有返回值调用方法有两种途径

 

无返回值的函数 只能调用 不能打印、赋值、运算
有返回值的函数 除了调用 参与打印、赋值、运算

函数的运行时基于栈的
    栈内存 函数运行叫作函数入栈 函数结束叫作函数出栈
实际参数:实际传递给函数的数据 可以是变量 也可以是常量
形式参数:用于接收调用者传递来的数据
形式参数使其所属函数的局部变量
局部变量:在函数中定义的变量
    随着函数进栈而存在
    随着函数出栈而消亡

6.4函数的重载
表面上来看:一个类中有若干个重名函数
重载和函数的权限修饰符有关系没?没关系
重载和函数的类型修饰符有关系没?有 为啥
重载和函数的返回值类型有关系没?没
和函数名有关系吗?有 前提重名
和函数的参数列表有关系没?和参数名没关系 和类型有关系
目前而言 重载的前提是函数重名
具体到底是不是重载关系 看参数类型的排列组合(个数,顺序)
add(double,double)
add(int,int)
add(int,double,int)
add(double,int,int)
add(int,int,double)
重载的好处?对函数的参数进行拓展

函数的内存调用:

                                       

     (图中标号代表了执行的流程),先介绍一下,在运行一个程序时,首先加mian()函数,因为mian()函数时程序的开始,前面已经介绍了函数是在“栈内存”中开始的,所以首先将mian()加载到我们的栈内存中,图中红色圆点代表加载进来的mian()函数。然后mian()函数调用sum()函数并传递给了该函数两个实际参数1和10,此时注意,我们的实际参数并不是直接付给变量了,而是将所有的实际参数都存放在了“常量池”中,并且每个参数都有一个存放的地址,此时程序中变量传递的都是参数的地址,所以执行②和③,此时加载第一个调用的sun()函数,并将两个参数的地址传递给两个变量,在sum()函数中定义的其他变量所赋的初值都是传递的是参数的地址,当sum()函数计算完成后,将结果返回,此时sum()函数弹栈,再调用下一次的sum()函数进行参数传递。与第一次执行流程一样。
 

import java.util.Scanner;
//运行的流程图 UML
//内存的流程图 UML
class Home26{
    public static void main(String[] args){
        //1.提示用户输入一个数字
        int number=initData();
        //2.判断是否是回文素数
        if(isHuiWenSuShu(number)){
            System.out.println("是");
        }else{
            System.out.println("不是");
        }
    }
    public static int initData(){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        return scanner.nextInt();
    }
    public static boolean isHuiWenSuShu(int num){
        //3.判断是否是素数且回文
        return isHuiWen(num)&&isSuShu(num);
    }
    public static boolean isHuiWen(int num){
        //4.计算翻转数字
        int revNum=reverse(num);
        return revNum==num;
    }
    public static int reverse(int num){
        int sum=0;
        while(true){
            sum=sum*10+num%10;
            num/=10;
            if(num==0){
                break;
            }
        }
        return sum;
    }
    public static boolean isSuShu(int num){
        //5.计算素数
        boolean flag=true;//是素数
        for(int i=2;i<=num/2;i++){
            if(num%i==0){
                flag=false;
                break;
            }
        }
        return flag;
    }
}

PS C:\Users\gaoyu\Desktop\javaseday04> javac Home26.java
PS C:\Users\gaoyu\Desktop\javaseday04> java Home26
请输入一个数字:131

 

 //计算一个整数n的m次幂 2^3 2^-3
 
class Demo04{
    public static void main(String[] args){
 
        System.out.println(pow(2,4));  //对函数不同传参的条用,查看程序运行结果是否正确
        double a=pow(3,2)+10;
        a=pow(2,-4);
        System.out.println(a);
        //System.out.println(pow(0,0));
        System.out.println(pow(0,1));
        System.out.println(pow(0,-9));
        System.out.println(pow(2,0));
    }
    public static double pow(int n,int m){  //定义一个计算一个整数n的m次幂的函数,返回值为double类型,因为整数的负数次幂是分数
        if(n==0&&m==0){    //首先判断特殊情况,0的0次幂是没有意义的,也没有正常返回值
            //没有正常返回值了!只能抛异常
            throw new ArithmeticException("0 and 0");  //这里可以先用抛异常的方式提示用户输入的不正确
        }
        if(n==0){   //其次0的任何次幂(除了0)都为0
            return 0;
        }
        if(m==0){   //任何数(除了0)的0次幂都为1
            return 1;
        }
        double multi=1; 
        for(int i=1;i<=Math.abs(m);i++){  //如果和m都不为0,则将n乘m次,
            multi*=n;
        }
        if(m>0){
            return multi; //如果m大于0,表示是整数次幂,为正整数
        }else{
            return 1/multi;   //如果m小于0,表示是负数次幂,为分数
        }        
     }
  }
}
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值