java fangfa_Java方法详解

方法是类或对象的行为特征的抽象,方法是类或对象最重要的组成部分。值得指出的是Java里的方法不能独立存在,所有的方法都必须定义在类里。

不论是从定义方法的语法来看,还是从方法的语法功能来看,都不难发现方法和函数之间的相似性。

实际上,方法确实是由传统的函数发展而来的,方法与传统的函数有着显著不同:在结构化编程语言里,函数是一等公民,整个软件由一个个函数组成;在面向对象编程与压力,类才是一等公民,整个系统由一个个的类组成。

在同一个类的一个方法调用另外一个方法时,如果被调方法是普通方法则默认使用this作为调用者;如果被调用方法是静态方法,则默认使用类作为调用者。也就是说,表面上看起来某些方法可以被独立执行,但实际上还是使用this或者类来作为调用者。

方法的参数传递机制

如果声明方法时包含了形参声明,则调用方法时必须给这些形参指定参数值,调用方法时必须给这些形参指定采纳数值,调用方法时实际传给形参的参数值也被成为实参。

Java里方法的参数传递方式只有一种:值传递。所谓值传递,就是将实际参数值得副本传入方法体内,而参数本身不会受到任何影响。

public class Test {

public static void swap(int a, int b) {

int temp = a;

a = b;

b = temp;

System.out.println("交换时a的值是" + a + ";b的值是" + b);

}

public static void main(String[] args) {

int a = 6;

int b = 9;

swap(a,b);

System.out.println("交换后a的值是" + a + ";b的值是" + b);

}

}

交换时a的值是9;b的值是6

交换后a的值是6;b的值是9

从上面运行结果可以看出,swap()方法里的变量a和b,并不是swap方法里的a和b.swap()方法的a和b只是main方法里变量a和b的复制品。

上面举的例子是基本类型的参数传递,Java对于引用类型的参数传递,一样采用的是值传递方式。但许多出初学者可能对引用类型的参数传递产生一些误会。请看下面的代码:

class DataWrap {

int a;

int b;

}

public class Test {

public static void swap(DataWrap dw) {

int tmp = dw.a;

dw.a = dw.b;

dw.b = tmp;

System.out.println("swap方法里a的成员变量的值是" + dw.a + ";b成员变量的值是" + dw.b);

}

public static void main(String[] args) {

DataWrap dw = new DataWrap();

dw.a = 6;

dw.b = 9;

swap(dw);

System.out.println("交换结束后,a成员变量的值是" + dw.a + ";b成员变量的值是" + dw.b);

}

}

swap方法里a的成员变量的值是9;b成员变量的值是6

交换结束后,a成员变量的值是9;b成员变量的值是6

上面这种参数传递的方式是不折不扣的值传递方式,系统一样复制了dw的副本传入swap()方法,但关键在于dw只是一个引用变量,所以系统复制了dw变量,但并未复制DataWrap对象。

当程序在swap()方法中操作dw参数时,由于dw只是一个引用变量,故实际操作的还是堆内存中的DataWrap对象。

形参个数可变的方法

如果在定义方法时,在最后一个形参类型后加三点(...),则表明该形参数可以接受多个参数值,多个参数值被当做数组传入。

public class Test {

public static void show(int a, String...books) {

for (String tmp: books) {

System.out.println(tmp);

}

}

public static void main(String[] args) {

show(5, "Java", "Pyton", "JavaScript");

}

}

Java

Pyton

JavaScript

从上面show方法代码体来看,形参个数可变的参数本质就是一个数组参数,也就是说,下面两个方法签名的效果签名完全一样。

个数可变的形参只能处于形参列表的最后。一个方法中最多只只能包含一个参数可变的形参。个数可变的形参本质就是一个数组类型的形参。

方法重载

Java允许同一个类里定义多个同名方法,只要形参列表不同就行。如果同一个类中包含了两个或两个以上方法的方法名相同,但形参列表不同,则被称为方法重载。

Java中程序确定一个方法需要三个要素。

调用者,也就是方法的所属者,既可以是类也可以是对象。

方法名,方法的标志。

形参列表,当调用方法时,系统会根据传入的实参列表匹配。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值