• java面向对象-----再谈方法


    目录

    方法的重载(overload)

    可变个数的形参

    方法参数的值传递机制

    基本数据类型的参数传递

     引用数据类型的参数传递

     递归(recursion)方法

    总结


    方法的重载(overload)

    • 重载的概念 :在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数 类型不同即可。
    • 重载的特点: 与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类 型)。调用时,根据方法参数列表的不同来区别。
    1. //返回两个整数的和
    2. int add(int x,int y){return x+y;}
    3. //返回三个整数的和
    4. int add(int x,int y,int z){return x+y+z;}
    5. //返回两个小数的和
    6. double add(double x,double y){return x+y;}

    可变个数的形参

    JavaSE 5.0 中提供了 Varargs( variable number of arguments ) 机制,允许直接定 义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。
    1. //JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量
    2. public static void test(int a ,String[] books);
    3. //JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
    4. public static void test(int a ,String…books
    • 1. 声明格式:方法名(参数的类型名 ...参数名)
    • 2. 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
    • 3. 可变个数形参的方法与同名的方法之间,彼此构成重载
    • 4. 可变参数方法的使用与方法参数部分使用数组是一致的
    • 5. 方法的参数部分有可变形参,需要放在形参声明的最后
    • 6. 在一个方法的形参位置,最多只能声明一个可变个数形参
    1. public void test(String[] msg){
    2. System.out.println(“含字符串数组参数的test方法 ");
    3. }
    4. public void test1(String book){
    5. System.out.println(“****与可变形参方法构成重载的test1方法****");
    6. }
    7. public void test1(String ... books){
    8. System.out.println("****形参长度可变的test1方法****");
    9. }
    10. public static void main(String[] args){
    11. TestOverload to = new TestOverload();
    12. //下面两次调用将执行第二个test方法
    13. to.test1();
    14. to.test1("aa" , "bb");
    15. //下面将执行第一个test方法
    16. to.test(new String[]{"aa"});
    17. }

    方法参数的值传递机制

    方法,必须由其所在类或对象调用才有意义。若方法含有参数:
    • 形参:方法声明时的参数
    • 实参:方法调用时实际传给形参的参数值
    Java 的实参值如何传入方法呢?
    Java 里方法的参数传递方式只有一种: 值传递 。 即将实际参数值的副本 (复制品)传入方法内,而参数本身不受影响。
    • 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
    • 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参

    基本数据类型的参数传递

    1. public static void main(String[] args) {
    2. int x = 5;
    3. System.out.println("修改之前x = " + x);// 5
    4. // x是实参
    5. change(x);
    6. System.out.println("修改之后x = " + x);// 5
    7. }
    8. public static void change(int x) {
    9. System.out.println("change:修改之前x = " + x);
    10. x = 3;
    11. System.out.println("change:修改之后x = " + x);
    12. }

     引用数据类型的参数传递

    1. public static void main(String[] args) {
    2. Person obj = new Person();
    3. obj.age = 5;
    4. System.out.println("修改之前age = " + obj.age);// 5
    5. // x是实参
    6. change(obj);
    7. System.out.println("修改之后age = " + obj.age);// 3
    8. }
    9. public static void change(Person obj) {
    10. System.out.println("change:修改之前age = " + obj.age);
    11. obj.age = 3;
    12. System.out.println("change:修改之后age = " + obj.age);
    13. }
    14. 其中Person类定义为:
    15. class Person{
    16. int age;
    17. }

     递归(recursion)方法

    • 递归方法:一个方法体内调用它自身。
    • 方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执 行无须循环控制。
    • 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死 循环
    1. //计算1-100之间所有自然数的和
    2. public int sum(int num){
    3. if(num == 1){
    4. return 1;
    5. }else{
    6. return num + sum(num - 1);
    7. }
    8. }

    总结

    1. /*
    2. ① 方法的重载(overload)
    3. 定义:在同一个类中,允许存在一个以上的同名方法,只有他们的参数个数,
    4. 或者参数类型不同
    5. “两同一不同” 同一个类,相同方法名
    6. 参数列表不同,参数个数不同,参数类型不同
    7. 判断是否是重载
    8. 跟方法的权限修饰,返回值类型,形参变量名,方法体都没有关系
    9. 在通过对象调用方法时:如何确定某一个指定的方法
    10. 方法名---》参数列表
    11. ② 可变个数形参的方法
    12. 具体使用
    13. 1.可变个数形参的格式,数据类型...变量名
    14. 2.当调用可变个数形参的方法时,传入的参数个数 可以是 01个 多个
    15. 3.可变个数形参的方法与本类中方法名相同,形参不同的方法直接构成重载
    16. 4.可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载
    17. 5.可变个数形参的方法中,必须声明在末尾
    18. 6.可变个数形参在形参方法中,最多声明一个可变形参
    19. ③ 关于变量的赋值
    20. 如果变量是基本数据类型 此时赋值的是变量所保存的数据值
    21. 如果变量是引用数据类型 此时赋值的是变量所保存的地址值
    22. ④ 方法形参的传递机制 :值传递
    23. 形参:方法定义时,声明在小括号内的参数
    24. 实参:方法调用时,实际传递给形参的数据
    25. 值传递机制
    26. 如果参数是基本数据类型,实参赋给形参的是,实参真实存储的数据值
    27. ⑤ 递归方法 一个方法体内调用它自身
    28. 方法递归包含了一种隐式的循环,他会重复的执行某段代码,但是这种重复是无需循环控制的
    29. 递归一定要向指定方向递归,否则这种递归就造成了无穷递归 类似于死循环
    30. */
    31. class instanceTest {
    32. public static void main(String[] args) {
    33. System.out.println("*****基本数据类型******");
    34. int m=10;
    35. int n=10;
    36. System.out.println("m="+m+",n="+n);
    37. n=20;
    38. System.out.println("m="+m+",n="+n);
    39. System.out.println("*****引用数据类型******");
    40. order o1=new order();
    41. o1.id=100;
    42. order o2=o1;
    43. System.out.println("o1.id="+o1.id+",o2.id="+o2.id);
    44. o2.id=200;
    45. System.out.println("o1.id="+o1.id+",o2.id="+o2.id);
    46. int[] arr=new int[]{5,8,4,7,0};
    47. // 形参的传递机制:基本数据类型
    48. order test=new order();
    49. test.swap(m,n);
    50. System.out.println("m="+m+",n="+n);
    51. // 形参的传递机制:复杂数据类型
    52. for(int i=0;i<arr.length-1;i++){
    53. for(int j=0;j<arr.length-1-i;j++){
    54. if(arr[j]>arr[j+1]){
    55. test.swap2(arr,j,j+1);
    56. }
    57. }
    58. }
    59. //输出查看
    60. for(int i=0;i<arr.length;i++) {
    61. System.out.println(arr[i]);
    62. }
    63. int sum=test.sum(3);
    64. System.out.println(sum);
    65. }
    66. //重载
    67. public void getSum(int i, int j){
    68. System.out.println(i+j);
    69. }
    70. public void getSum(String i, int j){
    71. System.out.println(i+j);
    72. }
    73. //可变个数形参的方法
    74. public void show(String ...strs){
    75. System.out.println("String ...strs");
    76. }
    77. }
    78. class order{
    79. int id;
    80. int m;
    81. int n;
    82. public void swap(int m,int n){
    83. int temp=m;
    84. m=n;
    85. n=temp;
    86. }
    87. public void swap2(int[] arr, int i,int j){
    88. int temp=arr[i];
    89. arr[i]=arr[j];
    90. arr[j]=temp;
    91. }
    92. public int sum( int n){
    93. if(n==1){
    94. return 1;
    95. }else{
    96. //n=3+sum(2)
    97. //n=3+sum(1)
    98. //n=2+1=3
    99. //n=3+3=6
    100. return n+sum(n-1);
    101. }
    102. }
    103. }

  • 相关阅读:
    IDEA 2024 配置 Maven 创建 Spring Boot 项目
    C++11
    Python 潮流周刊第 39 期(摘要)
    2024 王道考研-数据结构
    RACH Procedure Log Analysis
    (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
    CSS 渐变彩色字体
    【python学习第11节:numpy】
    从零开始langchain-chatchat部署
    selenium 自动化测试——WebDriver API
  • 原文地址:https://blog.csdn.net/qq_63358859/article/details/128150784