![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java进阶
bubupp
学习笔记分享
展开
-
java进阶打卡40
通过this引用本类的成员方法// 定义一个富有的函数式接口@FunctionalInterfacepublic interface Richable { // 定义一个想买什么就买什么的方法 void buy();}// 通过this引用本类的成员方法public class Husband { // 定义一个买房子的方法 public void buyHouse(){ System.out.println("北京二环内买一套四合院!");原创 2020-11-21 21:29:23 · 48 阅读 · 0 评论 -
java进阶打卡39
方法引用双冒号::为引用运算符,而它所在的表达式被称为【方法引用】。如果Lambda要表达的函数方案已经存在于某个方法的实现中,那么则可以通过双冒号来引用该方法作为Lambda的替代者。第一种语义是指:拿到参数之后经Lambda之手,继而传递给System.out.println方法去处理。第二种等效写法的语义是指:直接让System.out中的println方法来取代Lambda。两种写法的执行效果完全一样,而第二种方法引用的写法复用了已有方案,更加简洁。注:Lambda中传递的参数一定是方法原创 2020-11-18 21:46:55 · 54 阅读 · 0 评论 -
java进阶打卡37
Function接口的默认方法andThen用来进行组合操作需求: 把String类型的"123",转化为Integer类型,把转换后的结果加10 把增加之后的Integer类型的数据,转换为String类型分析: 转换了两次 第一次是把String类型转换为了Integer类型,所以我们可以使用Function<String,Integer> fun1 Integer i = fun1.apply("123") + 10;原创 2020-11-18 20:12:41 · 176 阅读 · 0 评论 -
java进阶打卡36
Predicate接口的默认方法逻辑表达式:可以连接多个判断的条件&&:与运算符,有false则false||:或运算符,有true则true!:非(取反)运算符,非真则假,非假则真表示并且的and方法需求:判断一个字符串,有两个判断的条件 1. 判断字符串的长度是否大于5 2. 判断字符串中是否包含a两个条件必须同时满足,我们就可以使用&&运算符连接两个条件Predicate接口中有一个方法and,表示并且关系,也可以用于连接两个判断原创 2020-11-17 16:16:17 · 102 阅读 · 0 评论 -
java进阶打卡35
Supplier函数式接口java.util.function.Supplier 接口仅包含一个无参的方法:T get()。用来获取一个泛型参数指定类型的对象数据。Supplier接口被称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会产生什么类型的数据// 定义一个方法,方法的参数传递Supplier<T>接口,泛型指定String,get方法就会返回一个Stringpublic static String getString(Supplier<String&原创 2020-11-17 15:49:48 · 102 阅读 · 0 评论 -
java进阶打卡34
函数式接口函数式接口:有且只有一个抽象方法的接口,称之为函数式接口。当然接口中可以包含其他的方法(默认,静态,私有)。函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。备注:“语法糖”是指使用更加方便,但是原理不变的代码语法。例如在遍历集合时使用的for-each语法,其实底层的实现原理仍然是迭代器,这便是“语法糖”。从应用层面原创 2020-11-17 15:09:02 · 71 阅读 · 0 评论 -
java进阶打卡33
TCP通信的文件上传案例练习优化服务器端文件命名&循环结束&多线程提高效率public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(8888); // 让服务器一直处于监听状态(死循环accept方法):有一个客户端上传文件,就保存一个文件。 while(true){ Socket socket = server原创 2020-11-16 14:41:42 · 76 阅读 · 0 评论 -
java进阶打卡32
TCP通信TCP通信:面向连接的通信,客户端和服务器端必须得经过3次握手,建立逻辑连接,才能通信(安全)通信的步骤:服务器端先启动,服务器端不会主动的请求客户端,必须使用客户端请求服务器端,客户端和服务器端就会建立一个逻辑连接。而这个连接中包含一个对象,这个对象就是【IO对象】。客户端和服务器端就可以使用IO对象进行通信,通信的数据不仅仅是字符,所以IO对象是【字节流对象】。客户端和服务器端进行一个数据交互,需要4个IO流对象。客户端 配置低的计算机 ip:端口号 Socket类1. 客原创 2020-11-16 13:47:58 · 51 阅读 · 0 评论 -
java进阶打卡31
打印流PrintStreamjava.io.PrintStream:打印流 PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。PrintStream特点: 1. 只负责数据的输出,不负责数据的读取 2. 与其他输出流不同,PrintStream永远不会抛出IOException 3. 【有特有的方法,print,println void print(任意类型的值) void println(任意类型的值原创 2020-11-16 10:55:21 · 88 阅读 · 0 评论 -
java进阶打卡30
对象的序列化流ObjectOutputStream把对象以流的方式,写入到文件中保存,叫【写对象】,也叫【对象的序列化】。【对象中包含的不仅仅是字符,使用字节流】java.io.ObjectOutputStream extends OutputStreamObjectOutputStream:对象的序列化流作用:把对象以流的方式写入到文件中保存构造方法: ObjectOutputStream(OutputStream out) 创建写入指定OutputStream的ObjectOutp原创 2020-11-14 19:54:38 · 70 阅读 · 0 评论 -
java进阶打卡29
缓冲流练习对文本的内容进行排序,按照(1,2,3…)顺序排序分析: 1. 创建一个HashMap集合对象,key:存储每个文件的序号(1,2,3....);value:存储每行的文本 2. 创建字符缓冲输入流对象,构造方法中绑定字符输入流 3. 创建字符缓冲输出流对象,构造方法中绑定字符输出流 4. 使用字符缓冲输入流中的方法read/readLine,逐行读取文本 5. 对读取到的文本进行切割,获取行中的序号和文本内容 6. 把切割好的序号和文本的内容存原创 2020-11-14 18:31:41 · 79 阅读 · 0 评论 -
java进阶打卡28
字节缓冲输出流BufferedOutputStreamjava.io.BufferedOutputStream extends OutputStream继承自父类的共性成员方法: - public void close():关闭此输出流并释放与此流相关联的任何系统资源。 - public void flush():刷新此输出流并强制任何缓冲的输出字节被写出。 - public void write(byte[] b):将b.length字节从指定的字节数组写入此输出流。原创 2020-11-14 10:01:03 · 59 阅读 · 0 评论 -
java进阶打卡27
流中异常的处理JDK1.7之前流中异常的处理在jdk1.7之前使用try catch finally 处理流中的异常格式: try{ 可能会产生异常的代码 }catch(异常类变量 变量名){ 异常的处理逻辑 }finally{ 一定会执行的代码 资源释放 }例如:public static void main(String[] args) { // 提高变量fw的作用域,让finally可以使原创 2020-11-13 16:59:03 · 94 阅读 · 0 评论 -
java进阶打卡26
字节流练习文件复制练习:一读一写要求: 数据源:c:\\1.jpg 数据的目的地:d:\\1.jpg文件复制的步骤: 1. 创建一个字节输入流对象,构造方法中绑定要读取的数据源 2. 创建一个字节输出流对象,构造方法中绑定要写入的目的地 3. 使用字节输入流对象中的方法read读取文件 4. 使用字节输出流中的方法write,把读取到的字节写入到目的地文件中 5. 释放资源(先关闭写的,后关闭读的;如果写完了,肯定读取完了)public s原创 2020-11-13 12:32:29 · 75 阅读 · 0 评论 -
java进阶打卡25
IO流硬盘:永久存储 内存:临时存储i:input 输入(读取)o:output 输出(写入)流:数据(字符,字节) 1个字符 = 2个字节 1个字节 = 8个二进制位输入:把硬盘中的数据,读取到内存中使用输出:把内存中的数据,写入到硬盘中保存顶级父类们 输入流 输出流字节流 字节输入流InputStream 字节输出流OutputStream字符流 字符输入流Reader 字符输出流Writer字节输出流OutputStreamjava.io.Output原创 2020-11-13 11:05:45 · 83 阅读 · 0 评论 -
java进阶打卡24
FileFilter过滤器在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器File[] ListFiles(FileFilter filter)java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器。 作用:用来过滤文件(File对象) 抽象方法:用来过滤文件的方法 boolean accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中。 参数:原创 2020-11-12 12:03:06 · 78 阅读 · 0 评论 -
java进阶打卡23
递归练习练习一使用递归计算1-n之间的和定义一个方法,使用递归计算1-n之间的和1+2+3+...+nn+(n-1)+(n-2)+...+1已知: 最大值:n 最小值:1使用递归必须明确: 1. 递归的结束条件 获取到1的时候结束 2. 递归的目的 获取下一个被加的数字(n-1)public static void main(String[] args) { int s = sum(3); System.out.println(s);}public sta原创 2020-11-12 11:17:27 · 71 阅读 · 0 评论 -
java进阶打卡22
File类获取功能的方法(1)public String getAbsolutePath():返回此File的绝对路径名字符串。获取的是构造方法中传递的路径。注意:无论路径是绝对的还是相对的,getAbsolutePath方法返回的都是绝对路径例如: File f1 = new File("D:\\IdeaProjects\\advanced-code\\a.txt"); String absolutePath1 = f1.getAbsolutePath(); Syst原创 2020-11-12 10:31:05 · 56 阅读 · 0 评论 -
java进阶打卡21
Lambda表达式练习(续)自定义接口的有参数有返回值练习需求: 给定一个计算器Calculator接口,内含抽象方法calc可以将两个int数字相加得到和值 使用Lambda的标准格式调用invokeCalc方法,完成120和130的相加计算public interface Calculator { public abstract int calc(int a, int b);}public class Demo01Calculator { public原创 2020-11-11 21:59:02 · 141 阅读 · 1 评论 -
java进阶打卡20
函数式编程思想面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情函数式编程思想:只要能获取到结果,怎么做的都不重要,重视的是结果,不重视过程冗余的Runnable代码使用实现Runnable接口的方式实现多线程程序public class RunnableImpl implements Runnable{ @Override public void run() { System.out.println(Thread.curren原创 2020-11-10 18:23:41 · 68 阅读 · 0 评论 -
java进阶打卡19
等待与唤醒机制:线程之间的通信(续)资源类public class BaoZi { String pi; String xian; // 包子的状态:设置初始值为false没有包子 boolean flag = false;}生产者(包子铺)类注意: 包子铺线程和包子线程关系-->通信(互斥) 必须使用同步技术保证两个线程只能有一个在执行 锁对象必须保证唯一,可以使用包子对象作为锁对象 包子铺类和吃货的类就需要把包子对原创 2020-11-10 17:59:42 · 67 阅读 · 0 评论 -
java进阶打卡18
线程状态线程有6种状态:(1)NEW:新建状态,至今尚未启动的线程处于这种状态。 new Thread(); new Thread子类();(2)RUNNABLE:运行状态,正在Java虚拟机中执行的线程属于这种状态。 start()(3)BLOCKED:阻塞状态,受阻塞并等待某个监视器锁的线程处于这种状态。 (4)WAITING:无限(永久)等待状态,无限期地等待另一个线程来执行某一待定操作的线程处于这种状态。 Object.wait() Object.notify()(5)TIMED_W原创 2020-11-10 17:47:51 · 104 阅读 · 0 评论 -
java进阶打卡17
匿名内部类方式实现线程的创建匿名:没有名字内部类:写在其他类内部的类匿名内部类作用:简化代码 把子类继承父类,重写父类的方法,创建子类对象合成一步完成 把实现类实现接口,重写接口中的方法,创建实现类对象合成一步完成匿名内部类的最终产物:子类/实现类对象,而这个类没有名字格式: new 父类/接口(){ 重写父类/接口中的方法; };例如://线程的父类是Thread//new MyThread().start();new Thread(原创 2020-11-09 19:22:20 · 57 阅读 · 0 评论 -
java进阶打卡16
主线程主线程:执行主(main)方法的线程单线程程序:java程序中只有一个线程执行从main方法开始,从上到下依次执行JVM执行main方法,main方法会进入到栈内存,JVM会找操作系统开辟一条main方法通向cpu的执行路径,cpu就可以通过这个路径来执行main方法,而这个路径有一个名字,叫【main(主)线程】。创建多线程程序的第一种方式:创建Thread类的子类java.lang.Thread类:是描述线程的类,我们想要实现多线程程序,就必须继承Thread类实现步骤:1原创 2020-11-09 16:19:09 · 80 阅读 · 0 评论 -
java进阶打卡15
自定义异常类java提供的异常类,不够我们使用,需要自己定义一些异常类格式: public class XXXException extends Exception / RuntimeException{ 添加一个空参数的构造方法 添加一个带异常信息的构造方法 }注意: 1. 自定义异常类一般都是以Exception结尾,说明该类是一个异常类 2. 自定义异常类,必须得继承Exception或者RuntimeException原创 2020-11-09 15:32:50 · 139 阅读 · 2 评论 -
java进阶打卡14
Throwable类中3个异常处理的方法(1)String getMessage() 返回此Throwable的简短描述例如: System.out.println(e.getMessage());//文件的后缀名不对(2)String toString() 返回此Throwable的详细信息字符串例如: System.out.println(e.toString());//java.io.IOException: 文件的后缀名不对 System.out.println(e);//java.i原创 2020-11-08 17:42:23 · 71 阅读 · 0 评论 -
java进阶打卡13
异常异常:指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。注意:异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行。java.lang.Throwable类:是Java语言中所有错误或异常的超类。 Exception:编译期异常,进行编译(写代码)java程序出现的问题 RuntimeException:运行期异常,java程序运原创 2020-11-08 17:18:51 · 111 阅读 · 0 评论 -
java进阶打卡12
JDK9的新特性List接口,Set接口,Map接口:里边增加了一个静态的方法of,可以给集合一次性添加多个元素 static <E> list<E> of (E... elements) 使用前提: 当集合中存储的元素的个数已经确定了,不再改变时使用注意: 1. of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类 2. of方法的返回值时一个不能改变的集合,集合不能再使用add、put方法添加元素,会抛出异原创 2020-11-07 11:18:23 · 77 阅读 · 0 评论 -
java进阶打卡11
HashMap存储自定义类型键值Map集合保证key是唯一的: 作为key的元素,必须重写hashCode和equals方法,以保证key唯一1. HashMap存储自定义类型键值 key:String类型 String类重写了hashCode方法和equals方法,可以保证key唯一 value:Person类型 value可以重复(同名同年龄的人视为同一个) 例如: HashMap<String, Person>原创 2020-11-06 20:18:59 · 99 阅读 · 1 评论 -
java进阶打卡10
Map集合java.util.Map(k,v)集合Map集合的特点: 1. Map集合是一个双列集合,一个元素包含两个值(一个key,一个value) 2. Map集合中的元素,key和value的数据类型可以相同,也可以不同 3. Map集合中的元素,key是不允许重复的,value是可以重复的 4. Map集合中的元素,key和value是一一对应的 java.util.HashMap<k,v>集合 implements Map<k,v&g原创 2020-11-06 19:53:40 · 63 阅读 · 0 评论 -
java进阶打卡09
可变参数可变参数:是JDK1.5之后出现的新特性使用前提: 当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数。使用格式:定义方法时使用 修饰符 返回值类型 方法名(数据类型...变量名) {}可变参数的原理: 可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数 传递的参数个数,可以是0个(不传递),1,2...多个// int i = add(); // 不传递int i = add(10, 20);原创 2020-11-06 18:22:07 · 83 阅读 · 0 评论 -
java进阶打卡08
哈希值哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来的地址,不是数据实际存储的物理地址)在Object类中有一个方法,可以获取对象的哈希值int hashCode() 返回该对象的哈希码值。hashCode方法的源码: public native int hashCode(); native:代表该方法调用的是本地操作系统的方法例如:public class Person extends Object{ // 重写hashCod原创 2020-11-06 10:42:19 · 80 阅读 · 0 评论 -
java进阶打卡07
List集合java.util.List接口 extends Collection接口List接口的特点: 1. 有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123) 2. 有索引,包含了一些带索引的方法 3. 允许存储重复的元素List接口中带索引的方法(特有):(1)public void add(int index, E element):将指定的元素,添加到该集合中的指定位置上。 例如: list.add(1,"b"); (2)public原创 2020-11-06 09:36:20 · 117 阅读 · 2 评论 -
java进阶打卡06
斗地主综合案例练习案例分析1. 准备牌:54张牌,存储到一个【集合】中特殊牌:大王、小王其他52张牌: 定义一个【数组/集合】,存储4种花色:♠、♥、♣、♦ 定义一个【数组/集合】,存储13个序号:2,A,K...3循环嵌套遍历两个【数组/集合】,组装52张牌 ♠2,♠A,♠K...♠3 ♥2,♥A,♥K...♥3 ....2. 洗牌 使用集合工具类Collections的方法 static void shuffle(List<?> list) 使用指定的随机源对指定原创 2020-11-06 08:38:25 · 106 阅读 · 0 评论 -
java进阶打卡05
含有泛型的类定义一个含有泛型的类,模拟ArrayList集合泛型是一个未知的数据类型,当我们不确定使用什么类型的时候,可以使用泛型泛型可以接收任意的数据类型,可以使用Integer,String,Student...创建对象的时候确定泛型的数据类型注意:不写泛型默认为Object类型例如:public class GenericClass<E> { private E name; //自动生成Getter/Setter public E原创 2020-11-04 17:33:36 · 87 阅读 · 1 评论 -
java进阶打卡04
Collection集合java.util.Collection接口所有单列集合的最顶层的接口,里边定义了所有单列集合共性的方法任意的单列集合都可以使用Collection接口中的方法共性的方法:(1)public boolean add(E e):把给定的对象添加到当前集合中注意:返回值是一个boolean值,一般都返回true,所以可以不用接收例如: Collection<String> coll = new ArrayList<>(); coll.add("张原创 2020-11-04 17:00:29 · 54 阅读 · 0 评论 -
java进阶打卡03
StringBuilder类和String类的转换1. String --> StringBuilder:可以使用StringBuilder的构造方法(1)StringBuilder(String str) 构造一个字符串生成器,并初始化为指定的字符串内容例如: String str = "Hello"; StringBuilder bu = new StringBuilder(str);2. StringBuilder --> String:可以使用StringBuilder原创 2020-11-04 15:58:00 · 80 阅读 · 1 评论 -
java进阶打卡02
日期相关类(续)Calendar类java.util.Calendar类:日历类。里边提供了很多操作日历字段的方法(YEAR、MONTH、DAY_OF_MONTH、HOUR)Calendar类是一个抽象类,无法直接创建对象使用,里边有一个静态方法叫getInstance(),该方法返回了Calendar类的子类对象1. 创建对象方式(1)static Calendar getInstance() 使用默认时区和语言环境获得一个日历例如: Calendar c = Calendar.getIn原创 2020-11-03 14:18:34 · 757 阅读 · 0 评论 -
java进阶打卡01
Object类java.lang.Object类 不需要导包 类Object是类层次结构的根(最顶层)类。每个类都使用Object作为超(父)类。 所有对象(包括数组)都可以实现这个类的方法。toString方法String toString() 打印对象的信息。重写前:打印的是包名类名@地址值重写后:打印的是对象中的属性值 注意事项:直接打印对象的名字,其实就是调用对象的toString方法 s = s.toString();例如: Student s = new原创 2020-11-02 21:49:51 · 93 阅读 · 0 评论