• 【JAVA】【基础语法】Java中的基本语句


    1. 循环语句

      while()循环
      do…while()循环
      for(init ; test ; increment)
      for(variable : iterable) 遍历语句

    注:float和double类型的变量,不能作为循环语句的下标。否则,会导致死循环。

    2. 条件语句

      If...else...

      switch(expr)
        case expr:

    注:
    (1)if...else...条件语句中可以使用使用包装类Boolean代替基本类型boolean,java解释器在执行代码时会自拆箱。
    (2)Switch语句支持的类型:
    byte、char、short、int
    Byte、Character、Short、Integer
    Enum
    String
    (3)Switch语句的执行顺序:进入某个分支后,如何没有break语句,会持续执行后续挨着的case分支内容。【规范方式】若某分支真实意图就是不需要break,增加注释说明。
    (4) 【规范方式】对于if-else if(后续可能有多个else if)类型的条件判断,建议后包含一个else分支。原因:多个else if条件组合的判断逻辑,往往会出现开发人员忽略的分支,需要设置else默认操作。

    3. 标注语句

      labelname: xxxxx
      标注语句一般用于switch、和break语句中。如:

      rowLoop: for(int r = 0; r < rows.length; r++) { // 一个标注循环
        colLoop: for(int c = 0; c < columns.length; c++) { // 另一个
          break rowLoop; // 使用标注
        }
      }
    

    4. 局部变量声明语句

    java语言中不允许使用未初始化的局部变量。一行可以声明多个变量,但是类型必须相同。

      int i, j, k;
    
      float x = 1.0, y = 1.0;
    
      String question = "Really Quit?", response;
    

    局部常量可以使用final关键字声明其为常量。
    Java中任何位置都可以使用变量声明语句,而不用局向在方法或代码块的开头。

    5. synchronized语句

    在多线程编程中经常用到此语句。

      synchronized ( expression ) {
        statements
      }
    

    expression必须是一个对象或数组。能导致破坏的代码必须放到staements内。

    执行语句块之前,java解释器限位expression计算得到的对象或数组获取一个排它锁(exclusive lock),只到语句执行完毕再释放。只要某个进程拥有某个对象的排它锁,其他线程就不能在获取这个锁。

    synchronized也可作为方法的修饰符。应用方法时,此关键字指定整个方法都被锁定。如果 synchronized 关键字应用于类方法(静态方法),执行方法前,Java会先为这个类获取一个排它锁。如果synchronized关键字应用于实例方法,Java 为类的实例(对象)获取一个排它锁。

    6. throw语句

    异常是一种信号,表明发生了某种异常状况或错误。抛出异常的目的是发出信号,表示有异常状况发生。捕获异常的目的是处理异常,使用必要的操作修复。

      throw expression;
    

    expression 的计算结果必须是一个异常对象,说明发生了什么异常或错误。

    Java 解释器执行 throw 语句时,会立即停止常规的程序执行,开始寻找能捕获或处理异常的异常处理程序。

    (1)Java 解释器先在当前代码块中查找异常处理程序,如果有,解释器会退出这个代码块,开始执行异常处理代码。异常处理程序执行完毕后,解释器会继续执行处理程序后的语句。

    (2)如果当前代码块中没有适当的异常处理程序,解释器会在外层代码块中寻找,直到找到为止。如果方法中没有能处理 throw 语句抛出的异常的异常处理程序,解释器会停止运行当前方法,返回调用这个方法的地方,开始在调用方法的代码块中寻找异常处理程序。Java 通过这种方式,通过方法的词法结构不断向上冒泡,顺着解释器的调用堆栈一直向上寻找。

    (3)如果一直没有捕获异常,就会冒泡到程序的 main() 方法。如果在 main() 方法中也没有处理异常,Java 解释器会打印一个错误消息,还会打印一个堆栈跟踪,指明这个异常在哪里发生,然后退出

    7. try、catch、finally语句

    Java 有两种稍微不同的异常处理机制。经典形式是使用 try/catch/finally 语句。
    (1)这个语句的 try 子句是可能抛出异常的代码块。
    (2)try 代码块后面是零个或多个 catch 子句,每个子句用于处理特定类型的异常,而且能处理多个不同类型的异常。如果 catch 块要处理多个异常,使用 | 符号分隔各个不同的异常。
    (3)catch 子句后面是一个可选的 finally 块,包含清理代码,不管 try 块中发生了什么,始终都会执行。
    catch 和 finally 子句都是可选的,但每个 try 块都必须有这两个子句中的一个

    try、 catch 和 finally 块都放在花括号里。花括号是句法必须的一部分,即使子句只包含一个语句也不能省略。

      try {
        // 正常情况下,这里的代码从上到下运行,没有问题。但是,有时可能抛出异常
    
        // 可能是throw语句直接抛出
    
        // 也可能是调用的方法间接抛出
      } catch (SomeException e1) {
    
        // 这段代码中的语句用于处理SomeException或其子类类型的异常对象
    
        // 在这段代码中,可以使用名称e1引用那个异常对象
      }
      catch (AnotherException | YetAnotherException e2) {  //参数为异常类型,必须为Throwable 的子类。
        // 这段代码中的语句用于处理AnotherException、 YetAnotherException
    
        // 或二者的子类类型的异常。在这段代码中,使用名称e2引用传入的异常对象
      } finally {
        // 不管try子句的结束方式如何,这段代码中的语句都会执行:
    
        // 1)正常结束:到达块的末尾
    
        // 2)由break、continue或return语句导致
    
        // 3)抛出异常,由上述catch子句处理
    
        // 4)抛出异常,未被捕获处理
    
        // 但是,如果在try子句中调用了System.exit(),解释器会立即退出,不执行finally子句
       }
    

    有异常抛出时,Java 解释器会寻找一个 catch 子句,它的参数要和异常对象的类型相同,或者是这个类型的子类。

    1. 如果 try 块抛出了异常,而且有处理该异常的 catch 块,那么先执行 catch 块,然后再执行 finally 块。如果本地没有能处理该异常的 catch 块,先执行 finally 块,然后再向上冒泡到能处理该异常最近的 catch 子句

    2. 如果 finally 块使用 return、continue、break 或 throw 语句,或者调用的方法抛出了异常,从而转移了控制权,那么待转移的控制权中止,改为执行新的控制权转移。例如,如果 finally 子句抛出了异常,这个异常会取代任何正在抛出的异常。如果 finally 子句使用了 return 语句,就算抛出的异常还没处理,方法也会正常返回。

    3. try 和 finally 子句可以放在一起使用,不处理异常,也没有 catch 子句。此时, finally 块只是负责清理的代码,不管 try 子句中有没有 break、continue 或 return 语 句,都会执行。

    8. 处理资源的try语句

    Java 7开始提供了一种很有用的机制,能自动关闭需要清理的资源——处理资源 的 try 语句(try-with-resources,TWR)。

      try (InputStream is = new FileInputStream("/Users/ben/details.txt")) {
        // ……处理这个文件
      }
    

    这种新型 try 语句的参数都是需要清理的对象。这些对象的作用域在 try 块中,不管 try 块以何种方式退出,都会自动清理。开发者无需编写任何 catch 或 finally 块,Java 编译 器会自动插入正确的清理代码。

    所有处理资源的新代码都应该使用 TWR 形式编写,因为这种形式比自己动手编写 catch 块更少出错,而且不会遇到麻烦的技术问题,例如终结。

    9. assert语句

    断言语句,由assert语句和boolean表达式组成。默认情况下断言未启用, assert 语句什么作用也没有。

    不过,作为一种调试工具,可以启用断言。启用后,assert 语句会计算表达式。如果表达式的计算结果确是 true,assert 语句什么也不做;如果计算结果是 false,断言失败,assert 语句抛出 java.lang.AssertionError异常。

    在JDK库外,很少使用assert语句,用其测试,大多数情况下是不起作用的。

      assert assertion;
      
      assert assertion : errorcode;
    

    注意:绝不要在自己编写的代码中抛出 AssertionError 异常。

    默认情况下,禁用断言,但是断言代码还是会被编译到类文件中,所以诊断或调试时可以启动断言。
    断言可以全局启动,也可以在启动java解释器的参数中启动:
    (1) 为系统类外的其他类启用断言,java 加上-ea参数
    (2) 为系统类启用断言,java 加上-esa参数
    (3) 为具体某个类启用断言,java加上-ea:包名+类名
    (4) 为某个包的所有类启动断言,java加上-ea:包名…
    (5) 禁用断言,参数为-da,使用方法类同-ea

  • 相关阅读:
    [leetcode] 48. 旋转图像(Java)(模拟)
    [leetcode] 47. 全排列 II
    [leetcode] 46. 全排列(Java)
    [leetcode] 45. 跳跃游戏 II(Java)(动态规划)
    [leetcode] 875. 爱吃香蕉的珂珂(周赛)
    [leetcode] 874. 行走机器人模拟(周赛)
    《数据结构与算法分析:C语言描述》复习——第八章“并查集”——并查集
    《数据结构与算法分析:C语言描述》复习——第六章“排序”——基数排序
    《数据结构与算法分析:C语言描述》复习——第六章“排序”——桶排序
    《数据结构与算法分析:C语言描述》复习——第六章“排序”——快速排序
  • 原文地址:https://www.cnblogs.com/yickel/p/15097340.html
Copyright © 2020-2023  润新知