Java培训之面向对象的方法

方法的概念

1. 什么是方法

  • 方法是类或对象行为特征的抽象,也称为函数。
  • Java里的方法不能独立存在,所有的方法必须定义在类里。

方法也可以描述为是某个功能的执行体, 一个方法通常对应一个功能.

2. 为什么使用方法

比如要想完成某种功能, 需要执行10行代码, 我们在程序中需要这个功能时,就把这10行代码写出来就可以了, 但是如果要多次使用这个功能, 虽然可以通过复制这10行代码的方式来完成功能, 但是效率低, 并且不利于维护. 所以我们通常把具有特定独立功能的一些代码封装到一个方法中, 这样, 只需要简单地调用这个方法就可以自动完成功能了.

3 方法和属性的关系

Java里的方法不能独立存在,所有的方法必须定义在类里, 而属性也是定义在类里的, 所以方法和属性都是隶属于类的, 方法和属性是平等的关系.

属性用于描述事物的特征数据.

方法用于描述事物的功能行为.

方法的声明与调用

1. 方法的声明语法

修饰符 返回值类型 方法名(参数类型 形参1,参数类型 形参2,….){

     程序代码

     return 返回值;

其中:

形式参数:在方法被调用时用于接收外部传入的数据的变量。

参数类型:就是该形式参数的数据类型。

返回值:方法在执行完毕后返还给调用它的程序的数据。

返回值类型:方法要返回的结果的数据类型。

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

注意 :

  • 一个类中可以有多个方法。
  • 方法中只能调用方法,不可以在方法内部定义方法。
  • 方法声明不是方法调用

如果某个方法只是单纯的执行一些代码, 并没有计算结果返回, 那么返回值类型就是void

表示方法没有返回值, 此时方法中的return可以省略, 或者也可以仅使用return; 表示方法结束.

Java培训

2. 方法的声明的构成

方法声明的构成包括 方法签名 + 方法体

3. 方法签名

方法签名包括 返回值类型 方法名(形参类型1 形参1, 形参类型2 形参2…)

方法名作用是用于定位方法是哪一个, 因为在一个类中可以有多个方法.

参数列表表示方法在执行时需要的数据, 参数列表也可以为空, 表示方法执行时不需要数据.

 

如上例中的int add(int a, int b)

4. 方法体

方法体就是方法签名后面的{}以及其中的所有内容, 方法体才是方法在调用时实际执行的代码

那么方法签名的作用是什么呢? 签名是一个方法调用的参考, 方法在调用时应该严格按照方法签名来调用, 以防止出错.

如上面例子中的

{

    int c = a + b;

    return c;

}

5. 方法的调用

方法可以任何可以有语句的位置调用, 比如另一个方法中, 或另一个类的某方法中

调用语法是

 

对象引用.方法名(实参值1, 实参值2…);

 

对象引用是方法所在的类的对象, 实参值1, 2 是根据方法签名中要求的数据类型而实际传递给方法的值.

java培训

public class PersonTest {

 

       public static void main(String[] args) {

              Person t = new Person();

              t.test(); // 当执行程序时, 打印输出”test()”

}

}

 

6.方法的返回值

有的方法会返回一个结果值, 如上面的方法int add(int a, int b)

如果直接调用这个方法, 而不接收其返回值, 这个方法会执行并返回结果, 但是在main方法中没有保存, 返回值结果被丢弃了.

java培训

方法的返回值就是方法调用本身, 如上例中方法调用整体t.add(100,200) 就可以看作是300这个值了, 当然, 前提是方法必须先都执行完才能返回300, 所以我们可以选择接收返回值.

java培训

重载

  1. 重载的概念

 

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

 

参数不同的含义是仅参数个数不同 或者 类型不同 或者 顺序不同.

 

注意 :

       参数不同不包含参数名的不同.

  1. 如何重载

在同一个类中写同名方法, 保证参数不同即可

java培训

  1. 重载的方法的调用

调用重载方法取决于实参列表, 和形参列表要匹配才可以, 或者也可以是被形参列表兼容.

public class PersonTest {

 

       public static void main(String[] args) {

              Person t = new Person();

        System.out.println(t.add(30, 50)); // 调用 int add(int a, int b)

System.out.println(t.add(209, 0.502)); // 调用 double add(int a, double b)

}

}

 

 

 

 

 

  1. 重载的作用

在调用同名方法时, 只需要实参不同即可, 调用者调用这个方法就变得简单, 也不用再记忆多个不同的方法名. 前提是这些重载的方法有类似的功能.

 

  1. 重载的练习

1.判 断:

与void show(int a,char b,double c){}构成重载的有:

  1. void show(int x,char y,double z){}
  2. int show(int a,double c,char b){}
  3. c) void show(int a,double c,char b){}
  4. d) boolean show(int c,char b){}
  5. e) void show(double c){}
  6. f) double show(int x,char y,double z){}
  7. g) void shows(double c){}

 

4 参数传递机制

1. 为什么要传参

有的方法在执行时, 需要用到一些值, 这些值在执行时必须要由调用者传递(告诉)给方法, 方法才可以正确执行

2. 传参的本质是什么

传参的本质是方法在调用时, 把实参的值赋值给形参(形参是局部变量), 也称为传值调用

3. 方法调用的内存结构

java培训

java培训

注意 : 方法返回值30保存在一个临时空间中, 方法调用结束后返回给调用者后就消失.

5 可变参数

5.1. 什么是可变参数

当一个方法中的参数类型都相同, 但是个数不确定的情况下.

5.2.如何声明可变参数

//下面采用数组形参来定义方法

public void test(int a ,String[] books);

//以可变个数形参来定义方法

public void test(int a ,String…books);

注意 : 以上两个方法不可以共存.

public class VarArgs {

 

       /*类中的方法的功能类似, 但是参数个数不确定

       public int avg(int a, int b) {

              return (a + b) / 2;

       }

 

       public int avg(int a, int b, int c) {

              return (a + b + c) / 3;

       }

 

       public int avg(int a, int b, int c, int d) {

              return (a + b + c + d) / 4;

       }*/

 

       // 可变参数, 参数的个数可以是任意个, 只能放在参数列表的最后

       public int avg(String a, int… values) { // int…是数组, 同时又能兼容任意个数参数

              int sum = 0;

              for (int i = 0; i < values.length; i++) {

                     sum += values[i];

              }

              return sum / values.length;

       }

}

 

3.可变参数的本质是什么

可变参数的本质上是方法在调用时, 实际传递的是数组.

 

 

 

public class VarArgsTest {

 

public static void main(String… args) {

VarArg va = new VarArg();

 

System.out.println(va.avg(2)); // 一个参数可以

              System.out.println(va.avg()); // 不传参数也可以

System.out.println(va.avg(null)); // 传null也可以

              System.out.println(va.avg(10, 20, 40, 50)); // 任意多个也可以

              System.out.println(va.avg(10, 20, 40, 50,70, 80, 100, 5, 2, 3));

 

 

int[] arr = new int[]{2, 3, 4, 5};

              System.out.println(va.avg(arr)); // 直接传数组也可以

 

              System.out.println(va.avg(new int[]{10, 20})); // 编译器会自动做这件事,也可以手工创建数组

       }

}

 


上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
电话:010-56253825
邮箱:info@atguigu.com
地址:北京市昌平区宏福科技园综合楼6层(北京校区)

 深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)