java
Marblue_
。
展开
-
Optional类
Optional实际上是个容器,它是一个装一个对象的容器。这个对象可能是个空,可能是非空。数组和集合是装多个对象的容器。1、创建Optional对象的方法:(1)Optional.of(xx); 只能装非空对象(2)Optional.ofNullable(x); 装可以是null的对象(3)Optional empty() 直接返回一个空箱子对象2、如何取出Optional容器中的对象(1)get() 必须配合of(xx)使用,因为这里面的原创 2020-08-17 14:36:46 · 337 阅读 · 0 评论 -
Stream操作:创建,处理,终结
Stream接口:实现类IntStreamDoubleStreamLongStream一、创建Stream1、方式一:通过集合创建集合对象.stream()2、方式二:通过数组工具类ArraysArrays.stream(数组对象)3、方式三:Stream接口的静态方法of方法,产生一个有限流Stream.of(…)4、方式四:Stream接口的静态方法(1)generate方法,产生无限流(2)Stream iterate(T seed, UnaryOperator f)原创 2020-08-17 14:03:35 · 219 阅读 · 0 评论 -
Stream概述
StreamAPI:StreamAPI是用来处理数据,处理集合等容器中的数据,处理操作有:查询、筛选、删除、过滤、统计、映射等。希望能够用类似于SQL语法的形式对Java内存中的数据进行处理。SQL是对数据库中的数据进行处理。Stream本身不负责存储数据,存储数据是用集合,数组等数据结构。Stream只负责对数据进行处理、加工。Stream的操作分为三步:1、创建Stream:告知Stream数据的来源是哪里?2、加工处理:这个过程可以很多步 0~n3、终结操作:收集结原创 2020-08-17 10:57:19 · 605 阅读 · 0 评论 -
方法引用和构造器引用
lambda表达式是用来简化匿名内部类的一种函数式编程的语法。只有SAM接口才能使用lambda表达式方法引用和构造器引用是用来简化lambda表达式。只有当lambda表达式满足一些特殊情况时,才能使用方法引用和构造器引用。条件:(1)当Lambda体的实现是通过调用一个现有的方法来完成功能时(2)要求函数式接口的抽象方法返回值类型与该方法的返回值类型要对应。(3)要求函数式接口的抽象方法的形参列表与该方法的形参列表对应或者要求函数式接口的抽象方法的形参列表的第一个形原创 2020-08-17 10:10:12 · 298 阅读 · 0 评论 -
Lambda表达式:自定义函数式接口
自定义函数式接口:1、声明一个接口,只能包含一个抽象方法2、给这个接口加@FunctionalInterfacepublic class TestDefineFunctionalInterface { public static void main(String[] args) { //IntCalc tools形参,函数式接口,可以Lambda表达式赋值 /* * (1)抽象方法:int cal(int a , int b); * (2)如何实现抽象方法 * 例如原创 2020-08-17 09:28:37 · 699 阅读 · 0 评论 -
Lambda表达式的使用演示:BiFunction
JDK1.8时Map接口增加了一个方法:default void replaceAll(BiFunction<? super K,? super V,? extends V> function)public class Test05Lambda3 { @Test public void test01(){ HashMap<String,Employee> map = new HashMap<>(); map.put("张三", new Employee("原创 2020-08-15 12:48:54 · 548 阅读 · 0 评论 -
Lambda表达式的使用演示:Supplier和Consumer
Supplier和Consumerpublic class Test04Lambda2 { @Test public void test01(){ /* * Java8中,有一个新的类:Stream类型,它代表一个数据加工流 * java.util.stream.Stream<T>接口 * static <T> Stream<T> generate(Supplier<T> s) * * 这个静态方法的形参:Su原创 2020-08-15 12:22:55 · 531 阅读 · 0 评论 -
Lambda表达式语法
函数式接口:SAM接口Single Abstract Method,即该接口中只有一个抽象方法需要实现,当然该接口可以包含其他非抽象方法(默认方法和静态方法,或者是从Object继承的方法)。回忆之前学过的接口:(1)Runnable(2)Comparable(3)Comparator(4)Iterable(5)Iterator(6)Collection,Set,List,Map,Queue,Deque…(7)Serializable(8)Externalizable(9)FileF原创 2020-08-15 12:06:31 · 386 阅读 · 0 评论 -
反射应用:动态读取子类的泛型父类的泛型实参
在运行时读取某个类的泛型实参步骤:(1)获取Class对象(2)获取泛型父类Type type = clazz.getGenericSuperclass();ParameterizedType type = (ParameterizedType) clazz.getGenericSuperclass();(3)获取类型实参Type:代表Java的所有类型(1)Class:代表的是普通的类型,没有泛型信息的(2)ParameterizedType:参数化类型 例如:Father&原创 2020-08-12 12:43:02 · 232 阅读 · 0 评论 -
反射应用:动态读取注解
在运行时读取某个注解信息一个完整的注解,有三个要素:(1)声明(2)使用(3)读取像@Override,@SuppressWarings,@Deprecated等这些是JRE中声明的,也是由编译器读取的像@Test,@Before…等这些注解是JUnit声明和读取的像@author,@param…等这些注解是JRE中声明的,由javadoc.exe读取的…我们程序员只负责使用。如果我们自定义的注解,那么声明和读取我们就要自己编写了获取类上面的注解步骤:(1)获取Class对象原创 2020-08-12 10:59:08 · 174 阅读 · 0 评论 -
反射应用:动态的调用方法
在运行时可以调用任意对象的任意方法Method:invoke(对象,实参列表)步骤:(1)获取Class对象(2)得到方法Method对象public class Test09Method { @Test public void test01()throws Exception{ //(1)获取Class对象:四种方式之一 Class clazz = Class.forName("com.atguigu.ext.demo.AtGuiguDemo"); //(2)得到原创 2020-08-12 10:24:43 · 270 阅读 · 0 评论 -
反射应用:动态的设置或获取属性值
在运行时可以为任意对象的任意属性赋值,或者获取任意对象的任意属性的值Field类:(1)set(Object obj, Object value)(2)Object get(Object obj)(3)setAccessible(true)建议大家编写类时保留无参构造。(1)创建对象方便(2)继承时也方便子类构造器默认调用父类的无参构造(3)反射创建也方便步骤:(1)获取某个类型的Class对象(2)创建实例对象(3)为某个属性赋值①先获取某个属性Field对象②设置原创 2020-08-12 09:01:49 · 360 阅读 · 0 评论 -
反射应用:动态创建对象
在运行时能够创建任意引用数据类型的对象方式一:使用Class对象直接new对象步骤:(1)获取某个类型的Class对象(2)通过Class对象来创建这个Class所代表的类型的对象当AtGuiguDemo没有无参构造时java.lang.InstantiationException: com.atguigu.ext.demo.AtGuiguDemoCaused by: java.lang.NoSuchMethodException: com.atguigu.ext.demo.AtGuigu原创 2020-08-12 08:43:47 · 268 阅读 · 0 评论 -
反射应用:获取类的详细信息
1、在运行时能够获取任意类型的详细信息后期的时候,在框架中,例如:spring框架,会帮我们管理很多的类,而这些类不是spring写的,而是我们写的,然后在运行期间spring取加载获取的。步骤:(1)获取这个类的Class对象(2)获取类的信息①包名②类名③类的修饰符Modifier④直接父类⑤父接口们⑥属性们⑦构造器们⑧方法们一切皆对象:(1)所有类型在内存中都是Class对象(2)所有的属性都是Field对象private int age;属性类型:Fie原创 2020-08-11 12:13:45 · 308 阅读 · 0 评论 -
Class对象
1、java.lang.Class类型:所有的Java类型(包括基本数据类型、引用数据类型、void)被加载到内存后,或者是编译器自动编译生成的class字节码,最终都会用一个Class对象来表示。即,所有的Java类型,在内存中都表示为一个Class对象。2、如何获取Class对象?4种 重点(1)类型名.class优点:最简洁缺点:要求编译期这个类型就要存在(2)对象.getClass()这个方法在java.lang.Object类型中声明的,返回对象的运行时类型原创 2020-08-11 12:11:24 · 249 阅读 · 0 评论 -
使用类加载器加载类路径
类加载器的作用:1、本质工作:加载类2、顺便可以用它来加载“类路径下”的资源文件例如:src下(编译后对应bin)有一个资源文件,配置文件:jdbc.properties如何获取某个类的类加载器对象?1、获取某个类的Class对象2、通过Class对象调用getClassLoader()方法获取类加载器对象ClassLoader类加载器的类型:getResourceAsStream(“资源文件的路径名”)SourceFolder:源代码文件夹,一般会单独用一个config这种Sou原创 2020-08-11 12:09:43 · 915 阅读 · 0 评论 -
类的加载与初始化
类的加载:1、加载:把字节码读取到内存2、连接(1)验证(2)准备:例如:给类变量(静态变量)在方法区分配内存,非final的赋默认值,但是如果是final的,直接赋常量值。(3)解析虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程这里1,2完成时,在方法区中已经有一个能够代表当前类的Class对象。3、类的初始化 ()类的加载大多数情况下是1、2、3一起完成的,但是有的时候3、初始化不一起完成。回忆:()是由编译器自动收集(1)静态变量的显式赋值(2)静态代码块的原创 2020-08-10 11:04:29 · 300 阅读 · 0 评论 -
UDP协议编程
UDP:非面向连接的,不可靠的,基于数据报的传输协议DatagramSocketDatagramPacket发送端接收端实际中,一般是服务器客户端推送消息。当客户端连接服务器,服务器就获取的客户端IP地址和端口号,服务器就给客户端推送广告消息发送端:DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)参数一:要发送的数据的字节数组参数二:从字节数组的哪个下标开始参数三:发送几原创 2020-08-04 14:15:29 · 239 阅读 · 0 评论 -
TCP协议编程:群聊
群聊客户端:public class TestServer { private static ArrayList<Socket> online = new ArrayList<Socket>(); public static void main(String[] args) throws IOException { //1、开启服务器 ServerSocket server = new ServerSocket(9999); while(true){.原创 2020-08-04 13:58:17 · 315 阅读 · 0 评论 -
TCP协议编程:客户端文件上传
从客户端发送文件到服务器端(1)接收客户端的连接(2)接收文件名.后缀名思考:存哪里 ①在当前项目中找一个位置存储,例如:upload文件夹如何解决文件名重名的问题 文件名需要处理,加入时间戳或其他的唯一编码的UUID等值.后缀名需要保留,因为它代表文件的类型(3)接收文件内容(4)反馈结果思考:这里既要接收文件名.后缀名,又要接收文件内容。这里既有 文本信息“文件名.后缀名”,又有其他类型的数据“文件内容”,只能选择字节流。如何区别,文件名.后缀名 与原创 2020-08-04 12:13:03 · 217 阅读 · 0 评论 -
TCP协议编程:多次通信单词反转
服务器端:(1)接收客户端的连接(2)接收客户端的词语(3)把词语“反转”返回给客户端(2)(3)多次,直到客户端发送"bye"为止public class TestServer { public static void main(String[] args) throws IOException { //1、开启服务器 ServerSocket server = new ServerSocket(8989); //2、接收一个客户端的连接 Socket socket原创 2020-08-04 09:32:09 · 228 阅读 · 0 评论 -
TCP协议编程:一来一回
TCP:客户端,主动连接服务器Socket(InetAddress address, int port)Socket(String host, int port)步骤:1、连接服务器Socket socket = new Socket(“192.168.30.142”,9999);2、发送或接受数据3、断开连接客户端给服务器发送一个“你好”,服务器回复“欢迎你登录”客户端:public class TestClient { public static void mai原创 2020-08-04 09:08:07 · 180 阅读 · 0 评论 -
NIO工具类
io:阻塞式IOnio: JDK1.4–>JDK1.7非阻塞式的IOPath(接口):类似于File,用路径名表示一个目录或文件Paths:工具类,用来创建Path接口的对象Files工具类,操作文件或目录的工具类:(1)Files.copy(src, dest, StandardCopyOption.REPLACE_EXISTING);(2)delete(Path path) 功能类似于File类的delete() 不同的地方是会报异常,当文件不存在时del原创 2020-08-03 18:32:16 · 328 阅读 · 0 评论 -
try...with....resource
JDK1.7中新增了一种try…catch处理的方式,称为try…with…resource,它是为资源关闭专门设计的try…catch的语法try(需要关闭的资源对象){可能发生异常的逻辑代码}catch(异常类型 e){异常处理代码}catch(异常类型 e){异常处理代码}凡是在try()中声明的资源对象,都会自动关闭,无论是否发生异常。public class TestTryWithResource { @Test public void test03() { //从原创 2020-08-03 18:30:48 · 229 阅读 · 0 评论 -
打印和输出流:PrintStream和PrintWriter
打印流:输出流(1)PrintStream:经典代表:System.outSysetm.errnew PrintStream(文件名)new PrintStream(文件名,编码)new PrintStream(另一个字节输出流)(2)PrintWriterWeb阶段学习时,从服务器端往客户端返回消息时用到response,response.getWriter()可以返回PrintWriter对象。即 Web服务器往客户端(例如:浏览器)返回html网页时,用的是PrintWri原创 2020-08-02 20:50:17 · 273 阅读 · 0 评论 -
IO中Serializable接口和Externalizable接口
1、java.io.Serializable接口:类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。如果实现Serializable接口,对象如何序列化,各个属性序列化的顺序是什么,都是默认的,程序员无法指定,也不用关心。如果属性前面有static和transient修饰,不参与序列化。2、java.io.Externaliz原创 2020-08-01 22:36:45 · 195 阅读 · 0 评论 -
IO中对象的序列化与反序列化
序列:排队,把对象转为字节序列,序列化的过程ObjectOutputStream:用于输出对象,把对象转成字节数据输出,对象的输出过程称为序列化。ObjectOutputStream比OutputStream多了很多方法,其中一个是 writeObject(obj)只能将支持 java.io.Serializable 接口的对象写入流中。每个 serializable 对象的类都被编码,编码内容包括类名和类签名、对象的字段值和数组值,以及从初始对象中引用的其他所有对象的闭包。w原创 2020-07-31 11:45:12 · 141 阅读 · 0 评论 -
数据IO流:DataInputStream和DataOutputStream
程序中有这样一组数据:int num = 10;char c = ‘好’;double d = 88.88;String info = “亚索真好玩!”;boolean good = true;程序运行过程中,想要临时退出,下次希望从这个状态继续恢复执行。希望Java能够输出各种数据类型的数据,读取时,能还原各种数据类型的数据。因为这些数据不是纯文本,那么只能选择字节流。Java中IO流的类的体系设计,隐含了一个设计模式:装饰者设计模式DataOutputStream在Outp原创 2020-07-30 12:52:24 · 221 阅读 · 0 评论 -
InputStreamReader和OutputStreamWriter进行解码
解码: 字节输入流转字符输入流的转换流,同时还能指定编码方式InputStreamReader:public class TestInputStreamReader { @Test public void test03()throws IOException{ //解码:字节-->字符 FileInputStream fis = new FileInputStream("d:/io.txt"); InputStreamReader isr = new InputStreamR原创 2020-07-30 12:37:57 · 161 阅读 · 0 评论 -
Buffered缓冲IO流
缓冲IO流:是处理流,负责在其他IO流基础上增加缓冲功能。提高效率BufferedReader —> ReaderBufferedWriter —> WriterBufferedInputStream —> InputStreamBufferedOutputStream —> OutputStreamBufferedReader除了继承了Reader的那些读的方法,还增加了一个:String readLine()读取一行BufferedWriter除了继承了Wr原创 2020-07-30 11:11:29 · 305 阅读 · 0 评论 -
InputStream和OutputStream
InputStream:(1)int read() :一次读取一个字节,返回本次读取的字节的值(2)int read(byte[] b) :一次读取多个字节,返回本次实际读取字节数,读取的字节存到b数组中,从[0]开始存储,一次最多读取b.length个字节(3)int read(byte[] b, int off, int len) :一次读取多个字节,返回本次实际读取字节数,读取的字节存到b数组中,从[off]开始存储,一次最多读取len个字节(4)close()如果到达流末尾,返回-1原创 2020-07-30 11:10:11 · 161 阅读 · 0 评论 -
文件的IO操作:FileReader和FileWriter
文件的IO操作:Reader系列:(1)int read() :读取一个字符,正常返回是该字符的Unicode编码值(2)int read(char[] cbuf) :读取多个字符,读取的字符放到cbuf数组中,从cbuf的[0]开始存储,最多读取cbuf.length个实际本次读取的字符的个数(3)int read(char[] cbuf, int off, int len) :读取多个字符,读取的字符放到cbuf数组中,从cbuf的[off]开始存储,最多读取len个实际本次读取的字符的原创 2020-07-29 16:34:50 · 183 阅读 · 0 评论 -
IO的概述
1、IO:I:input,输入O:output:输出(1)如果对于File对象来说,输入和输出操作只能针对文件,不能针对目录。(2)IO操作不仅仅是针对文件,它可以从网络中输入和输出…(3)输入:输出:参照物是当前程序例如:把数据写到文件中:输出操作 把数据从程序中输出到文件从文件读取数据: 输入操作例如:服务器端发送数据给客户端:对于服务器来说是输出对于客户端来说是输入2、IO的分类(1)方向输入流和输出流(2)操作数据的单位字节流和原创 2020-07-29 15:07:59 · 272 阅读 · 0 评论 -
文件或目录过滤器
简单的文件或目录过滤器File类中File[] listFiles(FileFilter f)public class Test03 { @Test public void test01(){ //列出D:\atguigu\javaee\JavaSE20190513\code\day01_code目录下的所有的.java文件 File dir = new File("D:/atguigu/javaee/JavaSE20190513/code/day01_code"); File[原创 2020-07-29 13:05:45 · 272 阅读 · 0 评论 -
目录递归操作:列出所有子目录文件,计算总大小,删除全部子目录
文件夹/目录它不同于文件,因为文件夹中可以放文件,或下一级文件夹。(1)获取文件夹的下一级String[] list();得到下一级文件或目录的名称File[] listFiles():得到下一级文件或目录的File对象(2)求一个目录的总大小(3)删除一个包含子目录,子文件的文件夹public class Test02Dir { @Test public void test04(){ File dir = new File("d:/演示文件夹"); deleteDir(di原创 2020-07-29 12:37:26 · 448 阅读 · 0 评论 -
io.file类的方法解析
java.io.File:类文件和目录 路径名的抽象表示形式。通俗的讲:File类的对象代表一个文件或一个目录(文件夹)1、路径的分隔符:windows:\ 和 /其他平台:/网络地址:http://www.baidu.com/index.html现在写路径分隔符:(1)/(2)File.separator2、API(1)获取文件或目录的详细信息getName()long length():只能返回文件的大小,不能直接返回目录的大小文件夹的总大小 = 文件夹里面的所有的文件原创 2020-07-29 11:06:20 · 231 阅读 · 0 评论 -
集合的工具类:Collections
java.util.Collections工具类:(1)public static boolean addAll(Collection<? super T> c,T… elements):把elements这些元素添加到c这个集合中(2)public static int binarySearch(List<? extends Comparable<? super T>> list, T key):在list集合中找出key,用二分查找法此时要求list集合是原创 2020-07-28 18:23:21 · 205 阅读 · 0 评论 -
泛型的通配符
通配符:wildcard通配符:?1、<?>:代表可以是任意类型2、<? extends 上限>:?代表是上限或上限的子类3、<? super 下限>:?代表的是下限或下限的父类例如:看java.util.Collections:集合工具类(1)public static boolean disjoint(Collection<?> c1, Collection<?> c2)看c1和c2是否有交集,如果没有交集返回true原创 2020-07-28 16:58:41 · 234 阅读 · 0 评论 -
泛型的使用形式
泛型的使用形式有2种:1、泛型类\泛型接口2、泛型方法一、泛型类/接口1、语法格式:【修饰符】 class 类名<泛型形参列表>{}【修饰符】 interface 接口名<泛型形参列表>{}例如:public interface Collection 就是泛型形参列表public class ArrayList 就是泛型形参列表public class HashMap<K,V> <K,V>就是泛型形原创 2020-07-28 16:29:54 · 433 阅读 · 0 评论 -
泛型的概述
泛型:JDK1.5之后引入的*泛型:泛化的类型,参数化类型生活中:生产瓶子的厂商,只负责生产瓶子,不管你这个瓶子将来用来装什么。在超市中,大家看到的瓶子上都有标签(商标),表明这个瓶子中是什么。生产饮料、酒、调料的厂商买回这个瓶子后,在装东西时,就给这个瓶子加上商标(标签)。贴上标签后,下次看到时,就知道里面是什么,我可以放心的使用。Java中:例如:在设计集合这个容器的数据结构时,不知道我们程序员会用它来装什么对象。可能用它装字符串对象,可能用它装Apple对象…在设计时不确原创 2020-07-28 15:53:06 · 135 阅读 · 0 评论