Java函数式接口 函数式接口概念函数式接口在Java中指的是:有且仅有一个抽象方法的接口就称为函数式接口。函数式接口,适用于函数式编程,在Java中的函数式编程体现在Lambda,所以函数式接口就是用来服务Lambda表达式。只有确保接口当中在有且仅有一个抽象方法,Java中的Lambda才能顺利进行推导。备注:“语法糖”是指使用更加便利方便,但是原理不变的代码语法。就比如遍历集合时使用foreach语法,其实底层使用的是迭代器,这便是“语法糖”。格式只要确保接口当中有且仅有一个抽象方法即可:修饰符 int
文件上传优化 文件上传优化文件的名称需要优化服务端 ,保存的文件名称如果固定,那么最终会导致服务器硬盘,只会保留一个文件,对上传的文件名称优化。System.currentTimeMillis()+new Random().nextInt(1000000)+" .jpg"服务端接收文件的优化服务器端,接收一个文件后就关闭了,后面其他客户端就无法继续上传文件,使用循环进行改进,可以不断的接收不同的客户端传输过来的文件。使用循环while(true){ Socket socket = se
网络编程基础 网络编程基础软件架构:C/S架构:即Client/Server(客户端/服务器端)架构B/S架构:即Browser/Server(浏览器/服务器) 架构,简化了系统的开发,维护和使用B/S架构与C/S架构的区别:C/S架构基于局域网的,而B/S架构基于广域网的基础上硬件环境不同,C/S建立在专用网络上,小范围的网络,可以专门的服务器提供数据链接和数据的交换C/S一般面向的是一些固定的用户群体,对信息的安全控制较高一点对程序的架构不同用户接口不同:C/S架构大多建立在Windows平台
序列化 序列化流 java提供了一种对象序列化的机制,用一个字节序列化表示一个对象,该字节序列ObjectOutputStream类 java.io.ObjectOutStream类,将Java对象的原始数据类型写入到文件中,实现对象的持久化存储。构造方法public ObjectOutputStream(OutputStream out) : 创建一个指定的OutputSrteam的ObjectOutputStream类对象特有方法void writeObject(Object obj
缓冲流【Buffered】 缓冲流【Buffered】缓冲流我们理解为原来的使用数组方式进行数据传输的一种增强按照类型分为:字符缓冲流:BufferedReader, BufferedWriter字节缓冲流:BufferedInputStream, BufferedOutputStream缓冲流的基本原理,是在创建对象的时候,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写数据,减少系统IO操作的次数,减少开销,提高读写的效率。字节缓冲流构造方法public BufferedInputStream(Input
属性集【Properties】 属性集【Properties】 java.util.Properties类继承于Hashtable,用来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。g构造方法public Properties(): 创建一个空的属性集列表共性的API方法public Object setProperty(String key,String value) : 保存一对属性。public Object getProperty(String key) : 使用此属性列表中
IO流(一) IO概述什么是IO?java中I/O的操作主要是靠java.io包下的类和接口来实现的。IO分类根据数据的流向:输入流和输出流输入流:把数据从其他设备上读取到内存当中的流。输出流:把数据从内存当中写入到其他设备上的流。根据数据的类型分为:字节流和字符流字节流:以字节为单位,读写数据的流字符流:以字符为单位,读写数据的流IO流的顶级父类输入流输出流字节流InputStreamOutputStream字符流ReaderWriter字节流一
List接口及其实现类 List接口鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据 序号存取容器中的元素。JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。常用方法void add(int index,Object ele) : 在index位置插入ele元素boolean
Set接口及其实现类 LinkedList集合 java.util.LinkedList集合数据存储的结构底层是一个链表结构,是一个双向链表结构,方便元素的添加和删除。常用API方法如下:public void addFirst(E e) : 将指定的元素添加到此列表的开头public void addLast(E e) : 将指定的元素添加到此列表的末尾public E getFirst() : 获取此列表的首节点元素public E getLast() : 获取此列表的末节点元素public
线程及线程的创建 并发:指的是两个或者多个事件(任务)在同一时间段内发生。并行:指的是两个或者多个事件(任务)在同一时刻发生(同时发生)。线程与进程进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个线程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行程序就是一个进程从创建、运行到消亡的过程。线程:线程是进程中的一个执行单元,负责当前进程中程序的运行,一个程序中至少有一个线程,一个进程可以有多个线程。简而言之,一个程序运行后至少有一个进程,一个进程可以包
比较器 Comparator比较器Collcetion工具集中的sort()public static <T> void sort(List<T> list)public static <T> void sort(List<T> list,Comparator<? super T> c)Comparator接口在java.util包下面,排序是Comparator需要实现的功能之一,该接口代表的是一个比较器,具有可比性,可以做排序,本质是比较两个
泛型的通配符 泛型的通配符 当使用泛型类或者泛型接口,传递的数据中,泛型的类型不确定,可以通过通配符<?>表示。一旦程序使用了泛型的通配符后,只能使用Object类中的共性的方法,集合中自身元素的方法无法使用。通配符的基本使用 泛型的通配符:不知道使用什么类型来接受的时候,此时可以使用’?'代表未知的通配符。 此时只能接受数据,不能往该集合当中存储数据。备注:泛型不存在继承关系 Collection list = new ArrayList();错误写法通配符的高级用法——泛型的上限
Calendar类 常用方法public int get(int field) 获取给定的日历字段值public void set(int field,int value) 将给定的字段设定为给定的值public abstract void add(int field,int amount) 根据日历规则,将给定的日历字段添加或者减少指定的时间值public Date getTime() 把日历对象转换成日期对象public long getTimeInMillis() 获取日历对象对应的毫秒值