Java方法

春丈目里

什么是方法

System.out.println()		//System是系统的类	out是System下的一个输出对象
    						//printl是一个方法 
package Method;
public class Demo01 {
    //main方法
    public static void main(String[] args){
        int add = add(1,2);
        System.out.println(add);
    }

    //加法
    public static int add(int a,int b){		//为了方便调用,加static
        return a+b;
    }
}
结果:
3

方法在程序中被创建,在其他地方被引用

方法是语句的集合,在一起执行一个功能——功能块

设计的时候保持方法的原子性:一个方法完成一个功能,利于后期的拓展

package Method;
public class Demo01 {
    //main方法
    public static void main(String[] args){
//        int add = add(1,2); 				把这两行没有用的加法方法“注掉”
//        System.out.println(add);
        test();
    }

    //加法
    public static int add(int a,int b){
        return a+b;
    }

    public static void test(){
            for (int i = 0; i < 1000; i++) {
            if(i%5==0){
                System.out.print(i+"\t");
            }
            if(i%(5*3)==0){
                System.out.println();
            }
            }
}
}

该程序没有把输出函数放进main方法,保持main方法的整洁干净

方法的定义和调用

Java的方法类似其他语言的函数,用代码片段完成特定功能

Java方法应该包含的部分:

修饰符	返回值类型 方法名(参数类型 参数名){
    ...
   方法体
    ...
    return 返回值;
        
}
  • 修饰符:可选
  • 参数类型
    • 形式参数 用来定义参数的:(int a,int b)
    • 实参 实际调用传递给他的参数:(a:1,b:2)
  • 如果需要返回值,使用return
package Method;
public class Demo02 {
    public static void main(String[] args){
        int max = max(210,210);
        System.out.println(max);

}
    //比大小
    public static int max(int number1,int number2){
        int result = -100;
        if(number1==number2){
            System.out.println("number1 == number2");
            return 0 ;             //终止方法
}
        if (number1>number2){
            result = number1;
        }else
        {
            result = number2;
        }
        return result;
    }
}
结果:
number1 == number2
0

方法调用

  • 当方法返回一个值的时候,方法调用通常被当作一个值

    int max = max(210,210);
    
  • 当方法返回值是void,方法调用是一条语句

    System.out.println("Hello,World!")
    

方法的重载

  • 方法名相同
  • 参数列表不同(个数,类型,参数排列顺序)
  • 返回值类型无所谓
  • 匹配失败会报错

命令行传递参数

main函数也是可以传递参数的, 程序运行时给它传递信息

package Method;
public class Demo03 {
    public static void main(String[] args){
        //args.length 数组长度
        for(int i = 0; i < args.length; i++) {
            System.out.println("args["+i+"]:"+args[i]);
        }
}
}

用cmd的方式执行:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IFKIB2mK-1649417889725)(C:\Users\86156\AppData\Roaming\Typora\typora-user-images\image-20220408132933339.png)]

在Explorer里执行[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-98TCZYv9-1649417889727)(C:\Users\86156\AppData\Roaming\Typora\typora-user-images\image-20220408133215717.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvVOQWde-1649417889728)(C:\Users\86156\AppData\Roaming\Typora\typora-user-images\image-20220408133647920.png)]
通过 javac Dem03.java 进行编译,生成了Demo03.class

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KdCQ2Ent-1649417889728)(C:\Users\86156\AppData\Roaming\Typora\typora-user-images\image-20220408133801479.png)]

尝试执行Demo03,会无法运行[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BVrpWUX3-1649417889729)(C:\Users\86156\AppData\Roaming\Typora\typora-user-images\image-20220408133859392.png)]

因为要回退到src目录下才能执行[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SexEqOAs-1649417889729)(C:\Users\86156\AppData\Roaming\Typora\typora-user-images\image-20220408134042175.png)]

没结果是因为没给他加参数,这个程序要是输入数组[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7YpA6qkp-1649417889730)(C:\Users\86156\AppData\Roaming\Typora\typora-user-images\image-20220408134155442.png)]

可变参数/不定项参数

在制定参数类型后面加一个省略号(…)。

一个方法中只能制定一个可变参数。普通参数必须在此之前声明,可变参数必须是该方法的最后一个参数。

package Method;
public class Demo04 {
    public static void main(String[] args){
        Demo04 demo04 = new Demo04();
        demo04.test(1,2,3,4,5);
}
    public void test(int x,int... i){
        System.out.println(i[0]);
        System.out.println(i[1]);
        System.out.println(i[2]);
        System.out.println(i[3]);
        System.out.println(x);
    }
}
结果:
2
3
4
5
1
package Method;
public class Demo04 {
    public static void main(String[] args){
        //调用可变参数的方法
        printMax(34,3,3,2,56.5);   
        printMax(new double[]{1,2,3});//double[] b = {1,2,3}; printMax(b);

    }
    public static void printMax(double... numbers){//改成(double a,double b,double... numbers) 结果可能会有变化 
        if(numbers.length == 0){
            System.out.println("No argument passed");
            return;
        }
        double result = numbers[0];             //声明一个1*1数组来当结果变量

        //遍历数组找出最大值,赋值给result
        for (int i = 1;i< numbers.length;i++){
            if(result<numbers[i]){
                result = numbers[i];
            }

        }
        System.out.println("The max value is "+result);
    }
}
结果:
The max value is 56.5
The max value is 3.0

递归

自己调用自己

可以将大型程序转化成相似但是规模较小的程序,大大减少代码量

递归结构:

  • 递归头:指明什么时候不调用自身方法
  • 递归体:
package Method;
public class Demo06 {
    //阶乘
    public static void main(String[] args){
        System.out.println(f(4));
    }
    public static int f(int n){
        if(n == 1){
            return 1;
        }else{
            return n*f(n-1);
        }
    }
}
结果:
24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值