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探究之View的绘制流程

    Android中Activity是作为应用程序的载体存在,代表着一个完整的用户界面,提供了一个窗口来绘制各种视图,当Activity启动时,我们会通过setContentView方法来设置一个内容视图 ...

  2. PostgreSQL10.1 linux 编译安装

    一 安装准备 1.首先从官网下载PostgreSQL压缩包(也可以使用yum安装),我们这里使用的是10.1的版本 2.将文件上传到linux服务区目录(我们这里放在/root 中) 3.解压缩 ta ...

  3. ILRuntime官方Demo笔记

    调用/执行 热更中的方法 调用热更代码中方法,写在AppDomain中,记录一下主要几个方法: AppDomain.LoadAssembly 加载热更dll 执行热更代码的方法,有两种方式: appd ...

  4. SAM failed to write changes to the database 问题处理

    问题: Windows Storage Server 2012 R2 发布NAS服务,客户创建用户和组时报错,事件查看器系统日志下报错Event ID 12288,内容如下: SAM failed t ...

  5. linux系统mysql-5.7 修改字符集

    起因:我在网上看修改mysql字符的文章时,都说配置/etc/mysql/my.cnf文件 然而我打开我上述的my.cnf文件时,发现里面的内容跟别人的不一样,我就觉得这个肯定不是正确的文件 经过我在 ...

  6. JProfiler的详细使用介绍

    转:https://blog.csdn.net/huangjin0507/article/details/52452946 下载软件 官网地址:http://www.ej-technologies.c ...

  7. 使用try-with-resources优雅的关闭IO流

    Java类库中包括许多必须通过调用close方法来手工关闭的资源.例如InputStream.OutputStream和java.sql.Connection.客户端经常会忽略资源的关闭,造成严重的性 ...

  8. scala的多种集合的使用(4)之列表List(ListBuffer)的操作

    1.List列表的创建和添加元素 1)最常见的创建list的方式之一. scala> val list = 1 :: 2 :: 3 :: Nil list: List[Int] = List(1 ...

  9. 初识Haskell 四:函数function之二 常见函数

    对Discrete Mathematics Using a Computer的第一章Introduction to Haskell进行总结.环境Windows,关于函数的部分太长了,分开写. 常用的对 ...

  10. 南邮 base64全家桶

    这几天不想学逆向 做做crypto(菜还瞎j2做)..... 题目: 全家桶全家桶全家桶!我怎么饿了......密文(解密前删除回车):R1pDVE1NWlhHUTNETU4yQ0dZWkRNTUpY ...