一:方法的定义

  1. /*访问修饰符 返回数据类型 方法名(形参列表..) {
  2. //方法体
  3. 语句;
  4. return 返回值;
  5. }*/
  6. public void Sakura(int age){
  7. System.out.println("hello")
  8. }
  1. 形参列表: 表示成员方法输入cal(int n) , getSum(int num1, int num2)
  2. 返回数据类型: 表示成员方法输出, void表示没有返回值
  3. 方法主体: 表示为了实现某一功能代码块
  4. return 语句不是必须的。

    二:方法的调用机制原理

    image.png

    三:方法的注意事项和使用细节

    1:访问修饰符

    如果不写默认访问,[有四种: public, protected, 默认, private], 具体在后面说

    2:返回数据类型

  • 一个方法最多有一个返回值[思考,如何返回多个结果返回数组]

    1. public int[] getSumAndSub(int n1, int n2) {
    2. int[] resArr = new int[2]; //
    3. resArr[0] = n1 + n2;
    4. resArr[1] = n1 - n2;
    5. return resArr;
    6. }//可以用数组返回多个值
  • 返回类型可以为任意类型,包含基本类型或引用类型(数组,对象)

  • 如果方法要求有返回数据类型,则方法体中最后的执行语句必须为return值 ; 而且要求返回值类型必须和return的值类型一致或兼容

    1. public double f1() {
    2. double d1 = 1.1 * 3;
    3. int n = 100;
    4. return n; // int ->double √
    5. //return d1; //double -> int ×
    6. }
  • 如果方法是void,则方法体中可以没有return语句,或者只写return ;


  • 方法不能嵌套 ```java public void f4() { //错误 public void f5() {

    } }

  1. <a name="P1zXw"></a>
  2. ## 3:形参列表
  3. - **_一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开_**
  4. - **_比如 getSum ( int n1, int n2 )_**
  5. - **_参数类型可以为任意类型,包含基本类型或引用类型,比如printArr(in[][] map)_**
  6. - **_调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数!_**
  7. ```java
  8. //定义的方法
  9. public void sakura(int a,double b){
  10. }
  11. //调用方法
  12. xx.sakura(1,4.5) // √
  13. xx.sakura(1.7,4) // ×
  • 方法定义时的参数称为形式参数,简称形参
  • 方法调用时的传入参数称为实际参数,简称实参,
  • 实参和形参的类型要一致或兼容、个数、顺序必须一致! ```java //定义的方法 public void sakura(int a,double b){

}

//调用方法 xx.sakura(1,4.5) // √ xx.sakura(1.7,4) // ×

  1. <a name="iA4mD"></a>
  2. ## 4:方法调用细节
  3. - **_同一个类中的方法调用:直接调用即可_**
  4. - **_跨类中的方法A类调用B类方法:需要通过对象名调用。_**
  5. - **_比如: 对象名 . 方法名 ( 参数 ) ; _**
  6. - **_案例演示:B类sayHello 调用print( )_**
  7. - **_跨类的方法调用和方法的访问修饰符相关_**
  8. <a name="E6ruZ"></a>
  9. # 四:方法的传参数机制
  10. <a name="ExAk7"></a>
  11. ## 1:基本数据类型的传参机制
  12. <a name="qr28P"></a>
  13. ## 2:引用数据类型的传参机制
  14. ![33fe91e5-5cb0-4cae-93c1-9a0ed0fb92f0.png](https://cdn.nlark.com/yuque/0/2022/png/2595924/1658940634575-b107ca72-322e-41e7-ae86-6f9690c1e466.png#clientId=u24d0a396-cf2b-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=ua2d41cea&margin=%5Bobject%20Object%5D&name=33fe91e5-5cb0-4cae-93c1-9a0ed0fb92f0.png&originHeight=474&originWidth=701&originalType=binary&ratio=1&rotation=0&showTitle=false&size=114169&status=done&style=none&taskId=u20f88e0b-6560-46d7-b5ec-36d1b7a5329&title=)![image.png](https://cdn.nlark.com/yuque/0/2022/png/2595924/1658940564062-f09398ab-d42a-4380-9b1c-487698e46e7b.png#clientId=u24d0a396-cf2b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=519&id=u5645b2a0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=519&originWidth=732&originalType=binary&ratio=1&rotation=0&showTitle=false&size=120903&status=done&style=none&taskId=u9de18eb8-d378-4d98-9f1f-a1a2f017b05&title=&width=732)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/2595924/1658940771533-9c251c65-ca24-4b4f-b0cb-19781251894d.png#clientId=u24d0a396-cf2b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=517&id=u8dfb15fe&margin=%5Bobject%20Object%5D&name=image.png&originHeight=517&originWidth=893&originalType=binary&ratio=1&rotation=0&showTitle=false&size=170974&status=done&style=none&taskId=ub5875558-1f1b-4876-825f-45f84e86964&title=&width=893)
  15. ```java
  16. public class MethodParameter02 {
  17. //编写一个 main 方法
  18. public static void main(String[] args) {
  19. //测试
  20. B b = new B();
  21. // int[] arr = {1, 2, 3};
  22. // b.test100(arr);//调用方法
  23. // System.out.println(" main 的 arr 数组 ");
  24. // //遍历数组
  25. // for(int i = 0; i < arr.length; i++) {
  26. // System.out.print(arr[i] + "\t");
  27. // }
  28. // System.out.println();
  29. //测试
  30. Person p = new Person();
  31. p.name = "jack";
  32. p.age = 10;
  33. b.test200(p);
  34. //测试题, 如果 test200 执行的是 p = null ,下面的结果是 10
  35. //测试题, 如果 test200 执行的是 p = new Person();..., 下面输出的是 10
  36. System.out.println("main 的 p.age=" + p.age);//10000
  37. }
  38. }
  39. class Person {
  40. String name;
  41. int age;
  42. }
  43. class B {
  44. public void test200(Person p) {
  45. //p.age = 10000; //修改对象属性
  46. //思考
  47. p = new Person();
  48. p.name = "tom";
  49. p.age = 99;
  50. //思考
  51. //p = null;
  52. }
  53. //B 类中编写一个方法 test100,
  54. //可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化
  55. public void test100(int[] arr) {
  56. arr[0] = 200;//修改元素
  57. //遍历数组
  58. System.out.println(" test100 的 arr 数组 ");
  59. for(int i = 0; i < arr.length; i++) {
  60. System.out.print(arr[i] + "\t");
  61. }
  62. System.out.println();
  63. }
  64. }

五:成员方法返回类型是引用类型应用实例

1:打印二维数组

编写类 MyTools 类,编写一个方法可以打印二维数组的数据。

  1. package test;
  2. /**
  3. * 作者:sakura
  4. * 日期:2022年07月28日 00:33
  5. */
  6. public class arry {
  7. public static void main(String[] args) {
  8. int[][] sakura={{1,2,3,5},{2,4,6,8},{4,5,6,9},{1,9,3,0}};
  9. MyTools myTools = new MyTools();
  10. myTools.printArray(sakura);
  11. }
  12. }
  13. class MyTools{
  14. public void printArray(int[][] arr){
  15. for (int i = 0; i < arr.length; i++) {
  16. for (int j = 0; j < arr[i].length; j++) {
  17. System.out.print(arr[i][j]+" ")
  18. //这里如果写成arr[j]会打印四个一维数组的地址
  19. }
  20. System.out.println();
  21. }
  22. }
  23. }

2:对象克隆

编写一个方法 copyPerson,可以复制一个 Person 对象,返回复制的对象。克隆对象, 注意要求得到新对象和原来的 对象是两个独立的对象,只是他们的属性相同

  1. public class MethodExercise02 {
  2. //编写一个 main 方法
  3. public static void main(String[] args) {
  4. Person p = new Person();
  5. p.name = "milan";
  6. p.age = 100;
  7. //创建 tools
  8. MyTools tools = new MyTools();
  9. Person p2 = tools.copyPerson(p);
  10. //到此 p 和 p2 是 Person 对象,但是是两个独立的对象,属性相同
  11. System.out.println("p 的属性 age=" + p.age + " 名字=" + p.name);
  12. System.out.println("p2 的属性 age=" + p2.age + " 名字=" + p2.name);
  13. //可以同 对象比较看看是否为同一个对象
  14. System.out.println(p == p2);//false
  15. }
  16. }
  17. class Person {
  18. String name;
  19. int age;
  20. }
  21. class MyTools {
  22. public Person copyPerson(Person p) {
  23. //创建一个新的对象
  24. Person p2 = new Person();
  25. p2.name = p.name; //把原来对象的名字赋给 p2.name
  26. p2.age = p.age; //把原来对象的年龄赋给 p2.age
  27. return p2;
  28. }
  29. }