邪修 Java,10 段“千万别上生产”的黑魔法代码
——由编程狮(w3cschool.cn)出品,仅供猎奇
⚠️ 每条都踩红线:可读性 0、维护成本 ∞,面试可炫技,项目里敢用就等死。
1️⃣ 一行 Hello World(无分号、无 main)
class H{static{System.out.println("邪修Java");System.exit(0);}}
- 运行:
javac H.java && java H
- 原理:
<clinit>
静态块当入口,直接System.exit
防止 JVM 继续初始化。
2️⃣ 用反射把 String
变可变
String s = "abc";
Field f = String.class.getDeclaredField("value");
f.setAccessible(true);
((char[]) f.get(s))[0] = 'A';
System.out.println(s); // 输出 Abc
破坏
final char[]
,常量池一起陪葬。
3️⃣ 宏替换式“泛型擦除”
import java.lang.reflect.*;
List<String> list = new ArrayList<>();
list.add("123");
Method m = List.class.getMethod("add", Object.class);
m.invoke(list, 42); // 擦除后成功塞进 Integer
System.out.println(list); // [123, 42]
编译期类型检查形同虚设。
4️⃣ 双重括号初始化“匿名派生”
List<Integer> li = new ArrayList<>() {{
add(1); add(2); add(3);
}};
每用一次就偷偷创建匿名内部类,爆炸式内存泄漏。
5️⃣ 枚举单例 + 反射爆破
enum Singleton { INSTANCE; }
public static void main(String[] args) throws Exception {
Constructor<Singleton> c = Singleton.class.getDeclaredConstructor(String.class,int.class);
c.setAccessible(true);
Singleton evil = c.newInstance("EVIL", 1); // 破坏单例
}
枚举号称防反射?邪修眼里不存在的。
6️⃣ 字节码注入(Javassist 一行流)
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("java.util.ArrayList");
cc.addMethod(CtNewMethod.make("public int size(){return 999;}", cc));
cc.toClass();
System.out.println(new ArrayList<>().size()); // 999
运行期改 JDK 源码,JVM 当场裂开。
7️⃣ 注解 + 反射 = 魔法路由
@Retention(RUNTIME) @interface Route { String value(); }
@Route("/hello") class HelloController { }
public static void invoke(String path) throws Exception {
for (Class<?> c : Class.forName("").getClasses()) {
if (c.isAnnotationPresent(Route.class) &&
c.getAnnotation(Route.class).value().equals(path)) {
c.getDeclaredConstructor().newInstance(); // 邪修式路由
}
}
}
0 行配置,全靠字符串比对,性能灾难。
8️⃣ 动态代理“偷天换日”
Map<String,Integer> map = (Map) Proxy.newProxyInstance(
Map.class.getClassLoader(),
new Class[]{Map.class},
(proxy, method, args) -> "size".equals(method.getName()) ? 404 : null
);
System.out.println(map.size()); // 404
Map 接口秒变 404 页面。
9️⃣ 异常吞掉还能继续跑
try {
int x = 1 / 0;
} catch (RuntimeException e) {
throw new RuntimeException(new RuntimeException(e)); // 套娃异常
}
日志里 10 层 cause,定位直接崩溃。
🔟 终极一行:Lambda 内联异常
public static void main(String[] args) {
((Runnable)(() -> { throw new RuntimeException("boom"); })).run();
}
没有方法名,栈跟踪里只有两帧,调试器当场自闭。
邪修口诀
“Java 正道是
public static void main
,
邪修眼里万物皆可static{}
、反射、字节码。”