方法引用、构造器引用与数组引用
一、方法引用1.理解:方法引用可以看做是Lambda表达式深层次的表达。换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法。
2.使用情境:当要传递给Lambda体的操作,已经实现的方法了,可以使用方法引用!
3.格式:类(或对象) :: 方法名
4.分为如下的三种情况:
情况1 对象 :: 非静态方法
情况2 类 :: 静态方法
情况3 类 :: 非静态方法
5.要求:
要求接口中的抽象方法的形参列表和返回值类型与方法引用的方法的形参列表和返回值类型相同!(针对于情况1和情况2)
当函数式接口方法的第一个参数是需要引用方法的调用者,并且第二个参数是需要引用方法的参数(或无参数)时:ClassName::methodName(针对于情况3)
6.使用建议:如果给函数式接口提供实例,恰好满足方法引用的使用情境,大家就可以考虑使用方法引用给函数式接口提供实例。如果大家不熟悉方法引用,那么还可以使用lambda表达式。
7.使用举例:1234567891011121314151617181920212223242 ...
Lambda表达式和函数式接口
一、Lambda表达式1.Lambda表达式使用前后的对比:
举例一:
123456789101112131415161718@Testpublic void test1(){ Runnable r1 = new Runnable() { @Override public void run() { System.out.println("我爱北京天安门"); } }; r1.run(); System.out.println("***********************"); Runnable r2 = () -> System.out.println("我爱北京故宫"); r2.run();}
举例二
12345678910111213141516171819202122232425262728@Testpublic void test2() ...
Java反射机制
1. Class类的理解与获取Class的实例1.1 Class类的理解
1.类的加载过程:程序经过javac.exe命令以后,会生成一个或多个字节码文件(.class结尾)。接着我们使用java.exe命令对某个字节码文件进行解释运行。相当于将某个字节码文件加载到内存中。此过程就称为类的加载。加载到内存中的类,我们就称为运行时类,此运行时类,就作为Class的一个实例。
2.换句话说,Class的实例就对应着一个运行时类。
3.加载到内存中的运行时类,会缓存一定的时间。在此时间之内,我们可以通过不同的方式来获取此运行时类。
1.2 获取Class实例的几种方式:(前三种方式需要掌握)
1234567891011121314151617181920212223//方式一:调用运行时类的属性:.class Class clazz1 = Person.class; System.out.println(clazz1); //方式二:通过运行时类的对象,调用getClass() Person p1 = new Person ...
BIO、NIO、AIO详解
第一章 Java的I/O演进之路1.1 I/O 模型基本说明I/O 模型:就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收,很大程度上决定了程序通信的性能,Java 共支持 3 种网络编程的/IO 模型:BIO、NIO、AIO实际通信需求下,要根据不同的业务场景和性能需求决定选择不同的I/O模型
1.2 I/O模型Java BIO同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销 【简单示意图
Java NIOJava NIO : 同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求就进行处理 【简单示意图】
Java AIOJava AIO(NIO.2) : 异步 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,一般适用 ...
IO流(九)--Path、Paths、Files的使用
1.NIO的使用说明:
Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO AP。
NIO与原来的IO同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作。
NIO将以更加高效的方式进行文件的读写操作。
随着 JDK 7 的发布,Java对NIO进行了极大的扩展,增强了对文件处理和文件系统特性的支持,以至于我们称他们为 NIO.2。
2.Path的使用 —jdk7提供2.1Path的说明:
Path替换原有的File类。
2.2如何实例化:
2.3常用方法:
3.Files工具类 —jdk7提供3.1作用:
操作文件或文件目录的工具类
3.2常用方法:
IO流(八)--RandomAccessFile的使用
1.随机存取文件流:RandomAccessFile
使用说明:
1.RandomAccessFile直接继承于java.lang.Object类,实现了DataInput和DataOutput接口
2.RandomAccessFile既可以作为一个输入流,又可以作为一个输出流
3.如果RandomAccessFile作为输出流时,写出到的文件如果不存在,则在执行过程中自动创建。如果写出到的文件存在,则会对原文件内容进行覆盖。(默认情况下,从头覆盖)
4.可以通过相关的操作,实现RandomAccessFile“插入”数据的效果。seek(int pos)
2.代码演示2.1 典型代码112345678910111213141516171819202122232425262728293031323334353637@Testpublic void test1() { RandomAccessFile raf1 = null; RandomAccessFile raf2 = null; try { //1. raf1 = ...
IO流(七)--其他流的使用
1. 标准的输入输出流:System.in:标准的输入流,默认从键盘输入
System.out:标准的输出流,默认从控制台输出
修改默认的输入和输出行为:
System类的**setIn(InputStream is) / setOut(PrintStream ps)**方式重新指定输入和输出的流。
2. 打印流:PrintStream 和PrintWriter
说明:
提供了一系列重载的print()和println()方法,用于多种数据类型的输出
System.out返回的是PrintStream的实例
3. 数据流:DataInputStream 和 DataOutputStream
作用:用于读取或写出基本数据类型的变量或字符串
示例代码:
1234567891011121314151617181920212223242526272829303132333435363738394041424344/*练习:将内存中的字符串、基本数据类型的变量写出到文件中。注意:处理异常的话,仍然应该使用try-catch-finally. */@Testpublic vo ...
IO流(六)--对象流的使用
1.对象流:ObjectInputStream 和 ObjectOutputStream
2.作用:
序列化过程
ObjectOutputStream:内存中的对象—>存储中的文件、通过网络传输出去
反序列化过程
ObjectInputStream:存储中的文件、通过网络接收过来 —>内存中的对象
3.对象的序列化机制:对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。//当其它程序获取了这种二进制流,就可以恢复成原来的Java对象
序列化代码实现:
Object obj = ois.readObject();
String str = (String) obj;
Person p = (Person) ois.readObject();
Person p1 = (Person) ois.readObject();
System.out.println(str);
System.out.pr ...
IO流(五)--转换流的使用
1.转换流涉及到的类:属于字符流InputStreamReader:将一个字节的输入流转换为字符的输入流
解码:字节、字节数组 —>字符数组、字符串
OutputStreamWriter:将一个字符的输出流转换为字节的输出流
编码:字符数组、字符串 —> 字节、字节数组
说明:编码决定了解码的方式
2.作用:提供字节流与字符流之间的转换3.图示:
4.典型实现:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849@Test public void test1() throws IOException { FileInputStream fis = new FileInputStream("dbcp.txt");// InputStreamReader isr = new InputStreamReader(fis);//使用系统默认的字符集 //参数2指明了字符集,具 ...
IO流(四)--缓冲流的使用
1.缓冲流涉及到的类:
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
2.作用:作用:提供流的读取、写入的速度
提高读写速度的原因:内部提供了一个缓冲区。默认情况下是8kb
3.典型代码3.1 使用BufferedInputStream和BufferedOutputStream:处理非文本文件1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950//实现文件复制的方法 public void copyFileWithBuffered(String srcPath,String destPath){ BufferedInputStream bis = null; BufferedOutputStream bos = null; try { //1.造文件 ...