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->

  

原文地址:https://www.cnblogs.com/heureuxl/p/13423122.html