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.方法的定义
在Java程序中,方法只能在类中声明,格式如下:
[修饰符] 返回值类型 方法名 ([参数])
{
//声明部分
//语句部分
}
第一行为方法头,下面的大括号与大括号里的内容为方法体。
例如:我们定义一个方法来比较两个数得其中较大的数
定义在方法头的变量被称作形式参数。
2.方法的调用
方法的调用实质上把实际参数传递给形式参数的过程。
对于有返回值的方法作为表达式或表达式的一部分来调用,其在表达式中出现的形式为:
方法名 ([实际参数表])
当方法被调用时,就传递给参数一个值。这个值被称作实际参数或实参。
方法可以返回一个值。返回值类型是方法返回值的数据类型。如果方法不返回值,那么返回值类型就是关键字void。例如在main方法中返回值类型就是void。
一旦一个方法有返回值类型,那么这个方法里面至少有一条return语句。
多条return语句以后再讲。
调用方法
注意:
在有返回值的方法而言,return语句是必需的。下图(a)中的方法在逻辑上是正确的,但是它会有编译错误,因为Java认为该方法可能不是返回任何值。
为解决这个问题,需要删除(a)中的if(n < 0),这样,不管if语句怎么执行,编译器总可以到达return语句。
方法的调用存在特殊的嵌套和递归调用。
(1) 方法的嵌套调用
在一个方法内调用另一个方法称为方法的嵌套调用
(2) 方法的递归调用
递归就是依照自身定义事物的过程,递归是允许方法调用自身的过程。
3.参数传递
值传递(按值传参)
当调用带参数的方法时,实参的值传递给形参,这个过程称为按值传递。如果实参是变量而不是字面值,则将该变量的值传递给形参。无论形参在方法中是否改变,都不影响实际参数。
引用传递
引用就像是一个对象的名字或者别名,引用传递也称为地址传递。方法调用时,如果对方法传入参数,实际上传入的是远程控制的拷贝。形式参数在方法中所做的改变会影响实际参数。
参数的类型时基本数据类型就使用值传递,如果参数属于数组、类、接口等引用数据类型,那么使用的就是引用传递。这两种最主要的区别就是如果传递的实参是不是一个字面值,而是一个变量的时候,我们是将变量的值传递给它,这时候值传递是无论形参在方法中是否改变,都不影响实际参数。而形式参数在方法中所做的改变会影响实际参数。
就是前者不会对方法内部数据作出改变,而后者却改变了方法中的数据。
方法的优点
一旦写出一个方法就可以在任何地方重用它。
信息隐藏:方法的实现细节封装在方法内,对使用该方法的用户来说是隐藏的。
减少复杂度。
推荐阅读
-
Java类与对象:方法的定义与调用
-
02.初识类与对象,类的定义与对象的和创建
-
Java实现的图片高质量缩放类定义与用法示例
-
关于Java跨域Json字符转类对象的方法示例
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第20章:接口的定义与使用:课时91:代理设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时29:数组与方法
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时26:数组引用传递分析
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第1章:类与对象:课时5:对象内存分析
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时34:对象数组
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第1章:类与对象:课时6:对象引用分析