Java ????? ??? ??? ? Java ???? ??? ? ?? ??? ?????. ASM ?????? ???? ?? ?? ?? ??? ??? ??? ??, ????, ??? ? ????. ?? Java ??????? ???? ???? ? ?? ???? ??? ?????.
????? ??? ???? ???????. ????? Java ?????? ???? Java ??? ?? ?? ?????. JVM(Java Virtual Machine)? ??? ???? ?????. ? ?????? ???? ?? ??? ???? ??? ????? ?? ??? ??? ? ????.
ASM ?????? ????? ??? ?? ?? ??? ?????. ??? ??? Java ????? ?? ?????. ????? ????? ASM ???? ???? ???. Maven? ???? ?? ???? ??? ??? ????.
<dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>9.2</version> </dependency>
?? ASM? ??????? ? ?? ?? ??? ???????. ????? ??? ???? ?? ?? ? ??? ???? ??? ???? ????. ?? ???? ??? ??? ???? ??? ??? ???. ???? ???? ClassVisitor? ???? ?? ??? ? ????.
public class LoggingClassVisitor extends ClassVisitor { public LoggingClassVisitor(ClassVisitor cv) { super(ASM9, cv); } @Override public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions); if (name.equals("targetMethod")) { return new LoggingMethodVisitor(mv); } return mv; } } class LoggingMethodVisitor extends MethodVisitor { public LoggingMethodVisitor(MethodVisitor mv) { super(ASM9, mv); } @Override public void visitCode() { mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn("Method called: targetMethod"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); super.visitCode(); } }
? ???? targetMethod? ?? ??? println ?? ?????. ? ???? ???? ???? ???? targetMethod? ??? ??? ?????.
????? ??? ? ?? ??? ?? ????? ?? ???????. ASM? ???? ??? ??? ??? ??? ???? ?? ??? ??? ? ????. ?? ???? ??? ??? ????.
public class TimingClassVisitor extends ClassVisitor { public TimingClassVisitor(ClassVisitor cv) { super(ASM9, cv); } @Override public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions); return new TimingMethodVisitor(mv, name); } } class TimingMethodVisitor extends MethodVisitor { private String methodName; public TimingMethodVisitor(MethodVisitor mv, String methodName) { super(ASM9, mv); this.methodName = methodName; } @Override public void visitCode() { mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J", false); mv.visitVarInsn(LSTORE, 1); super.visitCode(); } @Override public void visitInsn(int opcode) { if ((opcode >= IRETURN && opcode <= RETURN) || opcode == ATHROW) { mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J", false); mv.visitVarInsn(LLOAD, 1); mv.visitInsn(LSUB); mv.visitVarInsn(LSTORE, 3); mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitTypeInsn(NEW, "java/lang/StringBuilder"); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V", false); mv.visitLdcInsn("Method " + methodName + " took "); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); mv.visitVarInsn(LLOAD, 3); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(J)Ljava/lang/StringBuilder;", false); mv.visitLdcInsn(" ns"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false); mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); } super.visitInsn(opcode); } }
? ???? ? ???? ?? ??? ???? ???? ??? ? ?? ???? ??? ?????.
?? ???? ????? ??? ??? ?? ????. ?? ??, ?? ???? ??? ??? ???? ????? ???? ??? ??? ? ????. ??? ??? ????.
public class SecurityCheckClassVisitor extends ClassVisitor { public SecurityCheckClassVisitor(ClassVisitor cv) { super(ASM9, cv); } @Override public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions); if (name.equals("sensitiveMethod")) { return new SecurityCheckMethodVisitor(mv); } return mv; } } class SecurityCheckMethodVisitor extends MethodVisitor { public SecurityCheckMethodVisitor(MethodVisitor mv) { super(ASM9, mv); } @Override public void visitCode() { mv.visitMethodInsn(INVOKESTATIC, "com/example/SecurityManager", "isAuthorized", "()Z", false); Label authorizedLabel = new Label(); mv.visitJumpInsn(IFNE, authorizedLabel); mv.visitTypeInsn(NEW, "java/lang/SecurityException"); mv.visitInsn(DUP); mv.visitLdcInsn("Unauthorized access"); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/SecurityException", "<init>", "(Ljava/lang/String;)V", false); mv.visitInsn(ATHROW); mv.visitLabel(authorizedLabel); super.visitCode(); } }
? ????sensitiveMethod? ?? ??? ?? ??? ?????. ??? ???? SecurityException? ?????.
????? ??? ?? ??? ?????? ? ??? ???? ?? ??????. ASM? ???? ??? ???? ?? ??? ???? ???? ? ????. ?? ??, ??? ?? ?? ???? ??? ? ????.
public class ConstantFoldingClassVisitor extends ClassVisitor { public ConstantFoldingClassVisitor(ClassVisitor cv) { super(ASM9, cv); } @Override public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions); return new ConstantFoldingMethodVisitor(mv); } } class ConstantFoldingMethodVisitor extends MethodVisitor { public ConstantFoldingMethodVisitor(MethodVisitor mv) { super(ASM9, mv); } @Override public void visitInsn(int opcode) { if (opcode == IADD || opcode == ISUB || opcode == IMUL || opcode == IDIV) { if (mv instanceof InsnList) { InsnList insns = (InsnList) mv; AbstractInsnNode prev1 = insns.getLast(); AbstractInsnNode prev2 = prev1.getPrevious(); if (prev1 instanceof LdcInsnNode && prev2 instanceof LdcInsnNode) { LdcInsnNode ldc1 = (LdcInsnNode) prev1; LdcInsnNode ldc2 = (LdcInsnNode) prev2; if (ldc1.cst instanceof Integer && ldc2.cst instanceof Integer) { int val1 = (Integer) ldc1.cst; int val2 = (Integer) ldc2.cst; int result; switch (opcode) { case IADD: result = val2 + val1; break; case ISUB: result = val2 - val1; break; case IMUL: result = val2 * val1; break; case IDIV: result = val2 / val1; break; default: return; } insns.remove(prev1); insns.remove(prev2); mv.visitLdcInsn(result); return; } } } } super.visitInsn(opcode); } }
? ???? ???? ?? ??? ?? ? ??? ????. ?? ??, ??? ??? 2 3? 5? ????.
????? ??? ???? AOP(Aspect ?? ?????) ??? ??? ?? ????. ASM? ???? ??, ???? ?? ?? ??? ?? ?? ??? ?? ??? ??? ? ????. ??? ?? ??? ???? ??? ????.
<dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>9.2</version> </dependency>
? ???? "transaction"?? ???? ???? ???? ?? ??? ?????. ??? ?? ? ????? ???? ?? ?????.
????? ??? ? ?? ???? ??? ?? ???? ???? ????. ASM? ???? ???? ??? ???? ??? ? ???, ?? ?? ???? ?? ??? ??? ?? ??? ??? ? ????. ??? ??? ????.
public class LoggingClassVisitor extends ClassVisitor { public LoggingClassVisitor(ClassVisitor cv) { super(ASM9, cv); } @Override public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions); if (name.equals("targetMethod")) { return new LoggingMethodVisitor(mv); } return mv; } } class LoggingMethodVisitor extends MethodVisitor { public LoggingMethodVisitor(MethodVisitor mv) { super(ASM9, mv); } @Override public void visitCode() { mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn("Method called: targetMethod"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); super.visitCode(); } }
? ???? ??? ?????? ???? ?? ??? ??? InvocationHandler? ???? ??? ???? ?????.
????? ??? ??? ? ?? ???? ??? ? ????. ASM? ???? ????? ??? ????? ???? ? ??? ?? ??? ??? ? ????. ?? ?? ??? ?? ??? ???? ??? ??? ? ????.
public class TimingClassVisitor extends ClassVisitor { public TimingClassVisitor(ClassVisitor cv) { super(ASM9, cv); } @Override public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions); return new TimingMethodVisitor(mv, name); } } class TimingMethodVisitor extends MethodVisitor { private String methodName; public TimingMethodVisitor(MethodVisitor mv, String methodName) { super(ASM9, mv); this.methodName = methodName; } @Override public void visitCode() { mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J", false); mv.visitVarInsn(LSTORE, 1); super.visitCode(); } @Override public void visitInsn(int opcode) { if ((opcode >= IRETURN && opcode <= RETURN) || opcode == ATHROW) { mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J", false); mv.visitVarInsn(LLOAD, 1); mv.visitInsn(LSUB); mv.visitVarInsn(LSTORE, 3); mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitTypeInsn(NEW, "java/lang/StringBuilder"); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V", false); mv.visitLdcInsn("Method " + methodName + " took "); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); mv.visitVarInsn(LLOAD, 3); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(J)Ljava/lang/StringBuilder;", false); mv.visitLdcInsn(" ns"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false); mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); } super.visitInsn(opcode); } }
? ???? ? ???? ?? ? ?? ??? ??? ???? ????? ?? ??? ??? ? ????.
????? ASM? ???? ??? ?? ??? ??? ???? ??? ???????. ?? ?? ????? ???? ??? ??? ?? ??? ??? ? ????.
public class SecurityCheckClassVisitor extends ClassVisitor { public SecurityCheckClassVisitor(ClassVisitor cv) { super(ASM9, cv); } @Override public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions); if (name.equals("sensitiveMethod")) { return new SecurityCheckMethodVisitor(mv); } return mv; } } class SecurityCheckMethodVisitor extends MethodVisitor { public SecurityCheckMethodVisitor(MethodVisitor mv) { super(ASM9, mv); } @Override public void visitCode() { mv.visitMethodInsn(INVOKESTATIC, "com/example/SecurityManager", "isAuthorized", "()Z", false); Label authorizedLabel = new Label(); mv.visitJumpInsn(IFNE, authorizedLabel); mv.visitTypeInsn(NEW, "java/lang/SecurityException"); mv.visitInsn(DUP); mv.visitLdcInsn("Unauthorized access"); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/SecurityException", "<init>", "(Ljava/lang/String;)V", false); mv.visitInsn(ATHROW); mv.visitLabel(authorizedLabel); super.visitCode(); } }
? ??? ??? ???? ? ???? ??? ClassVisitor? ????? ???? ???? ?? ??? ? ????.
????? ASM? ??? Java ????? ??? Java ??????? ???? ???? ? ?? ???? ??? ???? ??? ?????. ?? ? ?? ???? ???? ?? ?? ????? ?? ?? ? ?? ??? ??? ????? ??????? ???? ?????. Java ?????? JVM? ?? ?? ??? ????? ??? ??? ??? ???? ??? Java ??????? ???? ??? ?? ??? ? ????.
??? ???
?? ???? ? ??? ???.
???? ??? | ????? | ??? ??? | ????? ???? | ???? | ??? ??? | JS ??
??? ??? ????
?? ??? ???? | Epochs & Echoes World | ??????? | ???? ???? ?? | ??? ??? ?? | ?? ????
? ??? Java ????? ?????: ASM ?????? ? ?? ??? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

??? ??











?? ?? ?? ??? ??? ?? ??? ??, ? ? ?? ? ??? ?????. 1. ??? ?? ???? ?? ???? ???-????, ? ??? ??? ??? ? ????, Hashmap? ???-??? ?? ??? ??? ???? ????. 2. NULL ? ?? ???? HashMap? ??? NULL ?? ?? ? ?? ???? ?? HashTable? NULL ?? ?? ???? ??? NullPointerException? ?????. 3. ????? ??? ????? ?? ??? ?? ?? ? ????? HashTable? ? ??? ?? ?? ??? ????. ?? ConcurrenTashMap? ???? ?? ????.

Java? ?? ??? ??? ?? ??? ??? ?? ??? ??? ?? ??? ?? ?? ??? ???? ??? ?? ???? ?????. 1. ??? ???? ??? ?? ?? ? ???? ?? ??? ???? ?? ?? ??? ? ????. 2. ???? ?? ??? ???? ??? ?? ???? ?? ?? ??? ???????. 3. ?? ???? ?? ?? ?? ? ???? ???? ?? NULL ?? ??? ? ????. 4. ?? ???? ??? ?? ?? ? ??? ?????? ?? ??? ??? ?? ?? ??? ????? ??? ??? ??? ??????? ?? ???? ??????.

staticmethodsininterfaceswereIntRectionSelffacesswithinteffaceswithinteffaceswithintintinjava8toallowutilityFunctionswithinterfaceitswithinteffaceswithinterfaceffaces

JIT ????? ??? ???, ??? ?? ? ???, ?? ?? ? ???? ? ? ?? ?? ??? ? ?? ??? ?? ??? ??????. 1. ??? ???? ?? ?? ??? ??? ?? ?? ???? ??? ?? ?????. 2. ??? ?? ? ??? ?? ?? ? ??? ???? ?? ?? ???; 3. ?? ??? ??? ?? ??? ???? ???? ???? ? ?? ?? ??? ?????. 4. ?? ??? ?? ??? ??? ???? ???? ?? ? ??? ???? ?? ??? ?????.

???? ??? ??? Java?? ??? ?? ???? ??? ?? ? ? ??? ??? ???? ? ?????. ?? ???? ??? ??, ??? ?? ??? ?? ?? ??? ??? ????? ???? ????? ?????. ?? ??? ??? ??, ????? ? ??? ????, ?? ??? ??? ?????? ? ?? ? ?? ?????.

injava, thefinalkeywordpreventsavariable'svalue'svalueffrombeingchangedafterassignment, butitsbehaviordiffersforprimitivesandobjectreences.forprimitivevariables, asinfinalintmax_speed = 100; wherereassoncesanerror.forobjectref

??? ??? ?? ?? ??? ????? ? ???? ????? ???? ?? ???? ?? ???? ?????. ?? ??? ??? ????. ?? ?? ?? ??? ???? ???? ?? ?? ??? ??? ?? ?? ??? ??? ?????. ?? ??? ??? ????. ?? ??? ?? ??? ?? ?? ??? ?? ?? ??? ???? NewClass ()? ??? ?? ???? ????. ?? ??? ?? ??? ???? ?? ??? ?? ? ? ??? ?? ?? ??? ????? ????? ?????. ?? ??, ?? ?????? ?????, ??? ? ?? ????? ??? ?? ?????. ???? ?? ?? ??? ???? ?? ???? ?? ? ??? ???? ?? ??? ?? ?????? ?????. ???? ???? ??? ??, ?? ?? ? ?? ??? ????, ?? ?? ???? ?????.

??? ? ?? ??? ???? : ????? ?? ?. 1. int? ???? ???? ?? ?? ?? ? ??? ???? ?????. 2. ?? ? ???? (int) myDouble ??? ?? ?? ??? ?????. ?? ??? ??? ?? ??? ?? ??, ?? ?? ?? ???? ?? ??? ?? ???? ?? ?????. ???? ? ??? ??? ????. ?? ??? ??? ??? ??? ??? ?? ??? ??? ? ??? ?? ???? ??? ??? ??? ??? ? ??? ?? ??? ?? ??? ?? ?? ? ? ????. ?? ?? ??? ?? ??? ??? ??? ??? ? ??????.
