对于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