Lambda表达式  

  lambda表达式本质上就是一个匿名方法。但是这个方法不是独立执行的,而是构成了一个函数式接口定义的抽象方法的实现,该函数式接口定义了它的目标类型。

只有在定义了lambda表达式的目标类型的上下文中,才能使用该表达式。当把一个lambda表达式赋给一个函数式接口引用时,就创建了这样的上下文。

  interface MyNumber {

    double getValue();

  }

  MyNumber myNum ;

  myNum = () -> 12;

lambda表达式会导致产生一个匿名类。lambda表达式也常被称为闭包。

  函数式接口是仅包含一个抽象方法的接口。这个方法知名了接口的目标用途。函数式接口定义了lambda表示的目标类型。特别注意,lambda表达式只能用于其目标

类型已被指定的上下文中。另外,函数式接口有时候 被称为SAM类型,意思是但抽象方法。

  函数式接口可以指定Object定义的任何公有方法。Object的公有方法被视为函数式接口的隐士成员,因为函数式接口的实例会默认自动实现他们。

  lambda体只包含单个表达式,这种类型的lambda体被称为表达式体,或者表达式lambda。Java支持另外一种类型lambda表达式,其中操作符右侧的代码可以由一个

代码块构成。其中包含多条语句,这种类型被称为块体,或者块lambda。在块lambda中必须显示使用return语句来返回值。必须这么做,因为块lambda体代表的不是单独

一个表达式。当lambda表达式中出现return语句时,只是从lambda体返回,而不会导致包围lambda体的方法返回。

  泛型函数式接口,lambda表达式自身不能指定类型参数,因此lambda表达式不能是泛型。但与lambda表达式关联的函数式接口可以是泛型。

    interface SomeFunc<T> {

      T func(T t);

    }

    SomeFunc<String> reverse = (str) -> {

      String result = "";

      //...

    }

    SomeFunc<Interge> factoral = (n) -> {

      //...

    }

  作为参数传递lambda表达式,为了将lambda表达式作为参数传递,接受lambda表达式的参数类型必须是与该lambda表达式兼容的函数式接口类型。

  lambda表达式与异常,lambda表达式可以抛出异常。如果抛出检查异常,该异常就必须与函数式接口的抽象方法的throws子句中列出的异常兼容。

  预定义的函数式接口, 很多时候不需要自己定义函数式接口,JDK8中包含了新报java.util.function,其中提供了一些预定以的函数式接口。

      接口                                                                                            用途

    UinaryOperator<T>                                                                          对类型为T的对象应用一元运算,结果是T。包含方法apply()

    BinaryOperator<T>                                                                          对类型为T的两个对象应用操作,结果是T。包含方法apply()

    Consumer<T>                                                                                  对类型为T的对象应用操作,包含方法accept()

    Supplier<T>                                                                                     返回类型为T的对象。包含方法get()

    Function<T, R>                                                                                对类型为T的对象应用操作,结果是类型R的对象。包含方法apply()

    Predicate<T>                                                                                   确定类型为T的对象是否满足某种约束,返回布尔值。包含方法test()

String 

    valueOf,方法将数据从内部格式转换成人类可以阅读的形式。valueOf()是静态方法,String针对所有Java内置类型对该方法进行重载,从而可以将每种

类型正确地转换成字符串。传递给valueOf()方法的所有对象都将返回调用对象的toString()方法的结果。

Number

     抽象类Number定义了一个超累,用于封装数值类型byte、short、int、long、float及double的类派生自这个超类。

     Float和Double都提供了isInfinite()和isNaN(),如果值在数量上为无穷大或者无穷小,那么isInfiniter()返回true,如果测试值不是数字,那么isNaN()返回true.

对Unicode代码点的附加支持

  Java对Character进行了较大的扩充。从JDK1.5开始,Character开始支持32为的Unicode字符。在过去所有Unicode字符都使用16位保存,这是char类型的

大小,因为这些值的范围都是从0到FFFF。但是Unicode字符集已经进行扩展,需要比16为更多的存储空间,现在,字符的范围可以从0到10FFFF。

代码点,是指0到10FFFF;数值大于FFFF的字符被称为补充字符,基本多语言平面字符是指0到FFFF之间的那些字符。

  对Unicode字符集的扩展给java带来了一些基本问题。因为附加字符的值大于char能够保存的值,所以需要一些处理补充字符的手段。Java通过两种方法解决

这个问题。首先,java使用两个char表示一个附加字符,第一个char称为高代理,第二个char称为低代理。java提供了一些新方法,用于在代码点和补充字符之间

进行转换,比如codePointAt()。

  Java重载了Character类中以前存在的一些方法。这些方法的重载形式使用int型而不是char型数据。因为对于作为单个值保存任何字符而言,int是足够大的,

所以int用于保存任何字符。

Void类

  Void类只有域变量TYPE,用来保存对void类型的class对象的引用。不用创建Void类型的实例。

Runtime类

  Runtime类封装了运行时环境。可以调用静态的Runtime.getRuntime()方法来获得对当前Runtime对象的引用。一旦获得对当前Runtime对象的引用,就可以

调用一些放来来控制JVM的状态和行为。

clone方法和Cloneable接口

  clone()方法产生调用对象的副本。只有实现了Clone接口的类才可以被复制。Cloneable接口没有定义成员,用于指示可以按位复制对象。当进行复制时不

会调用被复制对象的构造函数。复制品是原始对象的精确副本。在Object类中,clone()方法被声明为protected。这意味着clone()方法只能在实现了Cloneable接口

的类定义的方法中调用,或者只能在类中显示地进行重写,进而成为公有的。

ThreadGroup类

  线程组为管理一组线程提供了一种便利的方式,可以将一组线程作为一个单元进行管理。对于希望挂起或者恢复大量相关线程的情况,线程组特别有用。

StackTraceElement类

  StackTraceElement类描述单个的堆栈帧,堆栈帧是当异常发生时对战踪迹的单个元素。每个堆栈帧表示一个执行点,包含类名、方法名、文件名、以及源代码

行号这类信息。Throwable类的getStackTrace()方法返回一个StackTraceElement数组。

Appendable接口

  实现了Appendable接口的类的对象,可以追加字符或字符序列。

Readable接口

  Readable接口指示对象可以用作字符的源,该接口定义了方法read().

AutoCloseable接口

  AutoCloseable接口对带资源的try语句提供了支持。这种try语句所实现的功能,有时被称为自动资源管理。当资源不再需要时,带try的语句会自动释放资源。只有

实现了AutoColseable接口的类对象,才能被用于带资源的try语句。

Java基础知识拾遗(二)的更多相关文章

  1. java基础知识拾遗(二)

    1.finally public static int func (){ try{ return 1; }catch (Exception e){ return 2; }finally { retur ...

  2. Java基础知识拾遗(一)

    类型提升规则 Java定义了几个应用于表达式的类型提升规则:所有byte.short和char类型的值都被提升为int类型.如果有一个操作数是long类型,将这个表达式提升为 long 类型:如果有一 ...

  3. java基础知识(二)-----多态和构造函数

    一:前言 最近由于面试了新浪公司,面试官问我的问题我都不知道,觉得自己好菜,所以最近决定再把java基础给搞一遍,真的觉得自己好菜.每天看一点,那个家伙说<java编程思想>最少要看三遍, ...

  4. Java基础知识(二)

    一.基本概念 1. Java程序初始化的顺序是怎么样的 2. Java和C++的区别 3. 反射 先看一个知乎回答 什么是反射 主要用途 获得Class对象 4. 注解 什么是注解 为什么要用注解 基 ...

  5. Java 基础知识总结 (二、基本数据类型)

    二.基本数据类型 java基本数据类型只能先声明后使用 boolean  true/false char 16-bit unicode character byte 8-bit integer sho ...

  6. java基础知识拾遗(四)

    1.Runnable对象 启动线程:(new Thread(new MyRunnable()).start() 2.jsp中<%@ page language="java" ...

  7. Java基础知识拾遗(四)

    IO SequenceInputStream,允许链接多个InputStream对象.在操作上该类从第一个InputStream对象进行读取,知道读取完全部内容,然后切换到第二个InputStream ...

  8. Java基础知识拾遗(三)

    集合框架 SortedSet接口,声明了以升序进行排序的行为. Queue接口,声明了队列行为,队列通常是先进先出的列表 Deque接口,扩展了Queue接口,声明了双端队列的行为.双端队列可以像标准 ...

  9. Java基础知识陷阱(二)

    本文发表于本人博客. 上次说了一些关于字符串的知识,都是比较基础的,那这次也说下关于对象地址问题,比如传参.先看下面代码: public void changeInt(int a){ a = ; } ...

随机推荐

  1. Android 报错:error: too many padding sections on bottom border

    一.发生错误 [我以为我做了一张完美的.9图片,没想到.9图片还需要画左边和上边,尴尬···] 二.解决方法 .9图片造成错误 [具体内容] 最后修改.9图为

  2. 基于Android的模拟点击探索

    前言 压力测试中,一般会用到自动化测试.准备写一个APP,可以记录屏幕上的点击事件,然后通过shell命令来模拟自动执行.shell指令,比较容易实现.那么,关键的一步是获取点击的坐标.对于Andro ...

  3. 谈下git的基本操作

    在工作之后,我比较经常地接触git,关于git的用法,网上有很多的教程,而且git的指令是非常多的,强如阮一峰这样的高手也直言无法记住git的很多指令.实际上我也看了不少关于git指令的文章,个人觉得 ...

  4. 获取OlapConnection连接

    目录: 1.获取org.olap4j.OlapConnection对象 2.获取mondrian.olap.Connection对象 一.org.olap4j.OlapConnection对象 说明: ...

  5. PHP 函数漏洞总结

    1.MD5 compare漏洞 PHP在处理哈希字符串时,会利用"!="或"=="来对哈希值进行比较,它把每一个以"0E"开头的哈希值都解释 ...

  6. 免费了 -- EXCEL插件 智表ZCELL 普及版V1.0 发布了!!!

    智表(zcell)是一款浏览器仿excel表格jquery插件.智表可以为你提供excel般的智能体验,支持双击编辑.设置公式.设置显示小数精度.下拉框.自定义单元格.复制粘贴.不连续选定.合并单元格 ...

  7. UOJ #269. 【清华集训2016】如何优雅地求和

    UOJ #269. [清华集训2016]如何优雅地求和 题目链接 给定一个\(m\)次多项式\(f(x)\)的\(m+1\)个点值:\(f(0)\)到\(f(m)\). 然后求: \[ Q(f,n,x ...

  8. IDEA 代码风格设置

    1.类注释 File -> Settings -> Editor -> File and Code Templates -> Includes -> FileHeader ...

  9. 写一函数,用来求表达式1+2+3+.....+n的值,并编写主函数

    Description 写一函数,用来求表达式1+2+3+.....+n的值,并编写主函数.n由键盘输入. Input 输入一个整数 Output 输出表达式的值 Sample Input 5 Sam ...

  10. 转://MySQL客户端工具的选择

    先说我的选择:SQLyog. 尝试的客户端:Toad for MySQL.MySQL-Front.Navicat for MySQL.SQLyog. 官方下载链接: Toad for MySQL:ht ...