dev_base

Java 开发

p3c 开发手册&idea plugin

Java 语法

方法重写

以下示例不能称为 方法重写,虽然满足里氏替换,但是不符合子类的思想。

1
2
3
4
5
6
7
8
9
10
11
12
class SuperClass {
protected List<Integer> func(Animal animal) throws Throwable {
return new ArrayList<>();
}
}

class SubClass extends SuperClass {
@Override
public ArrayList<Integer> func(Object animal) throws Exception {
return new ArrayList<>();
}
}

泛型

TlensuProjectGenerationController extends DefaultProjectGenerationController
DefaultProjectGenerationController extends ProjectGenerationController
这样写在 idea 中不报错,但编译的时候会报错。
泛型方法定义的关键:返回值前的 标识

lambda 表达式

lambda 使用体验

  • 定义

    一个不用被绑定到一个标识符上,并且可能被调用的函数定义。(一段带有输入参数的可执行语句块)

  • 注意

    外部变量必须用 final修饰;this指向 声明它的外部对象。

  • method reference

    objectName::instanceMethod;ClassName::staticMethod. 把lambda的参数直接当成 instanceMethod|staticMethod 的参数来调用;
    ClassName::instanceMethod. 把lambda表达式的第一个参数当成 instanceMethod 的目标对象,其他剩余参数当成该方法的参数。

  • construct reference

    ClassName::new,把lambda表达式的参数直接当成 ClassName构造器的参数来调用。

常用工具类

java.util.*

  • Arrays,Collections,Comparators,
  • Objects
  • Optional
  • Spliterators

function

  • Consumer: void accept(T t);
  • Function: R apply(T t);
  • Predicate: boolean test(T t);
  • Supplier: T get();

stream

Stream 使用体验

  • 定义

    Stream是元素的集合,可以支持顺序和并行的对原Stream进行汇聚的操作;

  • 使用Stream的基本步骤
    1. 创建Stream;
    2. 转换Stream,每次转换原有Stream对象不改变,返回一个新的Stream对象(可以有多次转换);
    3. 对Stream进行聚合(Reduce)操作,获取想要的结果;
  • 创建Stream
    1. 通过Stream接口的静态工厂方法:of方法;generator方法,iterate方法(生成一个无限长度的Stream,配合limit方法来用);
    2. 通过Collection接口的默认方法;
  • 转换Stream:filter, map, peek(提供一个消费函数), limit(对Stream进行截断操作)
  • Reduce Stream
    1. 可变汇聚:把输入的元素们累积到一个可变的容器中,比如Collection。.collect(Collectors.toList())
    2. 其他汇聚:通过把前一次的汇聚结果当成下一次的入参,反复如此。比如reduce,count,anyMatch,findFirst;

spring

  • ClassUtils,ReflectionUtils,TypeUtils
  • CollectionUtils
  • NumberUtils,ObjectUtils,StringUtils
  • FileCopyUtils,FileSystemUtils,ResourceUtils,SocketUtils,StreamUtils
  • SystemPropertyUtils

字符串、日期时间处理

数学、Money处理

Java 运算符

  • 算术运算符:除法 /, 取余 %
  • 关系运算符:==, >=
  • 位运算符:A = 0011 1100(60), B = 0000 1101(13)
    • (A&B)得到12,即 0000 1100
    • (A | B)得到61,即 0011 1101
    • (A ^ B)得到49,即 0011 0001,异或
    • (~A)得到-61,即1100 0011,取反
    • 按位左移,符号位不动,低位补0操作

    • 按位右移,符号位不动,高位补0操作

    • 按位无符号右移,符号位动,高位补0操作

  • 逻辑运算符:&&, !
  • 赋值运算符:>>= 右移位赋值运算符, |= 按位或赋值操作符
  • 条件运算符:(?:)

其它

  • “ & < ("&<) 等等属于 xml 的特殊字符,需要转义 org.apache.commons.lang3.StringEscapeUtils.unescapeXml(“”);
  • 浮点数在计算机中的表示规则(国际标准IEEE 754),分成 S,E,M 三部分,V = (-1)^S * M × 2^E;
  • sso:// 点单登录协议,需要安装单点登录器。
  • 如何识别文本文件的编码方式?
    • 文件的最前面分别加入一个表示编码方式的字符(FFFE:Unicode、FEFF:Unicode big endian、EFBBBF:UTF-8、默认:ANSI)。
    • 编辑工具打开时右下角有编码格式显示。
  • 重复对给定的种子值(seed)调用用户指定函数。

密码学

  • 不可逆加密算法
    不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的。

  • 不可逆加密:SHA(Secure Hash Algorithm)系列,MD5;

  • 对称加密算法:AES、3DES;

  • 非对称加密算法:RSA;

字符编码