类的成员之二(方法)


一、方法概述

1.什么是方法?

  • 方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数或过程。
  • 将功能封装为方法的目的是,可以实现代码重用,简化代码
  • Java里的方法不能独立存在,所有的方法必须定义在类里。

2.方法的声明格式及分类

修饰符    返回值类型   方法名(参数类型 形参1, 参数类型 形参2, ….){
         方法体程序代码
          return 返回值;
}

举例:

public class Person {
    private int age;

    public int getAge() { //声明方法getAge()
        return age;
    }

    public void setAge(int i) { //声明方法setAge
        age = i; //将参数i的值赋给类的成员变量age
    }
}

其中:

1.修饰符:public,缺省,private, protected等
2.返回值类型:
(1)没有返回值:void。
(2)有返回值,声明出返回值的类型。与方法体中“return 返回值”搭配使用
具体写法:
				无返回值					有返回值
无参型		void 方法名(){} 		返回值的类型 方法名(){}
有参型		void 方法名(形参列表{}  返回值的类型 方法名(形参列表){}
3.方法名:属于标识符,命名时遵循标识符命名规则和规范,“见名知意”
4.形参列表:可以包含零个,一个或多个参数。多个参数时,中间用“,”隔开
5.返回值:方法在执行完毕后返还给调用它的程序的数据。

注意:

  • 方法被调用一次,就会执行一次

  • 没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可
    以不必使用return语句。如果使用,仅用来结束方法。

  • 定义方法时,方法的结果应该返回给调用者,交由调用者处理。

  • 方法中只能调用方法或属性,不可以在方法内部定义方法。

二、方法重载

1.重载的概念

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

2.重载的特点:

与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。

3.重载示例:

//返回两个整数的和
int add(int x,int y){return x+y;}
//返回三个整数的和
int add(int x,int y,int z){return x+y+z;}
//返回两个小数的和
double add(double x,double y){return x+y;}

例如System.out.println()方法就是典型的重载方法,其内部的声
明形式如下:

public void println(byte x)
public void println(short x)
public void println(int x)
public void println(long x)
public void println(float x)
public void println(double x)
public void println(char x)
public void println(double x)
public void println()

三、方法参数的值传递机制

1.概述

  • 方法,必须由其所在类或对象调用才有意义。若方法含有参数:
    1.形参:方法声明时的参数
    2.实参:方法调用时实际传给形参的参数值
    举例:
public class TestDemo {
    //方法中的num1、num2便是形参
    public static void swap(int num1, int num2) {
        System.out.println("swap方法中:num1 =" + num1 + "\tnum2 =" + num2);
    }
    public static void main(String[] args) {
        int num1 = 1;
        int num2 = 2;
        //调用方法,传递的num1、num2便是实参
        swap(num1,num2);
        System.out.println("main方法中:num1 =" + num1+ "\tnum2 =" + num2);
    }
}

运行结果:

exchange方法中:num1 =1	num2 =2
main方法中:num1 =1	num2 =2

2.易错点

举例:

public class TestDemo {
    //方法中的num1、num2便是形参
    public static void swap(int num1, int num2) {
        //让num1和num2在swap方法中互换值
        int tmp=num1;
        num1=num2;
        num2=tmp;
        System.out.println("swap方法中:num1 =" + num1 + "\tnum2 =" + num2);
    }
    public static void main(String[] args) {
        int num1 = 1;
        int num2 = 2;
        //调用方法,传递的num1、num2便是实参
        swap(num1,num2);
        System.out.println("main方法中:num1 =" + num1+ "\tnum2 =" + num2);
    }
}

结果为:

swap方法中:num1 =2	num2 =1
main方法中:num1 =1	num2 =2

swap方法中的num1、num2互换了值,可是main方法中却没有,原因是swap方法被调用时便被压栈,虚拟机赋予了一块空间,并在这个空间中声明了num1、num2两个变量,并把main方法中的num1、num2的值给了swap方法中num1、num2变量,而做交换的是swap方法中的num1、num2,而随着swap方法执行完毕后,该方法被弹栈,交换成功num1、num2值的空间被释放,main方法中num1、num2的值丝毫没有影响。

解决方法:

import java.util.Date;

public class TestDemo {
    //方法中的num1、num2便是形参
    public static void main(String[] args) {
        Data date = new Data();
        date.m = 1;
        date.n = 2;
        System.out.println("main方法中:m =" +date.m+ "\t n =" + date.n);
        //交换
        TestDemo test=new TestDemo();
        test.swap(date);
        System.out.println("swap方法中:m =" +date.m+ "\t n =" + date.n);
    }
    public void swap(Data data) {
        //让num1和num2在swap方法中互换值
        int tmp = data.m;
        data.m = data.n;
        data.n = tmp;
        System.out.println("swap方法中:m=" + data.m + "\tn =" +data.n);
    }
}
class Data {
    int m;
    int n;
}

结果为:

原始值:m =1	 n =2
swap方法中:m=2	n =1
main方法中:m =2	 n =1

具体可用两句话回答:

 * 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。
 * 如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~四时春~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值