java学习之方法

java学习之方法,第1张

java学习之方法 方法是什么

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

方法的好处

  • 提高了代码的复用率
  • 让程序逻辑更加清晰
方法定义的形式

方法的调用格式


这里需要强调,因为定义的返回值类型是int所以有返回值,且返回值必须是int类型,如果返回值类型是double,那么返回值就必须是double类型,如果返回值类型是void那么就没有返回值。

方法格式的注意点


package 方法;
import java.util.Scanner;
public class way {
    public static void main(String[] args) {
        isEvenNumber();
    }
    // 定义一个方法判断一个数是否是偶数。
    public static void isEvenNumber(){
        Scanner sc = new Scanner(System.in);
        System.out.println("please input number");
        int num = sc.nextInt();
        if(num % 2 == 0){
            System.out.println(true);
        }else {
            System.out.println(false);
        }
    }
}


案例:设计一个方法用于打印三个数中较大的数

package 方法;
import java.util.Scanner;
public class way {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("please input");
        int a = sc.nextInt();
        System.out.println("please input");
        int b = sc.nextInt();
        System.out.println("please input");
        int c = sc.nextInt();

        getmax(a,b,c);

    }
    // 定义一个方法用于打印较大的数
    public static void getmax(int a,int b,int c){

        int middle = a > b ? a:b;
        int max = middle >c ? middle:c;
        System.out.println(max);
    }

    }


形参与实参

形参:方法定义中的参数 等同于变量定义格式,例如:int number
实参:方法调用中的参数等同于使用变量或常量,例如: 10 number

带返回值方法的定义和调用
package 方法;
import java.util.Scanner;
public class way {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("please input");
        int a = sc.nextInt();
        System.out.println("please input");
        int b = sc.nextInt();
        System.out.println("please input");
        int c = sc.nextInt();

        int max = getmax(a,b,c);
        System.out.println("最大值为" + max);
    }
    // 定义一个方法用于打印较大的数
    public static int getmax(int a,int b,int c){

        int middle = a > b ? a:b;
        int max = middle >c ? middle:c;
//        System.out.println(max);
        return max;
    }

    }


package 方法;

public class way2 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        boolean res = iseven(a,b);
        System.out.println(res);
    }
    public static boolean iseven(int a,int b){
        if (a == b){
            return true;
        }else {
            return false;
        }
    }
}

方法使用的常见问题

方法不能嵌套定义 void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据

package 方法;
import java.util.Scanner;
public class way2 {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
        System.out.println("please input n:");
        int n = sc.nextInt();
        int all = sum(n);
        System.out.println("sum is "+all);
    }
    public static int sum(int n){
        int sum = 0;
        for(int i = 0;i < (n+1);i++){
            sum += i;
        }
        return sum;
    }

}


package 方法;
import java.util.Scanner;
public class way2 {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
        System.out.println("please input n:");
        int n = sc.nextInt();
//        int all = sum(n);
//        System.out.println("sum is "+all);
        boolean bool = jiou(n);
        if(bool == true){
            System.out.println(n + "是偶数");
        }else {
            System.out.println(n + "是奇数");
        }
    }
    public static int sum(int n){
        int sum = 0;
        for(int i = 0;i < (n+1);i++){
            sum += i;
        }
        return sum;
    }
    public static boolean jiou(int a){
        if(a % 2 == 0){
            return true;
        }else {
            return false;
        }
    }

}

方法的调用流程


以上图为例,再方法执行时候,先执行Test,随后执行sum方法,最后执行方法add。再执行方法add时候,传入实参10与20,调用方法将其传入并执行,最终执行输出语句。

以上图为例,方法之间是平级的,可以相互调用,再方法区,先执行mian语句,调用方法study语句;其中study方法中,先执行eat语句,再执行输出语句,最后执行sleep语句;执行完毕。

方法的运行区域在哪里?:栈内存。

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

重点:java传递的不是变量本身,是变量中存储的数值,如果是数组的话就是传递数组的地址

package 方法;

public class way3 {
    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 = 20;
        System.out.println(a); // 20
    }
}

这里最初我们定义的整型形参10,传入change中,传入的不是变量的本身,而是一个拷贝值,所以change中的第一个输出是10,经过赋值后输出20,change执行完毕,注意这时候a的实际数值并没有变换,还是10,因为刚才改变的只是形参的一个拷贝值。

引用类型的参数传递

package 方法;

public class way3 {
    public static void main(String[] args) {
        int a = 10;
//        change(a);
//        System.out.println(a); // 10
        int [] arr = {1,2,3,4};
        System.out.println(arr[1]); // 2
        change(arr); // 200
        System.out.println(arr[1]);

    }
    public static void change(int a){
        System.out.println(a); // 10
        a = 20;
        System.out.println(a); // 20
    }
    // 方法复用;后面介绍。
    public static void change(int[] arr){
        arr[1] = 200;
    }
}



再讲解这道题目之前,还是先介绍一下区别:
System.out.println()这种语法默认是对输入的数据进行换行;而System.out.print()不会对数据进行换行。

package 方法;

public class way4 {
    public static void main(String[] args) {
        int[] arr = {15,50,58,90,45};
        ArrayDemo(arr);

    }

    public static void ArrayDemo(int[] arr){
        if (arr != null && arr.length>0){
            System.out.print("[");
            for(int i = 0;i 


package 方法;

import org.w3c.dom.ls.LSOutput;

public class way4 {
    public static void main(String[] args) {
        int[] arr = {15,50,58,90,45};
        int[] arr1 = null;
//        ArrayDemo(arr1);
//        getindex(arr1,85);  // the arr has some problem
        int index = getindex(arr,100);
        System.out.println("您输入的元素的索引是" + index);

    }

    public static int getindex(int[] arr,int index){
        if(arr != null && arr.length > 0){
            for (int i =0;i < arr.length;i++){
                if(arr[i] == index){
                    return i;
                }
            }
            System.out.println("查无此数,默认返回-1");
        }else {
            System.out.println("the arr has some problem");
        }
        return -1;
    }


package 方法;

import org.w3c.dom.ls.LSOutput;

public class way4 {
    public static void main(String[] args) {
        int[] arr1 = {15,50,58,90,45};
        int[] arr2 = {15,50,58,90,45};
        int[] arr3 = null;
        int[] arr4 = {};
        
        boolean x = compare(arr1,arr4);
        System.out.println(x);

    }

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

    public static int getindex(int[] arr,int index){
        if(arr != null && arr.length > 0){
            for (int i =0;i < arr.length;i++){
                if(arr[i] == index){
                    return i;
                }
            }
            System.out.println("查无此数,默认返回-1");
        }else {
            System.out.println("the arr has some problem");
        }
        return -1;
    }

    public static void ArrayDemo(int[] arr){
        if (arr != null && arr.length>0){
            System.out.print("[");
            for(int i = 0;i 

方法重载

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

package 方法;

public class way5 {
    public static void main(String[] args) {
        fire();
        fire("xxxx");
        fire("xxxx",5);
    }
    public static void fire(){
        System.out.println("##################");
    }
    public static void fire(String location){
        System.out.println("默认向"+location+"发射一枚##");
    }
    public static void fire(String location,int num){
        System.out.println("默认向"+location+"发射"+num +"枚##");
    }

}


方法重载的识别技巧


方法重载举例:

package 方法;

public class way6 {
    public static void main(String[] args) {
    }
    // 新方法
    public static void open(){}
    // 方法重载
    public static void open(int a){}
    // 方法重载
    public static void open(int a ,int b){}
    // 方法重载
    public static void open(int a,double b){}
    // 新方法
    public static void OPEN(){}
}

return关键字

package 方法;

public class way6 {
    public static void main(String[] args) {
        chu(10,0);
    }
    public static void chu(int a,int b){
        if (b == 0){
            System.out.println("输入有误,分母不能为0");
            return;
        }else {
            int c = a / b;
            System.out.println("a / b = "+ c);
        }
    }

}


参考

黑马程序员 https://www.bilibili.com/video/BV1Cv411372m?p=59&t=1.4

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5573017.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存