Java
下载 JDK
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
华为云
https://repo.huaweicloud.com/java/jdk/8u151-b12/
阿里云
linux版本 jdk-11.0.7_linux-x64_bin.tar.gz
jdk11 mac jdk-11.0.7_osx-x64_bin.tar.gz
jdk11 windows jdk-11.0.7_windows-x64_bin.zip
jdk8 linux jdk-8u251-linux-x64.tar.gz
jdk8 mac jdk-8u251-macosx-x64.dmg
jdk8 windows jdk-8u251-windows-x64.exe
零基础 Java 教程
廖雪峰:https://www.liaoxuefeng.com/wiki/1252599548343744
java 复习快速导航
Lambda
https://www.kancloud.cn/hanxt/javacrazy/1568811
Java反射
基础
- Java 类中在没有构造方法时,有一个默认无参构造器。如果存在有参构造器,则默认无参构造器失效,需要添加无参构造器代码,否则无法无参实例化对象
巨坑
1 | String s = "1,2,"; |
集合
简述
- Collection
集合的顶级接口。
- List 列表
保证元素的存储顺序 — 有序;
有下标 —- 存储重复的元素
List 是有序可重复的集合
- ArrayList
底层用数组存储数据。内存连续的,默认初始容量为 10,每次默认在上一次长度上增加一半,底层是基于右移运算来实现的。是一个线程不安全的集合。便于查询,不便于增删
- LinkedList
通过节点 Node 实现的链表,内存不连续,没有初始容量,不需要考虑扩容问题。是一个线程不安全的集合。便于增删,不便于查询元素
- Vector
向量 — 基于数组来实现的。内存连续的。默认初始容量是 10,默认每次容量翻倍,基于三元运算来实现。是一个线程安全的集合
- Stack
栈。是 Vector 的子类。遵循先进先出的原则。
向栈中放入元素 —- 入栈 / 压栈
从栈中取出元素 —- 出栈 / 弹栈
- Set
接口,无序不允许有重复元素的集合
- HashSet—- 线程不安全的
存储机制:底层是用的一个数组来存储的数据,这个数组的默认大小是 16.
数组的每个位置称为一个桶(bucket),每一个桶中维系了一个链式栈结构。
- Queue
队列(先进先出)所有新的元素插入到队列的尾部
- Iterator
迭代器 — 本质上是通过指针的挪动来获取每一个元素。在遍历的时候,会复制原集合,然后一次给每个元素一个标记,如果这个元素被移除,则标记为 false,反之为 true, 便利完成之后,会去比对原集合,如果标记为 false,则将该元素从原集合中移除 —– 在迭代过程中,不允许直接增删原集合中的元素
- Map<K,V>— 映射 (散列表)
两组变量 — 键,值。每一个键必然对应一个值,键不可重复 —- 一个映射实际上是由多个键值对组成。
HashMap: 允许键或者值为 null. 默认初始容量是 16,加载因子是 0.75f,默认增加一倍 是一个异步式线程不安全的映射。
Hashtable: 不允许键或者值为 null. 默认初始容量 11,加载因子是 0.75f。是一个同步式线程安全的映射
ConcurrentHashMap— 异步式线程安全的映射
用法
Java 集合中有两类,一类是
List
,一类是Set
。List
有序且可以重复,而 Set 无序不可重复求 list 子集
1
list.subList(fromIndex, toIndex) ;
求两个 list 的并集:
1
list1.addAll(list2)
求两个 list 的差集
1
list1.removeAll(list2)
ArrayList、LinkedList
- 在使用
ArrayList
时,如果能提前预测到数据量大小,比较大时一定要指定其长度 - 尽可能避免使用
add(index,e)
,会导致复制数组,降低效率 ArrayList
是数组结构,LinkedList
是双向链表- 在
ArrayList
不指定长度情况下,大批量插入数据LinkedList
的写入效率高于ArrayList
- 在
ArrayList
指定长度情况下,写入效率高于LinkedList
Map
容器HashMap
也是推荐要初始化长度从而避免扩容
Map、HashMap、LinkedHashMap、Set、HashSet、LinkedHashSet
HashMap 底层实现是数组,但数组的每一项都是一条链
HashMap 可以允许存在一个为 null 的 key 和任意个为 null 的 value
HashTable 中的 key 和 value 都不允许为 null
HashTable 的方法是同步的,线程安全,而 HashMap 的方法不是
HashSet 基于 HashMap 来实现的,底层采用 HashMap 来保存元素
Set 接口是一种不包括重复元素的 Collection
LinkedHashSet 是有序的,非线程安全的
map 添加元素
1
2
3
4
5//添加 map 元素
map.put(key, value);
//添加一个同类型的 map
map.putAll(subMap);
Set 转换 String
1 | Set<String> result = XXXX; |
Iterable 数量
1 | Iterable<Integer> newIterable = () -> iter; |
多参数「同类型」
1 | public void del(String... key) { |
TreeMap、TreeSet
待完善
equals 与 hashCode
- 在重写 equals 方法的同时,必须重写 hashCode 方法,让equals方法和hashCode方法始终在逻辑上保持一致性
- 重写设计原则
- 如果 x.equals(y) 返回“true”,那么 x 和 y 的 hashCode() 必须相等
- 如果 x.equals(y) 返回“false”,那么 x 和 y 的 hashCode() 有可能相等,也有可能不等
Okhttp 封装工具类
OkHttpUtil 源文件
1
https://gitee.com/championwang/Java/blob/master/Tools/src/main/java/com/example/tools/common/OkHttpUtil.java
maven 引入其它依赖的 jar 包 pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<!-- okhttp 请求-->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.0.1</version>
</dependency>
<!--json 转换-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.9</version>
</dependency>
<!--org.apache.http.util.TextUtils-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
经验
系统找不到文件 C:\ProgramData\Oracle\Java\javapath\java.exe 的问题
解决:删除
C:\ProgramData\Oracle
目录,删除环境变量Path
中上述路径输出内容到
response
后抛出异常,不会影响输出e.printStackTrace() 输出到日志文件
1
2
3ByteArrayOutputStream baos = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(baos));
log.error(baos.toString());
BigDecimal、Long、Int 之间转换
int 转换成 BigDecimal
1 | int b = 5; |
Lont 转换成 BigDecimal
1 | long b = 5; |
BigDecimal 转换成 Long
1 | BigDecimal b = new BigDecimal(12); |
BigDecimal 转换成 int
1 | BigDecimal b = new BigDecimal(12); |
接口
- 成员变量均为:public static final 静态常量,类型不能为泛型「不确定类型」
- 方法均为:public abstract
Java finally 语句到底是在 return 之前还是之后执行?
https://www.cnblogs.com/lanxuezaipiao/p/3440471.html
关于后端URL参数中包含中文,页面接收参数问题
- Java 将参数编码后传输
String encode = URLUtil.encode(“参数 信息”); - 页面 js 获取参数并解码 decodeURIComponent