1、lambda:表现形式
1.形式⼀(只包含⼀个参数)
Actionlistener oneArgu = event -> System.out.println(“hello world”);
2.形式⼆(不含参数)
Runnable noArguments = () -> System.out.println(“hello world”);
3.形式三(主体是⼀个代码块)
Runnable multiStatement = () -> {
System.out.print(“Hello”);
System.out.println(" World");
};
4.形式三(包含多个参数)
BinaryOperator add = (x, y) -> x + y;
5.形式三(多个参数,并显⽰声明参数类型)
BinaryOperator addExplicit = (Long x, Long y) -> x +y
2、BufferedWriter
(1)使用readLine读数据时,只有把流关掉才会有反应,误以为readLine()是读取到没有数据时就返回null(因为其它read方法当读到没有数据时返回-1),而实际上readLine()是一个阻塞函数,当没有数据读取时,就一直会阻塞在那,而不是返回null;因为readLine()阻塞后,System.out.println(message)这句根本就不会执行到,所以在接收端就不会有东西输出。要想执行到System.out.println(message),一个办法是发送完数据后就关掉流,这样readLine()结束阻塞状态,而能够得到正确的结果,但显然不能传一行就关一次数据流;另外一个办法是把System.out.println(message)放到while循环体内就可以。如:
代码:
BufferedReader input = new BufferedReader(new InputStreamReader(m_conn.openInputStream()));
String message = "";
String line = null;
while((line = m_input.readLine()) != null) {
message += line;
System.out.println(message);
}
(2)readLine()只有在数据流发生异常或者另一端被close()掉时,才会返回null值。
如果不指定buffer大小,则readLine()使用的buffer有8192个字符。在达到buffer大小之前,只有遇到"/r"、"/n"、"/r/n"才会返回。
小结,使用readLine()一定要注意:
读入的数据要注意有/r或/n或/r/n
没有数据时会阻塞,在数据流异常或断开时才会返回null
使用socket之类的数据流时,要避免使用readLine(),以免为了等待一个换行/回车符而一直阻塞
(3)在发送端发送字符串时,一定要在字符串末尾追加\n或者\r
这样一个字符串就相当于一行数据,所以 readline() 可以理解为读一行数据就停止读取
3、特殊字符
(1)转义字符反斜杠()
我们知道html中大都是双标签,如果在标签内想要输出带有标签结束符的文本都必须进行转义,html中是采用对应的字符替换,如
在java当中,我们要转义一个字符使用的是反斜杠\,反斜杠的作用就是转义下一个字符
(2)回车符\r
\r在java中是回车符的意思,将光标切换到当前行的开头
(3)换行符\n
\n在java中是换行符的意思,切换到下一行,且将光标切换到下一行的开头
(4)制表符\t
\t是制表符的意思,将光标移动到下一个制表符的位置,相当于键盘中的windows键
(5)退格符\b
\b是退格符的意思,将光标回退一个字符的位置,可以结合空白字符使用达到类似删除的效果
前面5个都是具有特殊含义,下面的是将特殊含义取消的转义
(6)""双引号字符
如果需要在双引号内输出双引号字符,且不需要让他产生双引号开始结束的效果,则需要使用这种被转义过的引号
(7)''单引号字符
如果需要在单引号内输出单引号,且要求不对我们的引号产生什么不良效果,则需要使用这种被转义过的引号
(8)\ 反斜杠字符
如果想要输出单纯的反斜杠,就必须在原来的基础上再进行转义一次,让反斜杠失去转义字符的效果