Java方法

目录

何为方法

方法的定义及调用

方法的定义

注意:

方法使用时的常见问题

方法的调用

案例

案例1.计算1-n的和

案例2:判断一个整数是奇数还是偶数

方法在计算机中的执行

java的参数传递机制

 基本类型的参数传递

引用类型的参数传递

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

引用类型参数传递的案例

数组的传递

案例1:打印int类型的数组内容

案例2:比较两个int类型的数组是否一样,返回true或false

方法重载

注意:

案例

return关键字在方法中单独使用

命令行传参

可变参数(不定向参数)

递归

练习


 

何为方法

System.out.println()

类.对象.方法()

Java方法是语句的集合,它们在一起执行一个功能。

    1.方法是解决一类问题的步骤的有序组合。

    2.方法包含于类或对象中。

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

设计方法的原则:

       方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性。即一个方法只完成一个功能,这样利于后期的扩展。

package method;

public class Demo01 {
    //main方法
    //修饰符     返回值  方法
    public static void main(String[] args) {

        int sum = add(2,3);
        System.out.println(sum);
    }

    //加法
    //修饰符 返回值 方法
    public static int add(int a, int b){
        return a+b;
    }
}

方法的定义及调用

方法的定义

Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段

语法:

方法包括一个方法头和一个方法体。

方法的组成部分:

修饰符:可选,告诉编译器如何调用该方法,定义了该方法的访问类型。

返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需操作,但没有返回值。在这种情况下,returnValueType是关键字void。

方法名:是方法的实际名称。遵守驼峰命名法。方法名和参数表共同构成方法签名。

参数类型:参数像是一个占位符,当方法被调用时,传递 值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。

      形式参数:在方法被调用时用于接收外界输入的数据。

      实参:调用方法时实际传给方法的数据。

方法体:方法体包括具体的语句,定义该方法的功能。

注意:

方法使用时的常见问题

方法的调用

调用方法:对象名.方法名( 实参列表)

Java支持两种调用方法的方式,根本方法是否返回值来选择。

当方法返回一个值的时候,方法调用通常被当做一个值。例如:

int  larger  =  max(30, 40);

如果方法返回值是void,方法调用一定是一条语句。

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

package method;

public class Demo02 {
    public static void main(String[] args) {
        int max = max(10, 20);
        System.out.println(max);
    }

    //比大小
    public  static int max(int num1,int num2){

        int result = 0;

        if (num1==num2){
            System.out.println("num1==num2");
            return 0;   //终止方法
        }
        if (num1>num2){
            result = num1;
        }else {
            result = num2;
        }
        return result;
    }
}

 值传递(Java)和引用传递

案例

案例1.计算1-n的和

package array;

public class ArrayDemo13 {
    //求1-n的和
    public static void main(String[] args) {
        int a1 = add(100);
        System.out.println(a1);
    }

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

案例2:判断一个整数是奇数还是偶数

package method;

public class Demo08 {
    public static void main(String[] args) {
        //判断一个整数是奇数还是偶数
        judge(23);
    }
    public static void judge(int n){
        if (n % 2 == 0){
            System.out.println(n+"是偶数");
        }else {
            System.out.println(n+"是奇数");
        }
    }
}

方法在计算机中的执行

方法在计算机中的执行原理

方法被调用时,是进入到栈内存中运行的

栈:先进后出,用完后会及时清理掉。

       保证程序始终会回到main方法中来,也保证了栈中不会因为累计过多方法而导致内存溢出的问题

java的参数传递机制

 基本类型的参数传递

引用类型的参数传递

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

引用类型参数传递的案例

数组的传递
案例1:打印int类型的数组内容

package method;

public class Demo09 {
    public static void main(String[] args) {
        //打印int类型的数组内容
        int[] arr = {11,22,33,44,55};
        printArray(arr);

        int[] arr2 = null;
        printArray(arr2);

        int[] arr3 = {};
        printArray(arr3);
    }
    public static void printArray(int[] arr){
        if (arr == null){
            System.out.println(arr);  //null
            return;   //跳出当前方法
        }

        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.print("]");
    }
}
案例2:比较两个int类型的数组是否一样,返回true或false

package method;

public class Demo10 {
    public static void main(String[] args) {
        //比较两个int类型的数组是否一样,返回true或false
        int[] arr1=null;
        int[] arr2=null;
        System.out.println(equals(arr1,arr2));
        System.out.println("=================");

        int[] arr3={1,2,3,4};
        int[] arr4={1,2,3};
        System.out.println(equals(arr3,arr4));
    }
    public static boolean equals(int[] arr1,int[] arr2){
        //1.判断arr1和arr2是否为null
       if(arr1 == null && arr2 == null){
           return true;
       }
       //2.判断arr1是null,或者arr2是null
        if (arr1 == null || arr2 == null){
            return false;
        }
        //3.判断两个数组的长度是否一样,如果不一样则直接返回false
        if (arr1.length != arr2.length){
            return false;
        }
        //4.两个数组的长度一样,接着比较他们的内容是否一样
        for (int i = 0; i < arr1.length; i++) {
            //判断当前位置两个数组的元素是否一样,不一样直接返回false
            if (arr1[i] != arr2[i]){
                return false;
            }
        }return true;
    }
}

方法重载

重载就是在一个类中,有相同的函数名称,但形参不同的函数。

方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。

方法的重载的规则:

        1.方法名称必须相同。

        2.参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。

        3.方法的返回类型可以相同也可以不相同。

        4.仅仅返回类型不同不足以成为方法的重载。

注意:

案例

 

return关键字在方法中单独使用

return;可以用在无返回值的方法中,作用是:立即跳出并结束当前方法的执行

命令行传参

使用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]);
        }
    }
}

 

 

可变参数(不定向参数)

JDK1.5开始,Java支持传递同类型的可变参数给一个方法。

在方法声明中,在指定参数类型后加一个省略号(...)。

一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

可变参数须为同一类型。

package method;

public class Demo04 {
    public static void main(String[] args) {
        //创建Demo04类
        Demo04 demo04 = new Demo04();
        //调用对象.test方法
        demo04.test(1,3,5,7,9,11,22);
    }
    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(i[4]);
    }
}

package method;

public class Demo04 {
    public static void main(String[] args) {
      //调用可变参数的方法
      printMax(34,3,3,2,56,5);
      printMax(new double[]{1,2,3});
    }

    public static void printMax(double...numbers) {
        if (numbers.length == 0){
            System.out.println("No argument passed");
            return;
        }

        double result = numbers[0];

        for (int i = 1;i < numbers.length;i++){
            if (numbers[i] > result){
                result = numbers[i];
            }
        }
        System.out.println("The max value is" + result);
    }

}

 

递归

A方法调用A方法,就是自己调用自己

 递归结构包括的两个部分:

        递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。

        递归体:什么时候需要调用自身方法。

package method;

public class Demo05 {
    public static void main(String[] args) {
        System.out.println(f(5));
    }

    //5!   5*4*3*2*1
    public static int f(int n){
        if (n==1){
            return 1;
        }else {
            return n*f(n-1);
        }
    }
}

 

 递归的深度越大,时空性不好,会占用大量的空间内存。

大基数的计算不能用递归。

练习

写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现。

思路推荐:

       1. 写4个方法:加减乘除

       2. 利用循环+switch进行用户交互

       3. 传递需要操作的两个数

       4. 输出结果

package method;

import java.util.Scanner;

public class Demo06 {
    public static void main(String[] args) {

        //用java写一个计算器,要求实现加减乘除功能,并且能够循环接受新的数据,
        //通过用户交互实现
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("请输入第一个数:");
            double i = scanner.nextDouble();
            System.out.println("请输入第二个数:");
            double j = scanner.nextDouble();
            System.out.println("请选择算法符号:");
            String str = scanner.next();
            switch (str){
                case "*":
                    System.out.println(i+"*"+j+"="+(i*j));
                    break;
                case "/":
                    System.out.println(i+"/"+j+"="+(i/j));
                    break;
                case "+":
                    System.out.println(i+"+"+j+"="+(i+j));
                    break;
                case "-":
                    System.out.println(i+"-"+j+"="+(i-j));
                    break;
                default:
                    System.out.println("输入的算法错误!");
            }
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值