• Javaday12(Lambda,枚举,异常,断言)


    一、lambda表达式

       lambda表达式主要是替换了原有匿名内部类的写法,也就是简化了匿名内部类的写法。

        (parameters)->expression 或者 (parameters)->{ statements; }

    • Lambda表达式语法示例:
      • 不需要参数,返回值为 5  :() -> 5    
      • 接收一个参数(数字类型),返回其2倍的值:  x -> 2 * x  
      • 接受2个参数(数字),并返回他们的差值:  (x, y) -> x – y  
      • 接收2个int型整数,返回他们的和:  (int x, int y) -> x + y  
      • 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void):  (String s) -> System.out.print(s)  

      lambda是方法的实现;

      lambda是延迟执行的;  

      lambda表达式编译后只是定义了一个方法调用点,具体调用那个方法要到运行时才能决定。

      lambda表达式对返回的实例类型有严格的要求:

        必须是接口

        接口中只有一个需要实现的抽象方法,因为如果接口中有超过1个抽象方法需要实现的情况并不适用于lambda表达式

      每一个lambda表达式都对应一个接口类型。而“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会匹配到这个抽象方法。因为默认方法不算抽象方法,所以也可以给函数式接口添加默认方法。

      

      lambda表达式中是无法访问到默认方法的。

      可以直接访问标记了final的外层局部变量,或者实例的成员变量以及静态变量

      

    二、:: 操作符

      JDK8中引入了一个新的操作符(::)

      :: 操作符主要用作静态方法、成员方法、构造方法的绑定

      

    三、枚举

      

           

      

       

      所有的枚举都继承自java.lang.Enum类。由于Java不支持多继承机制,所以枚举对象不能再继承其他类。

      枚举可以实现接口。

      不能有public构造方法,可以有其他修饰符修饰的构造方法,这样保证客户代码没有办法新建一个enum实例。

      所有的枚举都是public static final 的

        

    • Enum默认实现了java.lang.Comparable接口。
    • Enum覆载了了toString方法
    • Enum提供了一个valueOf方法,这个方法和toString方法是相对应的
    • Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值
    • Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定

    四、异常

       Throwable:包含有异常(Exception)和错误(Error)。

    • Throwable类有两个子类:Exception和Error;所有异常都是Exception类的直接或间接子类;所有错误都是Error的直接或间接子类;

        异常:指的是程序运行时发生的不正常事件;异常能够被程序处理,保证程序继续运行下去;例如,除数为0,文件没有找到,输入的数字格式不对......

        错误:错误程序没法处理,例如内存泄漏,发生错误后,一般虚拟机会选择终止程序运行,程序员需要修改代码才能解决相关错误:

        

             

      Exception分为:非运行时异常(检查异常)运行时异常(非检查异常)

       

        运行时异常:也称为非检测异常(unchecked Exception), 这些异常在编译期不检测,程序中可以选择处理,也可以不处理。如果不处理运行时会中断,但是编译没问题;

        非运行时异常:也称为检测异常(checked Exception), 是必须进行处理的异常,如果不处理,将发生编译期错误;  

      

        RuntimeException的子类都是运行时异常。

         

    五、异常说明

      1.NullPointerException  空指针异常

          当对一个空对象,即没有初始化,依然为null的对象调用属性或者方法。

    public static void main(String[] args){
      String str = null; // 值为null  
        System.out.println(str.length());   // 这里调用了一个空的字符串 那么就会报空指针异常  // 注意 这里String内的length是方法 而在数组中的length是属性
    }

       2.AirthmeticException  数学异常

          整除0时会发生数学异常

    public static void main(String[] args){
      // 浮点数除以0时不会发生数学异常
      System.out.print(10.0/0);  
    
      // 整数除以0时会发生数学异常
      System.out.print(10/0);
    }

       3.IndexOutOfBoundsException 数组越界异常

      

       4.NumberFormatException 数组格式异常

      

        5.ClassCastException 类型转换异常

      

        当发生非运行时异常时,编译器会自动报错,必须修改才能执行程序。

        当发生运行时异常时,必须是执行后才会报错,并且执行到异常时会中断程序,不会再向下执行。

    六、try-catch-finally

         

        把所有可能抛出异常的,或者肯定抛出异常的代码都写入try代码块中。

        catch语句紧跟其后,用来捕获异常并进行处理:

    1 // 语法格式:
    2 try{
    3   //可能出现异常或者肯定出现异常的代码  
    4 }catch(可能出现的异常类型 e){
       e.printStackTrace; // 可以查看异常发生的轨迹
    5 // 捕获到该异常该怎么处理 6 }finally{ 7 // 除非try中使用了System.exit(0)语句 否则该语句块里的代码都会执行 就算try块中return,那也会执行finally块内的代码 8 }
      说明:
        当try块中代码抛出了异常后,异常处理机制就将这个对象的类型与try后的catch语句中的异常类型进行匹配,如果类型相同,那么就会执行该catch块中的代码,否则,异常没有被捕获,程序将中断。

        使用try-catch-finally会发生三种情况:

          1.发生异常被捕获处理

          2.发生异常没有捕获处理

          3.没有发生异常

        

      一个try-catch-finally语句中:必须有一个try,catch可以有一个或多个,finally最多只能有一个。

      还有另一种组合:try-finally,没有catch

    七、异常抛出

      抛出异常的意思是:创建了一个异常对象,然后使用关键字throw交给异常处理机制去处理。 

        

      // throw使用格式:
      throw new Exception();
    
      // 或者
    
      cartch(Exception e){
        throw e;  
      }

            

                   

        throw用在方法声明处,声明该方法可能发生的异常类型。

    public void eat() throws Exception{
      System.out.print(10/0);
    }

       一个方法如果使用了throws,那么调用该方法时,编译器会提醒必须处理这些异常,否则会编译错误。

       throws后可以声明多种异常类型,用逗号隔开就可以。

       抽象方法也可以使用throws来抛出异常。

        

            

        

         

     八、自定义异常

        自定义异常类必须继承Exception类,按照需要来重写所需的构造方法。

        

    class MyException extends Exception{ // 继承Exception类 并且重写打印错误信息方法
      public MyException(String message){
        super(message);
      }  
    }

     九、断言

        JDK1.4之后,增加了断言机制。

         断言用来调试,不在生产环境中使用。 语法格式:

    assert <布尔表达式>:<错误信息>
      // 当布尔表达式为true时,忽略assert,继续向下执行代码
      // 当布尔表达式为false时,程序中断,打印错误信息

         注意:在使用时需要进行配置。

             

      

      -enableassertions

      -ea

      Window->referecnes->搜索jre->

      

  • 相关阅读:
    eth私有节点搭建
    angularjs 文件类型格式校验
    Windows Server 2019, 2016 or 2012 安装telnet
    Oracle导致Redo日志暴增的SQL语句排查
    log4j waf 绕过技巧
    jtemplate使用笔记
    NPOI2.0
    关于java同一个类互相调用,spring事务失效问题
    java 将redis的数据批量取出来的时候遇到json格式转换异常
    超级好用的文档转换工具
  • 原文地址:https://www.cnblogs.com/heureuxl/p/13423122.html
Copyright © 2020-2023  润新知