day05-方法

方法

方法是什么

方法就是功能,供别人使用,在实际开发中会编写很多重复的代码,如果重复编写的代码出现过多,就会造成后期维护难,方法的使用可以解决代码的重复问题

例子

尚未使用前

class A{
    //学习的代码
}
class B{
    //学习的代码
}
class C{
    //学习的代码
}

使用方法后

Class Student{
    方法(){
        学习的代码
    }
}
class A{
    //学习的代码
    Student.A();
}
class B{
    //学习的代码
    Student.A();
}
class C{
    //学习的代码
    Student.A();
}

定义语法

[访问修饰符] [是否静态] 返回值类型 方法名([参数类型 参数1,参数类型 参数2....]){
    [return 返回值;(方法返回值用void声明可以不使用)]
}

DRY(Don’t Repeat Yourself)

不要重复自己的代码

方法中的组成部分

方法就是一个功能,供别人的使用,返回别人需要的东西

public static void main(String[] args){
    修饰
}
  1. 谁能访问:public(公开的:谁都能访问)/private(私有的:只有自己能够访问)

  2. 怎么访问:static(静态的),表示当前方法使用 类名.方法名()

  3. 返回什么数:void(没有返回),表示当前方法不需要任何的返回

    如果需要返回值,这里写返回值的类型(比如:int double String),必须要使用return关键字返回,返回值的类型必须和方法上定义的类型一致

    方法如果需要返回值,就需要保证无论在什么清空下都要使用return将结果返回

  4. 功能名称:使用什么名字来访问到当前方法,使用任意的标识符(不能使用关键字)来表示

  5. 给方法我什么:参数,方法在完成功能的时候,需要调用者给的数据

    形式参数:存在哪些未知的因数,也就是定义方法括号里面的参数(简称:形参)

    实际参数:在实际调用的时候给的参数就是实际参数(简称:实参)

    参数有多少个,实参就有多少个,类型也要一致

注:方法必须在类里面、方法不能嵌套方法

返回值类型未必一定要有return,可以使用抛出错误的形式终止方法

class Test{
	public static void main(String[] args){
		error();
	}
	//RuntimeException运行时报错    
	public static int error(){
		throw new RuntimeException("");
	}
}

方法中的可变参数

class Test{
	public static void main(String[] args){
		getSum(1,2,3,4);
	}

	public static int getSum(int...nums){
		int sum = 0 ;
		for(int i = 0 ; i < nums.length ; i++){
			sum+=nums[i];
		}
		return sum;
	}
}
------------------------------------底层转换------------------------------------
class Test
{
    public static void main(String[] paramArrayOfString){
        getSum(new int[] { 1, 2, 3, 4 });
    }

    public static int getSum(int[] paramArrayOfInt) {
        int i = 0;
        for (int j = 0; j < paramArrayOfInt.length; ++j)
            i += paramArrayOfInt[j];

        return i;
    }
}

可以看出可变参数就是一个一维数组,底层会将实参转换成第一个数组传到方法里

使用:

  1. 可变参数必须是最后一个参数,否则无法使用,也避免了多参数的歧义性
  2. 方法参数最多只能有一个可变参数

使用场景:

  1. 用于不定长的相同意义参数的时候

重载

为什么要使用重载

相似的功能不想定义不同名字

原则

使用原则:“两同一不同”

同一个类,方法名相同

方法的参数列表不同(参数类型,参数个数,参数顺序)

  • 参数类型,参数个数,参数顺序任意一个不同,就叫参数列表不同
例:
class OverloadDemo{
    public static void main(String[] args){
        
    }
    
    //求两个int之和
    public static int getSum(int num1,int num2){
        System.out.println("int类型");
        return num1+num2;
    }
    
    //求两个double之和
    public static double getSum(double num1,double num2){
        System.out.println("double类型");
        return num1+num2;
    }
}

方法参数传递机制

基本类型
public static void main(String[] args){
    int i = 1;
    change(i);
    System.out.println("main"+i);//1
}

public static void change(int i){
    System.out.println("change"+i);//1
    i=10;
    System.out.println("change"+i);//10
}

在这里插入图片描述

引用类型
public static void main(String[] args){
    int[] i = {1,2,3,4};
    change(i);
    System.out.println("main"+java.util.Arrays.toString(i));//[1,10,3,4]
}

public static void change(int[] i){
    System.out.println("change"+java.util.Arrays.toString(i));//[1,2,3,4]
    i[1]=10;
    System.out.println("change"+java.util.Arrays.toString(i));//[1,10,3,4]
}

在这里插入图片描述

总结
  1. 基础类型参数传递:传递的是数字
  2. 引用类型参数床底:传递的是地址(栈中的栈帧指向堆中的地址)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值