方法的概念
1. 什么是方法
- 方法是类或对象行为特征的抽象,也称为函数。
- Java里的方法不能独立存在,所有的方法必须定义在类里。
方法也可以描述为是某个功能的执行体, 一个方法通常对应一个功能.
2. 为什么使用方法
比如要想完成某种功能, 需要执行10行代码, 我们在程序中需要这个功能时,就把这10行代码写出来就可以了, 但是如果要多次使用这个功能, 虽然可以通过复制这10行代码的方式来完成功能, 但是效率低, 并且不利于维护. 所以我们通常把具有特定独立功能的一些代码封装到一个方法中, 这样, 只需要简单地调用这个方法就可以自动完成功能了.
3 方法和属性的关系
Java里的方法不能独立存在,所有的方法必须定义在类里, 而属性也是定义在类里的, 所以方法和属性都是隶属于类的, 方法和属性是平等的关系.
属性用于描述事物的特征数据.
方法用于描述事物的功能行为.
方法的声明与调用
1. 方法的声明语法
修饰符 返回值类型 方法名(参数类型 形参1,参数类型 形参2,….){
程序代码
return 返回值;
}
其中:
形式参数:在方法被调用时用于接收外部传入的数据的变量。
参数类型:就是该形式参数的数据类型。
返回值:方法在执行完毕后返还给调用它的程序的数据。
返回值类型:方法要返回的结果的数据类型。
实际参数:调用方法时实际传给函数形式参数的数据。
注意 :
- 一个类中可以有多个方法。
- 方法中只能调用方法,不可以在方法内部定义方法。
- 方法声明不是方法调用
如果某个方法只是单纯的执行一些代码, 并没有计算结果返回, 那么返回值类型就是void
表示方法没有返回值, 此时方法中的return可以省略, 或者也可以仅使用return; 表示方法结束.
2. 方法的声明的构成
方法声明的构成包括 方法签名 + 方法体
3. 方法签名
方法签名包括 返回值类型 方法名(形参类型1 形参1, 形参类型2 形参2…)
方法名作用是用于定位方法是哪一个, 因为在一个类中可以有多个方法.
参数列表表示方法在执行时需要的数据, 参数列表也可以为空, 表示方法执行时不需要数据.
如上例中的int add(int a, int b)
4. 方法体
方法体就是方法签名后面的{}以及其中的所有内容, 方法体才是方法在调用时实际执行的代码
那么方法签名的作用是什么呢? 签名是一个方法调用的参考, 方法在调用时应该严格按照方法签名来调用, 以防止出错.
如上面例子中的
{
int c = a + b;
return c;
}
5. 方法的调用
方法可以任何可以有语句的位置调用, 比如另一个方法中, 或另一个类的某方法中
调用语法是
对象引用.方法名(实参值1, 实参值2…);
对象引用是方法所在的类的对象, 实参值1, 2 是根据方法签名中要求的数据类型而实际传递给方法的值.
public class PersonTest {
public static void main(String[] args) { Person t = new Person(); t.test(); // 当执行程序时, 打印输出”test()” } } |
6.方法的返回值
有的方法会返回一个结果值, 如上面的方法int add(int a, int b)
如果直接调用这个方法, 而不接收其返回值, 这个方法会执行并返回结果, 但是在main方法中没有保存, 返回值结果被丢弃了.
方法的返回值就是方法调用本身, 如上例中方法调用整体t.add(100,200) 就可以看作是300这个值了, 当然, 前提是方法必须先都执行完才能返回300, 所以我们可以选择接收返回值.
重载
- 重载的概念
在同一个类中,允许存在一个以上的同名方法,只要它们的参数不同即可。
参数不同的含义是仅参数个数不同 或者 类型不同 或者 顺序不同.
注意 :
参数不同不包含参数名的不同.
- 如何重载
在同一个类中写同名方法, 保证参数不同即可
- 重载的方法的调用
调用重载方法取决于实参列表, 和形参列表要匹配才可以, 或者也可以是被形参列表兼容.
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.判 断:
与void show(int a,char b,double c){}构成重载的有:
- void show(int x,char y,double z){}
- int show(int a,double c,char b){}
- c) void show(int a,double c,char b){}
- d) boolean show(int c,char b){}
- e) void show(double c){}
- f) double show(int x,char y,double z){}
- g) void shows(double c){}
4 参数传递机制
1. 为什么要传参
有的方法在执行时, 需要用到一些值, 这些值在执行时必须要由调用者传递(告诉)给方法, 方法才可以正确执行
2. 传参的本质是什么
传参的本质是方法在调用时, 把实参的值赋值给形参(形参是局部变量), 也称为传值调用
3. 方法调用的内存结构
注意 : 方法返回值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})); // 编译器会自动做这件事,也可以手工创建数组 } } |
上一篇: java培训之面向对象的属性
下一篇: 大数据培训之Job提交流程源码和切片源码详解