Java方法

什么是方法?

  所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块

内容梗概:
  方法的声明和调用

  方法的重载

    

     

1. 无参无返回值的方法

package com.vip.method;

public class MethodDemo {
//    public static void main(String[] args) {
//        //不使用方法输出
//        System.out.println("***************");
//        System.out.println("hello world!");
//        System.out.println("***************");
//    }


    //用方法输出一行星号
    public void printStar(){
        System.out.println("*************");
    }

    public static void main(String[] args) {
        //类的实例化||||创建对象
        MethodDemo myMethod = new MethodDemo();
        myMethod.printStar();    //调用方法
        System.out.println("hello world!");
        myMethod.printStar();    //调用方法
    }
}

2.无参带返回值的方法

package com.vip.method;

public class Recrangle {

    //求矩形面积的方法
    public int area(){
        int length = 10;   //定义长
        int width = 5;    //定义宽
        int getArea = length * width;   //面积
        return getArea;   //返回语句中的变量类型要跟方法定义的值一样
    }


    public static void main(String[] args) {
        Recrangle r = new Recrangle();
        System.out.println("矩形面积为:"+r.area());

    }
}

3.带参无返回值的方法

  定义一个求两个float类型数据最大值的方法,在方法中将最大值打印输出

package com.vip.method;

public class MaxDemo {

    //求最大值的放大
    public void max(float a,float b){
        float max;
        if(a>b){
            max = a;
        }
        else{
            max = b;
        }
        System.out.println("两个数的最大值为:"+ max);
    }

    public static void main(String[] args) {
        MaxDemo md = new MaxDemo();
        md.max(1111,21);   //调用方法并传参
    }
}

4.带参有返回值的方法

  定义一个求n!(阶乘)的方法,然后再求1!+2!+3!+4!+5!

package com.vip.method;

public class FacDemo {

    //求阶乘的方法
    public int fac(int n){
        int s = 1;
        for(int i=1;i<=n;i++){
            s = s*i;
        }
        return s;
    }

    public static void main(String[] args) {
        FacDemo fc = new FacDemo();

        int sum = 0;
        //求5以内的整数阶乘之和
        for(int i=1;i<=5;i++){
            int fac = fc.fac(i);   //调用方法
            sum = sum+fac;
        }
        System.out.println(sum);
    }
}

5. 数组作为方法参数

package com.vip.method;

public class ArrayMethod {
    //打印输出数组元素的值
    public void printArry(int[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int[] arr = {10,2,30,4,50,6};
        ArrayMethod am = new ArrayMethod();
        am.printArry(arr);
    }
}
package com.vip.method;

import java.util.Scanner;

public class ArrayMethod2 {

    //查找数组元素值的方法
    public boolean search(int n, int[] arr){
        boolean flag = false;
        for(int i=0;i<arr.length;i++){
            if(n == arr[i]){
                flag = true;
//                System.out.println("找到了");
                break;
            }
        }
        return flag;
    }

    public static void main(String[] args) {
        int[] arr = {11,22,33,44,55,66};
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要查找的数据:");
        int n = sc.nextInt();

        ArrayMethod2 am2 = new ArrayMethod2();
        boolean flag = am2.search(n,arr);
        if(flag){
            System.out.println("找到了");
        }
        else{
            System.out.println("未找到");
        }
    }
}

6. 方法重载

什么是方法重载:

  方法名相同,参数列表不同(当调用方法时给与不同传参,会自行调用相应的重载方法)

例题:定义三个方法,实现int、double和数组类型和的问题

package com.vip.method;

public class MathDemo {
    //求两个int类型数的和
    public int plus(int m, int n){
        return m+n;
    }

    //求两个double类型数的和
    public double plus(double m,double n){
        return m+n;
    }

    //求数组元素的累加和
    public int plus(int[] arr){
        int sum = 0;
        for(int i=0;i<arr.length;i++){
            sum = sum + arr[i];
        }
        return sum;
    }

    public static void main(String[] args) {
        MathDemo md = new MathDemo();
        int m=5,n=10;
        int[] arr = {1,3,5,7,9,11};
        System.out.println("int类型和:"+md.plus(m,n));
        System.out.println("数组元素累加和:"+ md.plus(arr));
        System.out.println("double类型和:"+ md.plus(m,1.1));
    }
}

 7. 方法传值

  基本数据类型传值,在主方法中调用,值不会影响

  引用数据类型(对象和数组都属于引用数据类型)传值,在主方法中调用,值会受影响

不受影响的基本数据类型举例

package com.vip.method;

public class ExchangeDemo {
    //交换方法
    public void swap(int a,int b){
        int temp;
        System.out.println("交换前:a="+a+",b="+b);
        temp = a;
        a = b;
        b = temp;
        System.out.println("交换后:a="+a+",b="+b);
    }

    public static void main(String[] args) {
        int m=4,n=5;
        ExchangeDemo ed = new ExchangeDemo();
        System.out.println("主方法交换前:m="+m+",n="+n);
        ed.swap(m,n);
        System.out.println("主方法交换前:m="+m+",n="+n);
    }
}

运行结果是:

主方法===方法调用前数组a1的元素为:
1 2 3 4 5 
数组a的元素为:
1 2 3 12 5 
主方法==方法调用后数组a1的元素为:
1 2 3 12 5 
Process finished with exit code 0

受影响的引用数据类型举例(数组)

package com.vip.method;

public class ArrayDemo {
    //定义一个用于修改某个数组元素值的放大
    public void updateArray(int[] a){
        a[3] = 12;
        System.out.println("数组a的元素为:");
        for(int n:a){
            System.out.print(n+ " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        ArrayDemo ad = new ArrayDemo();
        int[] a1 = {1,2,3,4,5};
        System.out.println("主方法===方法调用前数组a1的元素为:");
        for(int n:a1){System.out.print(n +  " ");}
        System.out.println();
        ad.updateArray(a1);
        System.out.println("主方法==方法调用后数组a1的元素为:");
        for(int n:a1){System.out.print(n +  " ");}

    }
}

运行结果为:

主方法===方法调用前数组a1的元素为:
1 2 3 4 5 
数组a的元素为:
1 2 3 12 5 
主方法==方法调用后数组a1的元素为:
1 2 3 12 5 
Process finished with exit code 0

8. 可变参数列表(传参的数量不确定,可以发生变化)

  一个参数列表中只能存在一个可变参数列表

  public void sum(int... n){}

  注意:数组可以作为可变参数的传值,当定义的方法参数为可变参数时,可以直接传入数组调用

    反之可变参数不能作为数组的传值,当定义的方法参数为数组时,不可以直接传入可变参数调用

package com.vip.method;

public class ArgsDemo1 {

    //查找
    // 如果参数列表中有两个以上参数,可变参数一定是在最后的!
    public void search(int n,int... a){
        boolean flag = false;
        for(int a1:a){
            if(a1==n){
                flag = true;
                break;
            }
        }
        if(flag){
            System.out.println("找到了"+n);
        }
        else{
            System.out.println("没找到"+n);
        }
    }

    public static void main(String[] args) {
        ArgsDemo1 ad1 = new ArgsDemo1();
        ad1.search(3,1,2,3,4,5);
        int[] b = {1,2,3,4,5,6};
        ad1.search(4,b);   //数组可以作为可变参数列表的传参

    }

}

9. 可变参数列表作为方法参数的重载问题

package com.vip.method;

/**
 * 文档注释(可以生成帮助文档)
 * 关于可变参数列表的重载问题
 * @author xxxxxxx
 * @version 1.0
 * 
 */

public class ArgsDemo3 {
    
    public int plus(int a,int b){
        System.out.println("不带可变参数的方法被调用!");
        return a+b;
    }

    public int plus(int... a){
        int sum = 0;
        for(int n:a){
            sum = sum+n;
        }
        System.out.println("带可变参数的方法被调用!");
        return sum;
    }

    public static void main(String[] args) {
        ArgsDemo3 ad3 = new ArgsDemo3();
        System.out.println(ad3.plus(1,2));   //可变参数列表所在的方法是最后被访问的,只要有其他方法,就优先调用其他的
    }
}
原文地址:https://www.cnblogs.com/mpp0905/p/11537364.html