对于Java语言,存在一些途径可绕过语法限制,有些途径是官方的,有些途径是非官方的,下表罗列一些途径。
| 途径名称 | 官方/非官方 | 绕过的语法限制 |
|---|---|---|
| 反射 | 官方 | “不可访问的方法和域可访问化”,“能够对final域进行二次赋值”等 |
| JDK序列化 | 官方 | 能够对final域进行二次赋值(本质是通过反射实现的) |
| 官方原生方法 | 官方 | 理论上可以对Java进程所占有的内存做任何操作,比如“通过System.setIn(),System.setOut()和System.setErr()方法修改System类的in,out和err这3个public final static变量” |
| 非官方原生方法 | 非官方 | 理论上可以对Java进程所占有的内存做任何操作 |
参考文献
[1]https://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.5.1