九、方法的注意事项

  1. 方法可以重载

    • 一个类中,出现多个方法的名称相同,但是它们的形参列表不同,那么这些方法就称为方法重载了。

    • 例如:

      //定义一个方法,输出参数n的值
      public static void print(int n) {
          System.out.println(n);
          }
      
      //重载print方法,输出参数n的值
      public static void print(int n, int m) {
          System.out.println(n + m);
      }
      
      //重载print方法,输出参数n的值
      public static void print(int n, int m, int k) {
          System.out.println(n + m + k);
      }
      
    • 注意:方法重载只关心方法名称相同,形参列表不同(类型不同,个数不同,顺序不同),其他都无所谓。

  2. 无返回值的方法中可以直接通过单独的return;立即结束当前方法的执行。


十、类型转换

(一)自动类型转换

  • 类型范围小的变量,可以直接赋值给类型范围大的变量。

    byte—>short—>int—>long—>float—>double

    char—>int—>long—>float—>double

  • 示例:

    //自动类型转换
    public static void autoTypeConversion() {
        //定义一个int类型的变量
        int a = 10;
        //定义一个double类型的变量
        double b = a;
        System.out.println(a);
        System.out.println(b);
    }
    

(二)强制类型转换

  • 类型范围大的变量,不可以直接赋值给类型范围小的变量,会报错,需要强制类型转换

  • 示例:

    //强制类型转换
    public static void forcedTypeConversion() {
        //定义一个double类型的变量
        double b = 10.0;
        //定义一个int类型的变量
        int c = (int)b;
        System.out.println(b);
        System.out.println(c);
    }
    
  • 注意:强制类型转换可能造成数据丢失(溢出);浮点型 强制转成整型,直接丢掉小数部分,保留整数部分返回


十一、表达式的自动类型提升

表达式的自动类型转换

  • 在表达式中,小范围类型的变量会自动转换成表达式中较大范围的类型,再参与运算。

    byte、short、char—>int—>long—>float—>double

  • 注意:

    • 表达式的最终结果类型由表达式中的最高类型决定
    • 在表达式中,byte、short、char是直接转换成int类型参与运算的。
  • 示例:

    public static double calculate(int a, double b, char c, byte d) {
        System.out.println(a + b + c + d);
        return a + b + c + d;
    }
    

    最后的值为double型


十二、输入输出

(一)输入

  • 即程序读取用户键盘输入的数据

    通过Java提供的Scanner程序来实现

(二)输出

  • 把程序中的数据展示出来

    System.out.println(“Hello World!”);

  • 综合练习:

    //写一个程序,让用户键盘输入用户名和年龄并打印出来
    package com.zzh.method;
      // 从 java.util 工具箱中取出 Scanner 工具
    import java.util.Scanner;
    
    public class ScannerDemo1 {
        public static void main(String[] args) {
            // 创建Scanner对象,用于读取键盘输入
            Scanner scanner = new Scanner(System.in);
            // 接收用户输入的用户名(字符串)和年龄(整数),并汇总打印
            System.out.println("请输入用户名:");
            String name = scanner.nextLine();
            System.out.println("请输入年龄:");
            int age = scanner.nextInt();
            System.out.println("用户名是:" + name + ",年龄是:" + age);
        }
    }
    
  • 注意:

    • System、String在JDK中的Java.lang包下
    • lang包不需要我们导包,是默认的包

十三、运算符

(一)算数运算符

符号 作用 说明
+ -
- -
* -
/ Java中两个整数相除结果还为整数
% 取余 获取的是两个数据相除的余数
  • 注意“+”符号在有些情况下可以做连接符
    • “+”符号与字符串运算的时候用作连接符,结果依然是一个字符串
  • 识别“+”符号是做运算还是连接的方法:
    • 能算则算,不能算就连接在一起

(二)自增自减运算符

符号 作用
自增:++ 放在某个变量的前面或者后面,对变量自身的值加一
自减:– 放在某个变量的前面或者后面,对变量自身的值减一
  • 注意:

    • ++、–只能操作变量,不能操作字面量

    • ++、–如果在变量前后单独使用是没区别的

      int a = 10;
      ++a;
      a++;
      
    • ++、–如果不是单独使用(如在表达式中或同时有其它操作),放在变量前后会存在明显区别

      • 在变量的前面,先对变量+1(-1),再拿变量的值运算

        int a = 10;
        int rs = ++a;//先加再用
        
      • 在变量的后面,先拿变量的值运算,再对变量+1(-1)

        int b = 10;
        int rs = b++;//先用再加
        

(三)赋值运算符

  1. 基本赋值运算符

    • 就是“=”,从右边往左边看

      int a = 10  //把10赋值给左边的a
      
  2. 扩展赋值运算符

    符号 用法 作用 底层代码形式
    += a+=b 加后赋值 a=(a的类型)(a+b)
    -= a-=b 减后赋值 a=(a的类型)(a-b)
    *= a*=b 乘后赋值 a=(a的类型)(a*b)
    /= a/=b 除后赋值 a=(a的类型)(a/b)
    %= a%=b 取余后赋值 a=(a的类型)(a%b)

(四)关系运算符

符号 例子 作用 结果
> a>b 判断a是否大于b 成立返回true,不成立返回false
>= a>=b 判断a是否大于或等于b 成立返回true,不成立返回false
< a<b 判断a是否小于b 成立返回true,不成立返回false
<= a<=b 判断a是否小于或等于b 成立返回true,不成立返回false
== a==b 判断a是否等于b 成立返回true,不成立返回false
!= a!=b 判断a是否不等于b 成立返回true,不成立返回false
  • 判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值:true或者false

(五)三元运算符

  • 格式:

    条件表达式?值1:值2;

  • 执行流程:首先计算关系表达式的值,如果为true,返回值1,如果为false,返回值2

(六)逻辑运算符

  • 把多个条件放在一起运算,最终返回布尔类型的值:true、false

    符号 叫法 例子 运算逻辑
    & 逻辑与 2>1&3>2 多个条件必须都是true,结果才是true;有一个false,结果就是false
    | 逻辑或 2>1|3<5 多个条件中只要有一个是true
    ! 逻辑非 !(2>1) 就是取反:你真我假,你假我真,前后条件的结果不同,才返回true
    ^ 逻辑异或 2>1^3>1 前后条件的结果相同,就直接返回false,前后条件的结果不同,才返回true
    符号 叫法 例子 运算逻辑
    && 短路与 2>10&&3>3 判断结果与“&”一样,过程不同:左边为false,右边不执行
    || 短路或 2>1||3<5 判断结果与“|”一样,过程不同:左边为true,右边不执行

十四、程序流程控制

  • 程序的三种执行顺序:
    • 顺序结构
    • 分支结构
      • if
      • switch
    • 循环结构
      • for
      • while
      • do-while

十五、分支结构

(一)if分支结构

  1. 第一种形式:

    • 格式:

      if(条件表达式1){
          代码1;
      }else if(条件表达式2){
          代码2;
      }
      
    • 执行流程

      • 判断条件表达式的结果,如果为true执行语句体,为false就不执行语句体
    • 注意事项

      • if(条件){},()后不能跟“;”,否则{}中的代码将不受if的控制
      • if语句中,如果大括号控制的只有一行代码,则大括号可以省略不写
  2. 第二种形式:

    • 格式:

      if(条件表达式){
          代码1;
      }else{
          代码2;
      }
      
    • 执行流程:

      • 判断条件表达式的结果,如果为true执行语句体1,为false就执行语句体2
  3. 第三种形式

    • 格式:

      if(条件表达式1){
          代码1;
      }else if(条件表达式2){
          代码2;
      }else if(条件表达式3){
          代码3;
      }
      ...
      else{
          代码n;
      }
      
    • 执行流程:

      • 先判断条件1的值,如果为true则执行语句体1,分支结束;如果为flase则判断条件2的值
      • 如果值为true就执行语句体2,分支结束;如果为false则判断条件3的值
      • ……
      • 如果没有任何条件为true,就执行else分支的语句体n

(二)switch分支结构

  • 是通过比较值是否相等,来决定执行哪条分支

  • 结构:

    switch (表达式) {
        case1:
            执行代码1break;
        case2:
            执行代码2break;
        ...
        default:
            执行代码n;
            break;
    }
    
  • 执行流程:

    • 先执行表达式的值,再拿着这个值去与case后的值进行匹配。
    • 与哪个case后的值匹配为true就执行哪个case块的代码,遇到break就跳出switch分支。
    • 如果全部case后的值与之匹配的都是false,则执行default块的代码。
  • if、switch的比较:各自适合什么业务场景?

    • if在功能上远远强大于switch。
    • 当前条件是区间的时候,建议使用if分支结构来实现
    • 当条件是与一个一个的值比较的时候,建议用switch更合适(格式良好,性能较好,代码优雅)。
  • 使用switch时有哪些注意事项?

    • 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。
    • case给出的值不允许重复,且只能是字面量,不能是变量。
    • 正常使用switch的时候,不要忘记写break,否则会出现穿透现象。
  • switch穿透性能解决什么问题?

    • 存在多个case分支的代码是一样时,可以把代码写到一个case块,其他case块通过穿透性能,穿透到该case块即可,这样可以简化代码。
Logo

CANN开发者社区旨在汇聚广大开发者,围绕CANN架构重构、算子开发、部署应用优化等核心方向,展开深度交流与思想碰撞,携手共同促进CANN开放生态突破!

更多推荐