Java学习笔记Day05

Day05 总结笔记 01-方法介绍

  • 介绍 : 方法 | 函数 (method) 一段具有独立功能的代码块, 不调用就不执行.
  • 好处 :
    • 提高代码的可阅读性
      • 可以将挤在一起的臃肿代码, 按照功能进行分类管理
    • 提高代码的复用性
      • 原本需要重复编写的代码, 现在抽取到方法中, 只需要写一次, 对方法进行多次调用即可.
    • 问题 : 方法是否可以提高程序的执行效率 ?
    • 回答 : 不可以 !
02-方法的定义和调用格式
  • 方法通用定义格式 :
public static 返回值类型 方法名 (参数列表) { 方法体; return 结果数据; }public static : 目前暂时记住, 修饰符 返回值类型 : 跟方法返回的结果数据有关. 方法名 : 见名知意, 小驼峰命名法 参数列表 : 方法运行之前所需要的材料 方法体 : 方法中真正执行的逻辑代码 return : 1. 结束方法 2. 将结果返回给调用者.

  • 定义方法的设计思路
1. 参数问题: 自己这方法中, 要使用的数据, 是否有灵活性的要求? 需求: 设计一个方法, 打印10次HelloWorld --> 不要 需求: 设计一个方法, 打印n次HelloWorld --> 要参数 需求: 设计一个方法, 求三个小数的最大值 --> 要参数问题: 要参数的话, 要几个? 要什么类型的? 需求: 设计一个方法, 求三个小数的最大值 数量: 3个 类型: double 代码: double a, double b, double c需求: 设计一个方法, 从数组中找出最小值 数量: 1个 类型: 数组 代码: int[] arr2. 返回值步骤1: 先写代码逻辑 步骤2: 观察, 自己这个方法有没有结果产生没有结果: voidpublic static void print(){ for(int i = 1; i <= 10; i++){ System.out.println("HelloWorld"); } }有结果: 通过return语句返回, 并修改返回值类型public static int getMax(int a, int b){ int c = a > b ? a : b; return c; }

  • 方法的调用
1. 带返回值的调用1). 单独调用(不推荐)getMax(10,20); 2). 赋值调用(推荐, 灵活)int max = getMax(10,20); System.out.println(max); if(max % 2 == 0){ ... }for(int i = 1; i <= max; i++){ ... }3). 输出调用(偶尔用)System.out.println(getMax(10,20)); 2. 不带返回值的1) 只能单独调用print();

  • 使用方法调用示例:
    /* 带返回值方法的调用 :1. 单独调用(不推荐) : 数据没有接收add(10,20); 2. 赋值调用(推荐) : 很灵活int result = add(10,20); 3. 输出调用(偶尔用)System.out.println(add(10, 20)); */ public static void main(String[] args) { // 生成方法返回值的快捷键 // 方法名().var + 回车 // ctrl + alt + V int result = add(10, 20); System.out.println(result); }// 需求: 计算两个整数的和 public static int add(int a, int b) { int c = a + b; return c; }

03-方法的常见问题
1. 方法不调用就不执行 2. 方法与方法之间是平级关系, 不允许嵌套定义 3. 方法的编写顺序, 和执行顺序无关 4. 如果一个方法的返回值类型为void, 表示此方法没有返回值, 可以省略return语句不写 如果非要写的话, 只能写成 return; 5. return语句下面, 不允许写代码, 因为执行不到, 属于无效代码. 6. 如果一个方法有具体的返回值(不是void), 一定要通过return语句带回结果数据, 无论什么情况下public static int getMax(int a, int b){ if(a > b){ return a; }else if(b > a){ return b; } // 编译错误: 当前的两个return都被条件所控制, 编译期就认为, 两个条件要都是false, 此方法就没有返回值 }public static int getMax(int a, int b){ if(a > b){ return a; }else if(b > a){ return b; }else{ return a; }}

04-方法重载 Overload
  • 介绍 : 方法与方法之间的一种关系
  • 目标1 : 能够独立识别出方法与方法之间是否是正确重载
在同一个类中, 方法名相同, 参数不同, 与返回值无关 参数不同: 1. 个数不同2. 类型不同3. 顺序不同

  • 目标2 : 能够理解方法重载带来的好处
不需要记忆过多繁琐的方法名字了假设没有方法重载printInt(10); printString("abc"); 有方法重载:println(10); println("abc"); 会根据实际参数的类型, 自己去匹配方法.

05-方法练习
  • 将 test 包中的案例掌握
  • 示例:
    public class MethodTest2 { public static void main(String[] args) { check(10); System.out.println("-----------------"); print(20, 80); System.out.println("-----------------"); printHelloWorld(10); }public static void check(int num) { if (num % 2 == 0) { System.out.println(num + "是一个偶数"); } else { System.out.println(num + "是一个奇数"); } }public static void printHelloWorld(int n) {// -1if (n < 1) { System.out.println("您传入的数据有误, 请检查"); return; }// 代码要是能够走到这里, 代表数据绝对是正确的. for (int i = 1; i <= n; i++) { System.out.println("HelloWorld"); }}public static void print(int start, int end) { if (start > end) { System.out.println("您传入的数据有误, 请检查"); return; } for (int i = start; i <= end; i++) { if (i % 2 == 0) { System.out.println(i); } }}

06-方法的参数传递
  • 方法的参数传递基本数据类型 : 传递的是数据值
  • 方法的参数传递引用数据类型 : 传递的是地址值
  • 【Java学习笔记Day05】示例:
    public class ArgsDemo2 { /* 问题: Java中到底是值传递, 还是址传递?回答: 1. 基本数据类型: 传递的是数据值 2. 引用数据类型: 传递的是地址值值传递, 地址值也是值. */ public static void main(String[] args) { int[] arr = {10, 20, 30}; System.out.println("调用change方法前:" + arr[1]); // 20 change(arr); System.out.println("调用change方法后:" + arr[1]); // 200 }public static void change(int[] arr) { arr[1] = 200; }

    推荐阅读