最近忙着复习Java和操作系统,第二篇博客到现在才写完。这次主要是记录最近的Java复习内容,知识点比较散,希望对各位读者有帮助,也便于我考前再回顾一遍。
基础
main函数参数
用split以空格划分字符串;
Java保留小数输出;
方法
构造方法
JavaBean
数据类型
Math类
for-each遍历
字符串
equals()
比较两个字符串是否相同时,要特别注意,我们实际上是想比较字符串的内容是否相同。必须使用equals()方法而不能用==。要忽略大小写比较,使用equalsIgnoreCase()方法。
数组
Array.sort() 为升序排列
排序详解:JAVA数组中五种常见排序方法_WYJ的博客-CSDN博客_java数组排序
Static
Final
接口和抽象类
接口
抽象类
异同
区别:(1)抽象类可以有构造方法,接口中不能有构造方法。(2)抽象类中可以有普通成员变量,接口中没有普通成员变量(3)抽象类中可以包含静态方法,接口中不能包含静态方法(4)
一个类可以实现多个接口,但只能继承一个抽象类。(5)接口可以被多重实现,抽象类只能被单一继承(6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
相同点:(1) 都可以被继承(2) 都不能被实例化(3) 都可以包含方法声明(4)
派生类必须实现未实现的方法
异常
分类与联系
Throw和throws
集合
△思维导图△
引入
Collection 接口存储一组不唯一,无序的对象。List接口存储一组不唯一,有序(插入顺序)的对象,允许插入重复的元素和null。Set接口存储一组唯一,无序的对象。SortedSet继承于Set保存有序的集合。Map接口存储一组键值对象,提供key(键)到value(值)的映射。Map.Entry描述在一个Map中的一个元素(键/值对),是一个Map 的内部接口。SortedMap继承于 Map,使 Key保持在升序排列。Enum是一个传统的接口和定义的方法,通过它可以枚举(一次获得一个)对象集合中的元素。这个传统接口已被迭代器取代。
Iterator
List
LinkedList
以下情况使用 ArrayList :
- 频繁访问列表中的某一个元素。
- 只需要在列表末尾进行添加和删除元素操作。
以下情况使用 LinkedList :
- 你需要通过循环迭代来访问列表中的某些元素。
- 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
LinkedList 继承了 AbstractSequentialList 类。
LinkedList 实现了 Queue 接口,可作为队列使用。
LinkedList 实现了 List 接口,可进行列表的相关操作。
LinkedList 实现了 Deque 接口,可作为队列使用。
LinkedList 实现了 Cloneable 接口,可实现克隆。
LinkedList 实现了 java.io.Serializable
接口,即可支持序列化,能通过序列化去传输。
ArrayList
Map
Map中不存在重复的key,因为放入相同的key,只会把原有的key-value对应的value给替换掉。虽然key不能重复,但value是可以重复的。遍历Map时,不可假设输出的key是有序的!Map是一种映射表,可以通过key快速查找value。可以通过for
each遍历keySet(),也可以通过for
each遍历entrySet(),直接获取key-value。最常用的一种Map实现是HashMap。
HashMap
EnumMap
如果Map的key是enum类型,推荐使用EnumMap,既保证速度,也不浪费空间。
使用EnumMap的时候,根据面向抽象编程的原则,应持有Map接口。
TreeMap/SortedMap
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DXsKWp7r-1637159556044)(media/d17ac6c106cbbefe6d9794b8847a1dca.png)]
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GBYW8MHb-1637159556045)(media/95c32f800cef9cfde317508271844255.png)
Properties的使用
Set
Set用于存储不重复的元素集合,它主要提供以下几个方法:
- 将元素添加进Set\<E\>:boolean add(E e)
- 将元素从Set\<E\>删除:boolean remove(Object e)
- 判断是否包含元素:boolean contains(Object e)
Set实际上相当于只存储key、不存储value的Map。我们经常用Set用于去除重复元素。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AU0wJeoA-1637159556046)(media/7f0f444d138bac5046f92a395fe01778.png)]
HashSet
TreeSet
LinkedHashSet
Queue
队列接口Queue定义了以下几个方法:
- int size():获取队列长度;
- boolean add(E)/boolean offer(E):添加元素到队尾;
- E remove()/E poll():获取队首元素并从队列中删除;
- E element()/E peek():获取队首元素但并不从队列中删除。
PriorityQueue
PriorityQueue实现了一个优先队列:从队首获取元素时,总是获取优先级最高的元素。PriorityQueue默认按元素比较的顺序排序(必须实现Comparable接口),也可以通过Comparator自定义排序算法(元素就不必实现Comparable接口)。
Deque
Deque是一个接口,它的实现类有ArrayDeque和LinkedList。
我们发现LinkedList真是一个全能选手,它即是List,又是Queue,还是Deque。但是我们在使用的时候,总是用特定的接口来引用它,这是因为持有接口说明代码的抽象层次更高,而且接口本身定义的方法代表了特定的用途。
Deque实现了一个双端队列(Double Ended Queue),它可以:
- 将元素添加到队尾或队首:addLast()/offerLast()/addFirst()/offerFirst();
- 从队首/队尾获取元素并删除:removeFirst()/pollFirst()/removeLast()/pollLast();
- 从队首/队尾获取元素但不删除:getFirst()/peekFirst()/getLast()/peekLast();
- 总是调用xxxFirst()/xxxLast()以便与Queue的方法区分开;
- 避免把null添加到队列。
Vector
Stack
Collections
Collections类提供了一组工具方法来方便使用集合类:
- 创建空集合;
- 创建单元素集合;
- 创建不可变集合;
- 排序/洗牌等操作。
△Equals方法编写△
泛型
**Java泛型PECS原则:如果你只需要从集合中获得类型T,使用\<? extends
T\>通配符,如果你只需要将类型T放到集合中,使用\<? super T\>通配符,如果你既要获取又要放置元素,则不使用任何通配符。PESC即Producer extends Consumer super。**
泛型与反射
反射
基本用法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EiservfK-1637159556058)(media/a18f7fd6a16d015694406c4479dfa53e.png)]
Class类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cNuV47Dy-1637159556060)(media/a8b2067fbd580301c04b1f730de9433e.png)]
ClassLoader类
枚举
<br/>
I/O
引语
File类
File对象既可以表示文件,也可以表示目录。特别要注意的是,构造一个File对象,即使传入的文件或目录不存在,代码也不会出错,因为构造一个File对象,并不会导致任何磁盘操作。只有当我们调用File对象的某些方法的时候,才真正进行磁盘操作。例如,调用isFile(),判断该File对象是否是一个已存在的文件,调用isDirectory(),判断该File对象是否是一个已存在的目录:
用File对象获取到一个文件时,还可以进一步判断文件的权限和大小:
- boolean canRead():是否可读;
- boolean canWrite():是否可写;
- boolean canExecute():是否可执行;
- long length():文件字节大小。
当File对象表示一个文件时,可以通过createNewFile()创建一个新文件,用delete()删除该文件。有些时候,程序需要读写一些临时文件,File对象提供了createTempFile()来创建一个临时文件,以及deleteOnExit()在JVM退出时自动删除该文件。
当File对象表示一个目录时,可以使用list()和listFiles()列出目录下的文件和子目录名。listFiles()提供了一系列重载方法,可以过滤不想要的文件和目录。
和文件操作类似,File对象如果表示一个目录,可以通过以下方法创建和删除目录:
- boolean mkdir():创建当前File对象表示的目录;
- boolean
mkdirs():创建当前File对象表示的目录,并在必要时将不存在的父目录也创建出来; - boolean delete():删除当前File对象表示的目录,当前目录必须为空才能删除成功。
输入输出流
InputStream并不是一个接口,而是一个抽象类。
public abstract int read() throws IOException;
这个方法会读取输入流的下一个字节,并返回字节表示的int值(0\~255)。如果已读到末尾,返回-1表示不能继续读取了。
FileInputStream是InputStream的一个子类。顾名思义,FileInputStream就是从文件流中读取数据。InputStream和OutputStream都是通过close()方法来关闭流。关闭流就会释放对应的底层资源。
OutputStream还提供了一个flush()方法,它的目的是将缓冲区的内容真正输出到目的地。
其他文件的读写
ZIP
Classpath资源
序列化和反序列化
一个Java对象要能序列化,必须实现一个特殊的java.io.Serializable接口,它的定义如下:
public interface Serializable {
}
Serializable接口没有定义任何方法,它是一个空接口。我们把这样的空接口称为“标记接口”(Marker
Interface),实现了标记接口的类仅仅是给自身贴了个“标记”,并没有增加任何方法。
可序列化的Java对象必须实现java.io.Serializable接口,类似Serializable这样的空接口被称为“标记接口”(Marker
Interface);
反序列化时不调用构造方法,可设置serialVersionUID作为版本号(非必需);
Java的序列化机制仅适用于Java,如果需要与其它语言交换数据,必须使用通用的序列化方法,例如JSON。
Reader/Writer
PrintStream和PrintWriter
System.err是系统默认提供的标准错误输出。
Files类
从Java7开始,提供了Files和Paths这两个工具类,能极大地方便我们读写文件。虽然Files和Paths是java.nio包里面的类,但他俩封装了很多读写文件的简单方法。Files工具类还有copy()、delete()、exists()、move()等快捷方法操作文件和目录。
注解
关于NULL
线程
并发和并行
实现方法
多线程
多线程模型下,要保证逻辑正确,对共享变量进行读写时,必须保证一组指令以原子方式执行:即某一个线程执行时,其他线程必须等待。保证一段代码的原子性就是通过加锁和解锁实现的。Java程序使用synchronized关键字对一个对象进行加锁。
线程同步 - 廖雪峰的官方网站 (liaoxuefeng.com)
UML类图画法
PTA复习
判断回文数
最大公约数和最小公倍数
字符串去除数字并反转
使用继承设计:教师类。
设计一个矩形类Rectangle
人口统计
浅拷贝和深拷贝
求圆面积自定义异常类
试试多线程
编写4个线程,第一个线程从1加到25,第二个线程从26加到50,第三个线程从51加到75,第四个线程从76加到100,最后再把四个线程计算的结果相加。
class Count extends Thread{
int start;
Count(int start) {
this.start = start;
}
@Override
public synchronized void run() {
for (int i = start; i < start + 25; i++) {
Main.sum += i;
}
}
}
public class Main{
public static int sum = 0;
public static void main(String[] args) throws Exception {
Count count1 = new Count(1);
Count count2 = new Count(26);
Count count3 = new Count(51);
Count count4 = new Count(76);
count1.start();
count1.join();
count2.start();
count2.join();
count3.start();
count3.join();
count4.start();
count4.join();
System.out.println(sum);
}
}
BankAccout类的编写
参考
- CSDN秃秃秃秃秃秃秃头用户
- 菜鸟教程Java部分
- 廖雪峰教程Java部分
- 程序员cxuan的java总结文档
- JavaGuide项目
视频和音乐功能和贴心
后面会出更多实用的工具的
不愧是杰哥
牛啊牛啊
杰哥可以的
123456
看起来不错哦
牛啊牛啊
牛啊牛啊
555