学完JAVASE之后的第一次整体总结。采用关键字的方式,对自己的知识掌握程度做复盘,会的知识不做详细复盘。温故知新,道阻且长!
1、继承与抽象类继承
单继承 方法重写 访问采用就近原则抽象类:
抽象类中的方法不一定是抽象方法,抽象方法一定在抽象类中
2、接口和多态
接口 定义规范 抽取共同行为
多态 一中事务的多种表现形式, 继承是多态的前提
封装 安全性 继承 复用性 多态 拓展性
3、修饰符和内部类
修饰符 private 本类 protected 本包及外包子父类 defalut 本包 public 公共
内部类 普通内部类和匿名内部类,匿名内部类使用较多,多在方法参数和返回值使用。
4、常用API
Math 计算的一些方法
Date时间的方法,还有字符串和时间的互相转换 SimpleDateFormat
Calendar 相当于是一个存储时间的类 可以设置,取出各个字段
System类 获取毫秒值,退出虚拟机 复制数组
Arrays toString sort binarySearch 可以找出某个元素的索引
5、异常
解决方法就是throws抛出或者是try catch捕获
也可以自定义异常,自己抛 throw
6、collection 和list
使用方法:get set remove size isEmpty等等
collection下面还有两个子类 list 和set
list中还有ArrayList 和linkedList
Collections中的方法:shuffle打乱方法 sort排序,可以自定义排序规则,
7、set
泛型 预支未知的数据类型
Hashset无索引,不重复,无序,底层由数组和链表或者是红黑树构成,
linkedHashSet 无索引,不重复,有序 底层由数组和链表或者是红黑树构成 .多维护了一个linkedHashSet 用来排序
TreeSet 底层用的是二叉树 有序
8、Map集合
里面是键值对,底层也是由哈希表实现,数组和链表或者红黑树实现。
put get(key) keySet entrySet remove values containsKey containsValues
Properties 多用于配置文件 和Map一样也是键值对元素
map不重复,存入和取出的顺序一样。
可变参数 ...参数名称 实际上是一个数组,但是在参数列表中只能放在最后一个
集合嵌套的循环 fori forr foreach iterator
9、多线程
实现方法:继承Thread 实现Runnable 实现Callable接口 线程池
线程锁:synchronized 代码块
Lock lock = new ReentrantLock() -> lock.Lock() lock.unLock()
synchronized静态方法 ->使用的是类名.class
synchronized普通方法-> 使用的是方法的调用者,this
实现方法当中的Callable接口不太常用,容易被忽视,要将实现该接口的实例化对象当作FutureTask对象的构造方法参数,再将FutureTask作为线程的参数,并且还能调用get() 获取返回值。如果是线程池提交的Callable任务,那么返回的就是Future对象,也可以调用get()方法
线程池的创建方法也有两种,ExecutorService exe = Executors.newFixedThreadPoll() ;这种方法使用默认的一些参数,要想自定义参数就要使用下面的那一种方法
ThreadPoolExecutor。其构造函数中有七种参数
corePoolSize 核心线程数
maximunPoolSize 最大线程数 = 核心线程数+临时线程数
keepAliveTime 存活时间
TimeUnit 是个枚举 存活时间的单位
BlockingQueue阻塞队列 分为有界队列和无界队列
ThreadFactory 线程工厂 固定写法 Exrcutors.defaultThreadFactory() 或者是Thread::new RejectedExecutorHandler 拒绝策略
有四种拒绝策略 AdortPolicy 一旦无法处理,立刻抛出异常
DiscardPolisy 一旦无法处理 就丢弃任务
DiscardOldestPolicy 一旦无法处理就和等待时间最长的任务替换
CallerRunsPolicy 一旦无法处理 绕过线程池,让当前线程处理
拒绝策略的书写方式:new ThreadPoolExecutor.拒绝策略
线程的六大状态:创建 运行 消亡 阻塞 限时等待 无限等待
线程唤醒机制 wait() 等待 notify() 唤醒某一个 notifyAll() 唤醒所有
10、IO流
File的创建,三种参数列表的构造方法
getAbsolutePath() 获得File对象的绝对路径
getPath() 获得File对象封装时传入的路径
getName() 获得文件的名字
isDirectory() 判断对象是不是目录文件
isFile() 判断对象是不是文件
exists() 判断对象路径名的文件是否存在
createNewFile() 创建一个新的空文件
mkdir 创建一个文件夹
mkdirs 创建一个多级文件夹
delete() 删除抽象路径名的文件或者目录,如果删除的是文件夹,里面还有文件的话是不会删除成功的,只有里面没有文件了才会删除成功
listFile() 返回的是该抽象路径名下的所有文件和目录的File对象数组
11、IO流划分
字节流 缓冲字节流 字符流 缓冲字符流 便捷字符流 序列化流 打印流
其中序列流中,序列化的对象需要实现Serilizable接口,并且定义serialVersionUID,才可以。
其中,如果有不想被序列化的成员变量,可以使用transient关键字。
这里还有提到Properties 可以和io流配合使用,不过只适配字符串相关的键值对。
通过load方法读取文件中的内容到properties,通过store方法写入到文件中
12、lambda表达式
这实际上就是一种简写方式,用于匿名内部类作为方法参数的时候可以替换使用,大量减少代码量。其中有四种函数式接口,并且要保证该接口只有一个抽象方法才可以使用lamdba表达式,这里可以使用一个注解来表示lamdba可以使用的函数接口, @FunctionalInterface!
生产型函数式接口 Supplier 返回一个你想要的值
消费型函数式接口 Consumer 对传入的参数进行运算
谓词型函数式接口 Predicate 判断传入的参数,返回booelan
功能型函数式接口 Function 用来转换数据类型,传入类型A,转换成类型B并返回
13、网络编程
这里主要就涉及到服务端和客户端的通信。连接的时候用三次握手,断开的时候用四次挥手。
server服务端 ServerSocket server = new ServerSocket(监听端口号)
Socket socket = server.accept();
socket.getRemoteAddress() 获取连接对象的地址
socket.getInputStream()
socket.getOutputStream()
client客户端
Socket socket = new Socket("IP地址",端口号);
socket.getInputstream
socket.getOutputStream
14、stream流
这是一种可以更便捷处理大量数据的方法
filter 过滤
sorted 排序
limit 截取前几个
skip跳过几个 保留剩下的
map 转换流的类型
collect() 收集元素 toList toSet toMap
concat 合并流
foreach 终结方法 遍历
count 终结方法 获取元素个数
15、xml
是一种配置文件,有具体的格式,头部声明
首行首列进行文档声明格式如下:<?xml version="1.0" encoding="UTF-8" standalone="yes/no" ?> standalone 是否依赖其他XML文件单独存在,可写可不写
有且只能有一个根标签
有两种约束文件,分别是dtd文件和shema文件,两种文件格式不同,之后基本不用自己写,所以了解就可以。 特殊文本内容可以用特殊符号,也可以用CDATA区<![CDATA[...内容...]]>
16、枚举和反射、类加载器
枚举实际上就是一个有取值范围的类,里面的每一个元素就是这个类的实体类对象之一,里面也有一些获取信息的方法。
name() 获取枚举项的名称
ordinal() 获取枚举项的索引
compareTo() 比较两个枚举项,返回的是枚举相索引的差值
toString() 返回枚举常量的名称
valueOf(Class<T> type,String name) 获取指定枚举类中的指定枚举项的枚举值
values() 返回所有的枚举项 ,一个数组
类加载器:
反射:
注解:
补充内容:红黑树口诀