Java类与对象:方法的定义与调用

对象和类当中的方法
【开放问题】
分别求出1到10、20到30、35到45的整数和。
我们该怎么做呢?
在经过前面的学习,我们很自然的想到通过循环累加求和的方法计算

int sum = 0;
for (int i = 1;i  <= 10;i++)
	sum +=i;
System.out.println("Sum for 1 to 10 is " + sum);

然后对20到30求和再写这样一段代码

sum = 0;
for (int i = 20;i  <= 30;i++)
	sum +=i;
System.out.println("Sum for 20 to 30 is " + sum);

当求35到45又写一段这样的代码

sum = 0;
for (int i = 35;i  <= 45;i++)
	sum += i;
System.out.println("Sum for 35 to 45 is " + sum);

在写完后我们会发现,我们的代码在重复:

int sum = 0;
for (int i = 1;i  <= 10;i++)
	sum +=i;
	
System.out.println("Sum for 1 to 10 is " + sum);


sum = 0;
for (int i = 20;i  <= 30;i++)
	sum +=i;
	
System.out.println("Sum for 20 to 30 is " + sum);


sum = 0;
for (int i = 35;i  <= 45;i++)
	sum += i;
	
System.out.println("Sum for 35 to 45 is " + sum);

只有循环变量的值不同。
那么这样一段代码,可能会被反复使用的时候,我们会不会反复去写呢?显然不会,那么怎么解决呢?
我们的解决方案往往是我们今天要学习的方法

public static int sum(int i1,int i2) {
    
    
	int sum = 0;
	for(int i = i1;i <= i2;i++)
		sum +=i;
	return sum;
}
public static void main(String[] args) {
    
    
	System.out.println("Sum for 1 to 10 is " + sum(1,10));
	System.out.println("Sum for 20 to 30 is " + sum(20,30));
	System.out.println("Sum for 35 to 45 is " + sum(35,45));	
}

把反复执行的独立代码放到一个方法当中,下次要使用的时候就使用该方法并赋予相应的值。这样我们就可以反复使用它了,且得到效果相同。这就是方法解决问题,比原始途径简捷得多。

【方法】

  1. 方法的定义
  2. 方法的调用
  3. 参数传递
  4. 方法的优点

什么是方法?
方法是完成特定功能的、相对独立的程序段(方法是为完成一个操作而组合在一起的语句。)
方法一旦定义,就可以在不同的程序段中多次调用,故方法可以增强程序结构的清晰度,提高编程效率。

1.方法的定义

在Java程序中,方法只能在类中声明,格式如下:

	[修饰符] 返回值类型 方法名 ([参数])
		{
			//声明部分
			//语句部分

第一行为方法头,下面的大括号与大括号里的内容为方法体。


例如:我们定义一个方法来比较两个数得其中较大的数
在这里插入图片描述
定义在方法头的变量被称作形式参数。

2.方法的调用

方法的调用实质上把实际参数传递给形式参数的过程。
对于有返回值的方法作为表达式或表达式的一部分来调用,其在表达式中出现的形式为:
方法名 ([实际参数表])

当方法被调用时,就传递给参数一个值。这个值被称作实际参数或实参。
在这里插入图片描述
方法可以返回一个值。返回值类型是方法返回值的数据类型。如果方法不返回值,那么返回值类型就是关键字void。例如在main方法中返回值类型就是void。
一旦一个方法有返回值类型,那么这个方法里面至少有一条return语句。
多条return语句以后再讲。
调用方法
在这里插入图片描述
注意:
在有返回值的方法而言,return语句是必需的。下图(a)中的方法在逻辑上是正确的,但是它会有编译错误,因为Java认为该方法可能不是返回任何值。
在这里插入图片描述
为解决这个问题,需要删除(a)中的if(n < 0),这样,不管if语句怎么执行,编译器总可以到达return语句。

方法的调用存在特殊的嵌套和递归调用。

(1) 方法的嵌套调用
在一个方法内调用另一个方法称为方法的嵌套调用
(2) 方法的递归调用
递归就是依照自身定义事物的过程,递归是允许方法调用自身的过程。

3.参数传递

值传递(按值传参)

当调用带参数的方法时,实参的值传递给形参,这个过程称为按值传递。如果实参是变量而不是字面值,则将该变量的值传递给形参。无论形参在方法中是否改变,都不影响实际参数。

引用传递

引用就像是一个对象的名字或者别名,引用传递也称为地址传递。方法调用时,如果对方法传入参数,实际上传入的是远程控制的拷贝。形式参数在方法中所做的改变会影响实际参数。

参数的类型时基本数据类型就使用值传递,如果参数属于数组、类、接口等引用数据类型,那么使用的就是引用传递。这两种最主要的区别就是如果传递的实参是不是一个字面值,而是一个变量的时候,我们是将变量的值传递给它,这时候值传递是无论形参在方法中是否改变,都不影响实际参数。而形式参数在方法中所做的改变会影响实际参数。
就是前者不会对方法内部数据作出改变,而后者却改变了方法中的数据。

方法的优点
一旦写出一个方法就可以在任何地方重用它。
信息隐藏:方法的实现细节封装在方法内,对使用该方法的用户来说是隐藏的。
减少复杂度。

猜你喜欢

转载自blog.csdn.net/m0_46700215/article/details/106486199
今日推荐