Java - day5 - 方法


Java - day5 - 方法

方法是什么

  • 方法是一种语法结构,它可以把一段代码封装成一个功能,以方便重复调用。

使用方法的好处是?

  • 提高了代码的复用性。
  • 让程序的逻辑更清晰。

实例:

public class one_方法 {
    public static void main(String[] args) {
        int c1 = sum(15,50);
        System.out.println(c1);  //65

        int c2 = sum(80,50);
        System.out.println(c2);    //130
    }

    public static int sum(int a ,int b){
        int c = a + b;
        return c;
    }
}

方法定义的完整格式

修饰符 返回值类型 方法名(形参列表){
       方法体代码(需要执行的功能代码)
        return返回值;
}

示例: 使用方法对2个整数求和并返回。

public static int sum(int a ,int b){
            int c = a + b;
            return c;
        }

方法的调用格式

  • 方法必须调用才可以跑起来,调用格式:方法名(.….);

方法格式的注意点

  • 方法的修饰符:暂时都使用public static修饰。
  • 方法申明了具体的返回值类型,内部必须使用return返回对应类型的数据。
  • 形参列表可以有多个,甚至可以没有;如果有多个形参,多个形参必须用“,”隔开,且不能给初始化值。

方法的其他写法

  • 方法定义时:返回值类型、形参列表可以按照需求进行填写。

如果方法不需要返回结果,不需要接收参数,应该怎么办,要注意什么?

  • 方法不需要返回结果,则申明返回值类型为void;方法不需要参数,则形参列表可以不写。
  • 方法没有申明返回值类型,内部不能使用return返回数据。

实例:

public class Void方法 {
    public static void main(String[] args) {
        print();
    }

    public static void print() {
        for (int i = 0; i < 3; i++) {
            System.out.println("hello");
        }
    }
}

方法常见问题

  • 方法的编写顺序无所谓。
  • 方法与方法之间是平级关系,不能嵌套定义。
  • 方法的返回值类型为void(无返回值),方法内则不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部
    则必须使用return返回对应类型的数据。
  • return语句下面,不能编写代码,因为永远执行不到,属于无效的代码。
  • 方法不调用就不执行,调用时必须严格匹配方法的参数情况。
  • 有返回值的方法调用时可以选择定义变量接收结果,或者直接输出调用,甚至直接调用;无返回值方法的调用只能直接调用一下。

方法定义的技巧说明

  • 修饰符:public static(暂时固定的)
  • 方法名称:自己取名,有意义,英文小写,驼峰模式。(有意义的名字即可)
  • 方法体代码:完成自己需要写的功能代码即可。(具体需求具体实现)

真正需要关注的就两点:

  • 分析方法是否需要申明返回值类型;
  • 分析方法是否需要接收参数。

实例:

public class 一减N {
    public static void main(String[] args) {
        System.out.println("1~5的和:" + sum(5));
        System.out.println("1~100的和:" + sum(100));


    }

    public static int sum(int n) {
        int sum = 0;
        for (int i = 0; i <=n; i++) {
            sum += i;
        }
        return sum;
    }
}

实例:

public class 奇数偶数 {
    public static void main(String[] args) {
        check(3);
        check(4);
    }

    public static void check(int number) {
        if (number % 2 == 0){
            System.out.println(number + "偶数");
        }else{
            System.out.println(number + "奇数");
        }
    }
}

实例:

public class 最值 {
    public static void main(String[] args) {
        int[] ages ={4,56,67,1};
        int max = maxData(ages);
        System.out.println("最大值为:" + max);
    }

    public static int maxData(int[] arr) {
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max){
                max = arr[i];
            }
        }
        return max;
    }
}

方法的调用流程-内存图解

  • 方法没有被调用的时候,在方法区中的字节码文件中存放方法被调用的时候,需要进入到栈内存中运行
  • 方法的运行区域在哪里? —— 栈内存。

实例:

public class 方法调用流程 {
       //吃饭,学习,睡觉
        public static void main(String[] args) {
            study();
        }
            public static void sleep(){
                System.out.println("睡觉");
            }

        public static void eat(){
            System.out.println("吃饭");
        }
        public static void study(){
            eat();
            System.out.println("学习");
            sleep();
        }
}

Java的参数传递机制:值传递

  • 在传输实参给方法的形参的时候,并不是传输实参变量本身,而是传输实参变量中存储的值,这就是值传递。

注意:

  • 实参:如在方法内部定义的变量。
  • 形参:如在定义方法时,“()”中所声明的参数。

形参和实参各指什么?

  • 形参:以方法为例,就是方法定义时的变量。
  • 实参:在方法内部定义的变量。

java的参数传递机制是什么样的?

  • 值传递,传输的是实参存储的值。

实例:

public class 值传递 {
    public static void main(String[] args) {
        int a =10;
        change(a);
        System.out.println(a); //10

    }

    public static void change(int a) {
        System.out.println(a);  //10
        a = 30;
        System.out.println(a);//30
    }
}

引用类型的参数传递

实例:

public class 引用类型的参数传递 {
    public static void main(String[] args) {
        int[] arr = {10,20,50};
        acv(arr);
        System.out.println(arr[1]); //203

    }

    public static void acv(int[] arr) {
        System.out.println(arr[1]);  //20
        arr[1]=203;
        System.out.println(arr[1]);  //203
    }
}

基本类型和引用类型的参数在传递的时候有什么不同?

  • 都是值传递。
  • 基本类型的参数传输存储的数据值。
  • 引用类型的参数传输存储的地址值。

实例:

public class 打印整型数组内容 {
    public static void main(String[] args) {
        int[] ages = {10,50,555,88};
        print(ages);

        int[] numbers = {3,2,88};
        print(numbers);
    }

    public static void print(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
//            if (i == arr.length - 1){
//                System.out.print(arr[i]);
//            }else {
//                System.out.print(arr[i] + ",");
//            }

            //三元运算符来表达可简化
            System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ",");

        }
        System.out.println("]");
    }
}

实例:

public class 数组查询指定元素的索引 {
    public static void main(String[] args) {
        int[] arr ={11,55,155,1748,77};
        int index =search(arr,155);
        System.out.println("数组查询指定元素的索引:" + index);
    }

    public static int search(int[] arr, int data) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == data){
                return i;  //在数组内输出其索引
            }
        } return -1;  //在数组外输出 “-1”
    }
}

实例:

public class 两个数是一样的吗 {
    public static void main(String[] args) {
        int[] arr1 = {10,80,87};
        int[] arr2 = {10,80,87};
        System.out.println(compare(arr1,arr2));
    }

    public static boolean compare(int[] arr1,int[] arr2) {
        if (arr1.length == arr2.length){
            for (int i = 0; i < arr1.length; i++) {
                if (arr1[i] != arr2[i]){
                    return  false;
                }
            }
            return true;
        }else {
            return false;
        }
    }
}

方法重载的作用

  • 可读性好,方法名称相同提示是同一类型的功能,通过形参不同实现功能差异化的选择,这是一种专业的代码设计。

实例:

public class MethodDemo1 {
    public static void main(String[] args) {
        //目标:识别方法重载的形式。并理解其调用流程,最后需要知道使用方法重载的好处。fire();
        fire();
        fire("岛国");
        fire("岛国", 1000);
    }

    public static void fire() {
        System.out.println("默认发射一枚武器给米国~~~");
    }

    public static void fire(String location) {
        System.out.println("默认发射一枚武器给" + location + " ~~");
    }

    public static void fire(String location,int number) {
        System.out.println("默认发射" + number + "枚武器给" + location + " ~~~");
    }
}

方法重载的识别技巧

  • 只要是同一个类中,方法名称相同、形参列表不同,那么他们就是重载的方法,其他都不管!
    (如︰修饰符,返回值类型都无所谓)
  • 形参列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称。

实例:

public class ReturnDemo {
    public static void main(String[] args) {
        //目标:明确return关键字的作用。
        //输出main开始。。您输入的数据有问题,除数不能是0!! main结束。。
        System.out.println( "main开始。。");
        chu( 10 , 0);
        System.out.println( "main结束。。");
    }

        public static void chu(int a, int b){
            if(b == 0){
                System.out.println("您输入的数据有问题,除数不能是0!! ");
                return;  ////立即跳出当前方法,并结束当前方法的执行。
        }
            int c = a / b;
            System.out.println("结果是:" + c);
       }
}

声明:三二一的一的二|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Java - day5 - 方法


三二一的一的二