AES (Advanced Encryption Standard) 是由 NIST (美国国家标准与技术研究院) 发布于 FIPS PUB 197 用来替代 DES (Data Encryption Standard) 的高级加密标准。而 Rijndael 算法是被 NIST 认为符合 AES 且被采用的一种对称加密算法,所以一般对 AES 和 Rijndael 算法这两个概念不予细究。

由于本文主要介绍 AES 算法的实现,对其原理不作详细介绍,所以和算法实现有关的数学知识我就只粗略提一下。文中出现的伪代码和实际实现有些出入,仅供读者理解算法各部分的实现思路。至于算法的各种实现细节,可以参考我用 python 写的源代码



定义

顾名思义,创建于外部类之内的类。可以定义于外部类的方法内。下面用I类表内部类,O类表外部类。(I:inner,O:outer)

用途

  1. private修饰的内部类用来隐藏实现的细节
  2. 匿名类使方法实现更简洁、优美(例:工厂方法,适配器方法)
  3. 可用于有效的实现“多重继承”

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
由这个实例可看出同一个类中初始化的先后顺序是:
1.静态变量&&静态代码块(靠前的先初始化)
2.非静态变量&&非静态代码块(靠前的先初始化)
*/
public class InitializeDemo {
    {
        System.out.println("block 1");
    }
    static{
        System.out.println("static block 1");
    }
    String a = f();
    {
        b = "string b2";
        System.out.println("block 2");
    }
    static String b = "string b1";
    static{
        System.out.println(b);
        System.out.println("static block 2");
    }
    String f(){
        System.out.println("f()");
        return b;
    }
    public static void main(String[] args) {
        /*
        注释掉1、2行可以发现:
        静态代码块、静态变量初始化在该类被使用之前执行
        非静态代码块、非静态变量在创建对象时被执行
        */
        InitializeDemo ini = new InitializeDemo();   //1
        System.out.println(ini.a);                   //2
        System.out.println(b);
    }
}