天天看点

方法的定义与使用

目录

一、方法的定义

二、定义方法的基本格式:

三、方法的调用

四、方法的优点好处

五、方法的重载

六、扩展

一、方法的定义

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

例如下面代码中,当分别计算10累加到20、20累加到50、100累加到200时,其代码都是使用for循环,使循环的初始值都为开始加的数字,循环到结束的数字。故三者的代码除了循环的初始值和结束值不同,其余都是一样的。所以把该代码段写成一个独立的方法(类似于C语言中的功能子函数)。当要实现从某个值累加到某个值时,直接调用该方法即可。方法类似于其它语言的功能子函数,是一段用来完成特定功能的代码段。

public static void main(String[] args) {
		// 计算10---20累加的和
		int sum1 = sum(10,20);
		System.out.println("10到20累加的和:" + sum1);

		// 计算20---50累加的和
		int sum2 = sum(20,50);
		System.out.println("20---50累加的和:" + sum2);

		// 计算100 ---200累加的和
		int sum3 = sum(100,200);
		System.out.println("100---200累加的和:" + sum3);
		
	}	

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

二、定义方法的基本格式:

1.当参数列表中有多个相同数据类型的形参,声明时也只能分开声明(int num1,int num2),不能一起声明(int num1,num2)。

2.访问权限修饰符不写时,默认为default。

3.在没有返回值的函数中使用return时, return单独成立一条语句, 类似于break或者continue,后面不能跟任何的数值其作用是结束整个方法;

在一个有返回值的函数中使用return 这种情况下函数中必须出现return return后面必须跟一个具体的数值,而且数值的类型和返回值类型必须保持一致 作用:结束整个方法,并且将返回值携带给调用者。

访问权限修饰符 其他修饰符 返回值类型 方法名称(参数列表) {

 //方法体
 return 返回值;
 //如果返回值类型void ,可以不用写return 
}
           

三、方法的调用

语法:方法名称(实参列表);

  • a.实参的数量和类型必须和形参保持完全的一致。
  • b.方法之间只能进行调用,而不能在方法中声明方法,声明的方法和main方法是并列的
  • c.如果定义方法有返回值,运算的结果会返回给调用者,调用者需要定义变量接收数据
  • 参数的传递是值传递
public class PassByValueTest {
	
	public static void swap(int num1,int num2) {
		int temp = num1;
		num1 = num2;
		num2 = temp;
		System.out.printf("swap方法===> num1 = %d,num2 = %d",num1,num2);
	} 
	
	public static void main(String[] args) {
		int num1 = 100; //实参
		int num2 = 200;
		System.out.printf("swap前===> num1 = %d,num2 = %d",num1,num2);
		swap(num1, num2);
		System.out.printf("swap后===> num1 = %d,num2 = %d",num1,num2);
	}
}
           

swap前===> num1 = 100,num2 = 200

swap方法===> num1 = 200,num2 = 100

swap后===> num1 = 100,num2 = 200

方法里的变量只在方法里起作用,即方法里的变量作用域只在方法里。

下面通过堆栈图演示整个程序执行过程。

1步.main方法入栈

方法的定义与使用

2步.swap方法入栈

方法的定义与使用

3.swap方法执行过程:实参传递给形参之后,swap方法内部num1=100,num2=200;执行完交换后

swap方法内部num1=200,num2=100。

方法的定义与使用

4.swap方法执行完成后出栈销毁,main方法里num1值仍为原始值100,num2值仍为原始值200。所以最后打印时,num1=100,num2=200。

方法的定义与使用

四、方法的优点好处

1.把复用的逻辑抽取出来,封装成方法,提高代码的重用性

2.实现相对独立的逻辑,提高代码的维护性,把错误限定在方法内

3.可以对具体实现进行隐藏、封装,让代码看起来更简洁 清晰

  • 简化代码,提高代码的可读性,可维护性,可重用性

五、方法的重载

同一个类中,方法名相同,参数列表不同,即为方法重载。(和方法的修饰符和返回值类型无关)

参数列表的不同包括:

参数个数不同:max(int num1, int num2)   max(int num1, int num2,int num3) 

参数数据类型不同:max(int num1, int num2)   max(float num1, float num2)

参数顺序不同:max(int num1, float num2)   max(float num1, int num2)

六、扩展

区分什么是类方法和实例方法
  • 类方法:
  • 使用static修饰的方法

    ,是属于当前整个类的,而不是属于某个实例的,只能处理static域或调用static方法。
  • 实例方法:
  • 属于对象的方法,由对象来调用。
public class Demo {

    float a;
    //实例方法
     void sum(float num1,float num2){
       a = Max(num1,num2);
    }

    //类方法
    static  float Max(float num1,float num2){
        //取最大值
        return num1 <= num2 ? num2 :num1;
    }

    public static void main(String[] args) {
        Demo demo =new Demo();
        demo.sum(22,33);  //实例方法必需先初始化类的实例,然后通过类的实例才能调用
        Demo.Max(12,9);   // 类方法可以直接通过类名调用

    }

}

           
  • 一个类中的方法可以互相调用。但要注意:实例方法可以调用该类中的其他方法,例如,sum()可以调用Max()。类方法只能调用其他类方法,不能调用实例方法。
  • 类方法又叫静态方法, 实例方法又叫非静态方法。
  • 类方法可以直接通过类名调用,实例方法必需先初始化类的实例,然后通过类的实例才能调用
  • 知识点小结
  • Java中的方法分为类方法和实例方法,区别是类方法中有static修饰,为静态方法,是类的方法。所以在类文件加载到内存时就已经创建,但是实例方法是对象的方法,只有对象创建后才起作用,所以在类方法中不能调用实例方法,但实例方法中可以调用类方法,且实例方法可以互相调用。

一般情况下一个方法包含以下语法:

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

返回值类型:方法可能会返回值。没有返回值returnValueType是关键字void。

方法名:是方法的实际名称,方法名和参数表共同构成方法签名。

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

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

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

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

继续阅读