Java底子知识篇05——方法

莱莱  金牌会员 | 2024-5-16 05:15:18 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 890|帖子 890|积分 2670

哈喽,大家好!我是白夜,今天给大家聊聊Java内里的方法。
一、什么是方法

1.1、方法的概念与作用

1.1.1、概念

​        方法(method),又称为函数(function),代表一段“独立的”“可复用”的“功能”代码
1.1.2、作用

​        方法可以复用代码,减少了代码的冗余,提高效率和程序的可读性。
1.2、方法的定义

定义一个方法的语法
  1. /**
  2. * 修饰符 返回值类型 方法名称([参数类型 形参 ...]){
  3. *  方法体代码;
  4. *  (return 返回值;)
  5. * }
  6. */
  7. public static void main(String[] args) {
  8.     int num1 = 10;
  9.     int num2 = 20;
  10.     System.out,println(Add(a,b));
  11. }
复制代码

  • 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
  • 返回值类型∶方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法实验所需的操纵,但没有返回值。在这种情况下,returnValueType 是关键字 void。
  • 方法名:是方法的实际名称,采用小驼峰命名。方法名和参数表共同构成方法签名。
  • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。

    • 形式参数:在方法被调用时用于接收外界输入的数据。
    • 实参:调用方法时实际传给方法的数据。

注意事项:

  • 修饰符:现阶段直接使用 static 固定搭配,static 表现静态的,后面根据详细使用场景是否用static 修饰
  • 参数列表:假如方法没有参数,()中什么都不写,假如有参数,需指定参数类型,多个参数之间使用逗号隔开
定义方法时一般有以下几种情况:

  • 无参数无返回值的
  • 无参数有返回值的
  • 有参数无返回值的
  • 有参数有返回值的
  1. //无参数无返回值
  2. public void m1() { }
  3. //无参数有返回值
  4. public int m2() {
  5.         return 1;
  6. }
  7. //有参数无返回值
  8. public void m3(String s) { }
  9. //有参数有返回值
  10. public boolean m4(int a) {
  11.         return true;
  12. }
复制代码
定义方法时基本上就是以上几种情况,可以选择加或者不加访问权限修饰符和静态修饰符,但是返回值类型和方法签名是必不可少的。
注意:有返回值的方法,必须在方法体中,使用 return 关键字,返回对应类型的值。比如你定义的方法返回值是int类型,那么在大括号中就必须有  return 整数数字; 假如 return 后的数据类型与返回值类型不同,也会报错。
在 java 中,return 关键字和 break 关键字的作用相似,在当前这行代码使用 return 关键字时表现代码到此运行结束,下边的代码都不会再实验了。假如写了就会报错。
二、方法的调用

2.1、语法

重要是看否是静态方法(被 static 修饰)
静态方法:在本类中可以直接使用方法名(参数)调用,在其他类中使用类名点方法名(参数)调用
非静态方法:在任何地方调用,都需要创建类的引用对象,使用引用对象点方法名(参数)调用
  1. //静态方法调用 类名+方法名()
  2. User.getName();//无参的
  3. User.getName("毛毛"); //有参的
  4. //非静态方法调用 对象名+方法名()
  5. User u = new User();
  6. u.getName();//无参的
  7. u.getName("毛毛"); //有参的
复制代码
注意事项:

  • 定义方法的时候, 不会实验方法的代码. 只有调用的时候才会实验
  • 一个方法可以被多次调用
  • 一个方法只完成一个功能,方法完成的功能越多,复用性越差
2.2、形参和实参的关系

Java中方法的形参的名字可以随意取,对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。

  • 形参:方法定义中的参数
  • 实参:方法调用中的参数
  1. //n1和n2就是形参
  2. public static int add (int n1,int n2) {   
  3.     return n1 + n2;
  4. }
  5. add(num1,num2);//num1和num2就是实参,在方法被调用时,形参n1用来保存num1的数值,形参n2用来保存num2的数值
复制代码
2.3、关键字return

return用于结束当前方法的实验。

return的使用有两种形式:

  • return; ==> 只能用于方法的返回值类型是 void 的场景
  • return 结果值; ==>只能用于方法的返回值类型不是 void 的场景。
  1. public void max(int[] a){
  2.     for(int i = 0; i<int.length i++;){
  3.         if(int[i] == a){
  4.             //结束方法
  5.             return;
  6.         }
  7.     }
  8. }
  9. public int max(int a, int b){
  10.     //返回值
  11.     return a > b ? a : b
  12. }
复制代码
三、方法的重载

3.1、重载(OverLoad)

3.1.1、方法重载的概念和作用

概念:在同一个类中,方法名类似,形参列表不同,就是方法重载。
作用:

  • 可以减少命名冲突
  • 可以减少程序员记忆本钱,方便解决了一类题目
3.1.2、语法
  1. //构成重载关系,以为个数不一样
  2. public static int sum (int a,int b) {
  3.     return a + b;
  4. }
  5. public static int sum (int a,int b,int c) {
  6.     return a + b + c;
  7. }
  8. //构成重载,因为参数个数不同
  9. public static float func (int a) {
  10.     //方法体
  11. }
  12. public static int func (int a,int b) {
  13.     //方法体
  14. }
  15. //不构成重载关系,因为参数都一样,不用管返回值!
  16. public static void func (int a) {
  17.     //方法体
  18. }
  19. public static int func (int a) {
  20.     //方法体
  21. }
  22. public class Test1 {
  23.     public static void func (int a) {
  24.         //方法体
  25.     }
  26. }
  27. //不构成重载关系,因为分别在两个类中
  28. public class Test2 {
  29.     public static int func (double b) {
  30.         //方法体
  31.     }
  32. }
复制代码
3.1.3、注意事项


  • 方法名必须类似。
  • 参数列表必须不同(参数的个数不同、参数的类型不同、类型的序次必须不同)。
  • 与返回值类型是否类似无关。
  • 编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法。
3.2、方法签名

概念:
​        方法签名,是来区分不同方法的标示符。
语法:
​        方法名和参数列表
方法名不同或者参数列表不同都可以用来区分不同的方法。
详细方式:方法全路径名+参数列表+返回值类型,构成方法完备的名字。
四、方法使用的注意事项


  • 方法调用的时候,实参(变量/值) 必须和 形参完全一致
  • 一个类中,只能有一个方法签名
  • 返回值类型是 void,不能用变量接受,不能放在打印语句中
  • 返回值不是void,必须return一个数据,并且数据类型和返回值类型完全一致
  • return的数据,假如在if或者循环语句中,必须包管在条件语句和循环语句不创建的情况下,也有数据的返回
五、方法的参数传递

java 的参数传递:
基本数据类型传递的是:值本身
引用数据类型传递的是:变量在堆中的引用地点
5.1、值传递

值传递(Pass by Value)是指将参数的副本传递给方法,即方法内部对参数进行的操纵不会影响到原始的参数
  1. /**
  2. *        堆栈分析:
  3. *                基本类型是"值"的传递
  4. *                引用类型是引用地址的传递
  5. *                方法内部对参数的修改只会在方法内部生效,不会影响到方法外部
  6. */
  7. public class _04StackHeap {
  8.     public static void main(String[] args) {
  9.         int a = 1;
  10.         System.out.println("改变前:" + a);// 1
  11.         // 调用change方法
  12.         change(a);
  13.         System.out.println("改变后================ :" + a);// 1       
  14.     }
  15.     public static void change(int a) {
  16.         a = 2;
  17.         System.out.println("改变中-------:" + a);// 2
  18.     }
  19. }
复制代码
5.2、引用传递

引用传递(Pass by Reference)是指将参数的引用地点值传递给方法,即方法内部对参数的操纵会影响到原始的参数。
  1. *        堆栈分析:
  2. *                基本类型是"值"的传递
  3. *                引用类型是引用地址的传递
  4. *                在引用传递中,方法内部对参数的修改会直接反映到方法外部
  5. */
  6. public class _05StackHeap {
  7.     public static void main(String[] args) {
  8.         int[] arr = {1, 2};
  9.         System.out.println("改变前:" + arr[0]);// 1
  10.         System.out.println("改变前:" + arr[1]);// 2
  11.         // 调用change方法
  12.         change(arr);
  13.         System.out.println("改变后================ :" + arr[0]);// 6
  14.         System.out.println("改变后================ :" + arr[1]);// 9
  15.     }
  16.     public static void change(int[] arr) {
  17.         arr[0] = 6;
  18.         arr[1] = 9;
  19.         System.out.println("改变中-------:" + arr[0]);// 6
  20.         System.out.println("改变中-------:" + arr[1]);// 9
  21.     }
  22. }
复制代码
5.3、可变参数

5.3.1、语法
  1. //参数类型... 变量名
  2. public void aa(int a, int... bs){ };
复制代码
特点:

  • 一个方法中只能指定一个可变参数,
  • 它必须是方法的最后一个参数,任何普通的参数必须在它之前声明。
  1. public static int getSum(int... arr) {
  2.         System.out.println(arr);// 地址
  3.         System.out.println(arr.length);// 数组长度
  4.         int sum = 0;
  5.         for (int e : arr) {
  6.                 System.out.println("元素:" + e);
  7.                 sum += e;
  8.         }
  9.         return sum;
  10. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莱莱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表