# JAD åç¼è¯ [jad](https://varaneckas.com/jad/)åç¼è¯å·¥å ·ï¼å·²ç»ä¸åæ´æ°ï¼ä¸åªæ¯æ JDK1.4ï¼ä½å¹¶ä¸å½±åå ¶å¼ºå¤§çåè½ã åºæ¬ç¨æ³ï¼`jad xxx.class`ï¼ä¼çæç´æ¥å¯è¯»ç `xxx.jad` æä»¶ã ## èªå¨æè£ ç®± 对äºåºæ¬ç±»ååå è£ ç±»åä¹é´ç转æ¢ï¼éè¿ xxxValue()å valueOf()ä¸¤ä¸ªæ¹æ³å®æèªå¨æè£ ç®±ï¼ä½¿ç¨ jad è¿è¡åç¼è¯å¯ä»¥çå°è¯¥è¿ç¨ï¼ ```java public class Demo { public static void main(String[] args) { int x = new Integer(10); // èªå¨æç®± Integer y = x; // èªå¨è£ ç®± } } ``` åç¼è¯åç»æï¼ ```java public class Demo { public Demo(){} public static void main(String args[]) { int i = (new Integer(10)).intValue(); // intValue()æç®± Integer integer = Integer.valueOf(i); // valueOf()è£ ç®± } } ``` ## foreach è¯æ³ç³ å¨éåè¿ä»£æ¶å¯ä»¥ foreach è¯æ³ç³ï¼å¯¹äºæ°ç»ç±»åç´æ¥è½¬æ¢æ for 循ç¯ï¼ ```java // åå§ä»£ç int[] arr = {1, 2, 3, 4, 5}; for(int item: arr) { System.out.println(item); } } // åç¼è¯å代ç int ai[] = { 1, 2, 3, 4, 5 }; int ai1[] = ai; int i = ai1.length; // è½¬æ¢æforå¾ªç¯ for(int j = 0; j < i; j++) { int k = ai1[j]; System.out.println(k); } ``` 对äºå®¹å¨ç±»çéåä¼ä½¿ç¨ iterator è¿è¡è¿ä»£ï¼ ```java import java.io.PrintStream; import java.util.*; public class Demo { public Demo() {} public static void main(String args[]) { ArrayList arraylist = new ArrayList(); arraylist.add(Integer.valueOf(1)); arraylist.add(Integer.valueOf(2)); arraylist.add(Integer.valueOf(3)); Integer integer; // 使ç¨çfor循ç¯+Iteratorï¼ç±»ä¼¼äºé¾è¡¨è¿ä»£ï¼ // for (ListNode cur = head; cur != null; System.out.println(cur.val)){ // cur = cur.next; // } for(Iterator iterator = arraylist.iterator(); iterator.hasNext(); System.out.println(integer)) integer = (Integer)iterator.next(); } } ``` ## Arrays.asList(T...) çæ Arrays.asList(T...)ç¨æ³çå°ä¼ä¼´é½åºè¯¥ç¥éï¼asList()æ¹æ³ä¼ å ¥çåæ°ä¸è½æ¯åºæ¬ç±»åçæ°ç»ï¼å¿ é¡»å è£ æå è£ ç±»åå使ç¨ï¼å¦å对åºçæçå表ç大尿°¸è¿æ¯ 1ï¼ ```java import java.util.*; public class Demo { public static void main(String[] args) { int[] arr1 = {1, 2, 3}; Integer[] arr2 = {1, 2, 3}; List lists1 = Arrays.asList(arr1); List lists2 = Arrays.asList(arr2); System.out.println(lists1.size()); // 1 System.out.println(lists2.size()); // 3 } } ``` ä»åç¼è¯ç»ææ¥è§£éï¼ä¸ºä»ä¹ä¼ å ¥åºæ¬ç±»åçæ°ç»åï¼è¿åç List 大尿¯ 1ï¼ ```java // åç¼è¯åæä»¶ import java.io.PrintStream; import java.util.Arrays; import java.util.List; public class Demo { public Demo() {} public static void main(String args[]) { int ai[] = { 1, 2, 3 }; // 使ç¨å è£ ç±»åï¼å ¨é¨å ç´ ç±intå è£ ä¸ºInteger Integer ainteger[] = { Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3) }; // 注æè¿é被åç¼è¯æäºç»´æ°ç»ï¼è䏿¯ä¸ä¸ª1è¡ä¸åçäºç»´æ°ç» // list.size()å½ç¶è¿å1 List list = Arrays.asList(new int[][] { ai }); List list1 = Arrays.asList(ainteger); System.out.println(list.size()); System.out.println(list1.size()); } } ``` ä»ä¸é¢ç»æå¯ä»¥çå°ï¼ä¼ å ¥åºæ¬ç±»åçæ°ç»åï¼ä¼è¢«è½¬æ¢æä¸ä¸ªäºç»´æ°ç»ï¼è䏿¯**new int\[1]\[arr.length]**è¿æ ·çæ°ç»ï¼è°ç¨ list.size()å½ç¶è¿å 1ã ## 注解 Java ä¸çç±»ãæ¥å£ãæä¸¾ã注解é½å¯ä»¥çåæ¯ç±»ç±»åãä½¿ç¨ jad æ¥çä¸ä¸@interface è¢«è½¬æ¢æä»ä¹ï¼ ```java import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface Foo{ String[] value(); boolean bar(); } ``` æ¥çåç¼è¯ä»£ç å¯ä»¥çåºï¼ - èªå®ä¹ç注解类 Foo è¢«è½¬æ¢ææ¥å£ Fooï¼å¹¶ä¸ç»§æ¿ Annotation æ¥å£ - 忥èªå®ä¹æ¥å£ä¸ç value()å bar()è¢«è½¬æ¢ææ½è±¡æ¹æ³ ```java import java.lang.annotation.Annotation; public interface Foo extends Annotation { public abstract String[] value(); public abstract boolean bar(); } ``` 注解é常ååå°é å使ç¨ï¼è䏿¢ç¶èªå®ä¹ç注解æç»è¢«è½¬æ¢ææ¥å£ï¼æ³¨è§£ä¸ç屿§è¢«è½¬æ¢ææ¥å£ä¸çæ½è±¡æ¹æ³ï¼é£ä¹éè¿åå°ä¹åæ¿å°æ¥å£å®ä¾ï¼å¨éè¿æ¥å£å®ä¾èªç¶è½å¤è°ç¨å¯¹åºçæ½è±¡æ¹æ³ï¼ ```java import java.util.Arrays; @Foo(value={"sherman", "decompiler"}, bar=true) public class Demo{ public static void main(String[] args) { Foo foo = Demo.class.getAnnotation(Foo.class); System.out.println(Arrays.toString(foo.value())); // [sherman, decompiler] System.out.println(foo.bar()); // true } } ``` ## æä¸¾ éè¿ jad åç¼è¯å¯ä»¥å¾å¥½å°çè§£æä¸¾ç±»ã ### 空æä¸¾ å å®ä¹ä¸ä¸ªç©ºçæä¸¾ç±»ï¼ ```java public enum DummyEnum { } ``` ä½¿ç¨ jad åç¼è¯æ¥çç»æï¼ - èªå®ä¹æä¸¾ç±»è¢«è½¬æ¢æ final ç±»ï¼å¹¶ä¸ç»§æ¿ Enum - æä¾äºä¸¤ä¸ªåæ°ï¼nameï¼odinalï¼çç§ææé å¨ï¼å¹¶ä¸è°ç¨äºç¶ç±»çæé å¨ã注æå³ä½¿æ²¡ææä¾ä»»ä½åæ°ï¼ä¹ä¼æè¯¥æé å¨ï¼å ¶ä¸ name å°±æ¯æä¸¾å®ä¾çåç§°ï¼odinal æ¯æä¸¾å®ä¾çç´¢å¼å· - åå§åäºä¸ä¸ª private static final èªå®ä¹ç±»åç空æ°ç» **\$VALUES** - æä¾äºä¸¤ä¸ª public static æ¹æ³ï¼ - values()æ¹æ³éè¿ clone()æ¹æ³è¿åå é¨\$VALUES çæµ æ·è´ãè¿ä¸ªæ¹æ³ç»åç§ææé å¨å¯ä»¥å®ç¾å®ç°å便¨¡å¼ï¼æ³ä¸æ³ values()æ¹æ³æ¯ä¸æ¯åå便¨¡å¼ä¸ getInstance()æ¹æ³åè½ç±»ä¼¼ - valueOf(String s)ï¼è°ç¨ç¶ç±» Enum ç valueOf æ¹æ³å¹¶å¼ºè½¬è¿å ```java public final class DummyEnum extends Enum { // åè½åå便¨¡å¼çgetInstance()æ¹æ³ç¸å public static DummyEnum[] values() { return (DummyEnum[])$VALUES.clone(); } // è°ç¨ç¶ç±»çvalueOfæ¹æ³ï¼å¹¶å¼ºè½¬è¿å public static DummyEnum valueOf(String s) { return (DummyEnum)Enum.valueOf(DummyEnum, s); } // é»è®¤æä¾ä¸ä¸ªç§æçä¸¤ä¸ªåæ°çæé å¨ï¼å¹¶è°ç¨ç¶ç±»Enumçæé å¨ private DummyEnum(String s, int i) { super(s, i); } // åå§åä¸ä¸ªprivate static finalçæ¬ç±»ç©ºæ°ç» private static final DummyEnum $VALUES[] = new DummyEnum[0]; } ``` ### å 嫿½è±¡æ¹æ³çæä¸¾ æä¸¾ç±»ä¸ä¹å¯ä»¥å 嫿½è±¡æ¹æ³ï¼ä½æ¯å¿ é¡»å®ä¹æä¸¾å®ä¾å¹¶ä¸ç«å³éåæ½è±¡æ¹æ³ï¼å°±åä¸é¢è¿æ ·ï¼ ```java public enum DummyEnum { DUMMY1 { public void dummyMethod() { System.out.println("[1]: implements abstract method in enum class"); } }, DUMMY2 { public void dummyMethod() { System.out.println("[2]: implements abstract method in enum class"); } }; abstract void dummyMethod(); } ``` 忥åç¼è¯ççæåªäºååï¼ - 忥 final class åæäº abstract classï¼è¿å¾å¥½çè§£ï¼ææ½è±¡æ¹æ³çç±»èªç¶æ¯æ½è±¡ç±» - å¤äºä¸¤ä¸ª public static final çæå DUMMY1ãDUMMY2ï¼è¿ä¸¤ä¸ªå®ä¾çåå§åè¿ç¨è¢«æ¾å°äº static 代ç åä¸ï¼å¹¶ä¸å®ä¾è¿ç¨ä¸ç´æ¥éåäºæ½è±¡æ¹æ³ï¼ç±»ä¼¼äºå¿åå é¨ç±»çå½¢å¼ã - æ°ç» **\$VALUES[]** åå§åæ¶æ¾å ¥æä¸¾å®ä¾ è¿æå ¶å®ååä¹ï¼ å¨åç¼è¯åç DummyEnum ç±»ä¸ï¼æ¯å卿½è±¡æ¹æ³çï¼èæä¸¾å®ä¾å¨éæä»£ç åä¸åå§åè¿ç¨ä¸éåäºæ½è±¡æ¹æ³ãå¨ Java ä¸ï¼æ½è±¡æ¹æ³åæ½è±¡æ¹æ³éååæ¶æ¾å¨ä¸ä¸ªç±»ä¸ï¼åªè½éè¿å é¨ç±»å½¢å¼å®æãå æ¤ä¸é¢ç¬¬äºç¹åºè¯¥è¯´æå°±æ¯ä»¥å é¨ç±»å½¢å¼åå§åã å¯ä»¥çä¸ä¸ DummyEnum.class åæ¾çä½ç½®ï¼åºè¯¥å¤äºä¸¤ä¸ªæä»¶ï¼ - DummyEnum\$1.class - DummyEnum\$2.class Java ä¸.class æä»¶åºç° $ 符å·è¡¨ç¤ºæå é¨ç±»åå¨ï¼å°±åOutClass$InnerClassï¼è¿ä¸¤ä¸ªæä»¶åºç°ä¹åºè¯äºä¸é¢çå¿åå é¨ç±»åå§åç说æ³ã ```java import java.io.PrintStream; public abstract class DummyEnum extends Enum { public static DummyEnum[] values() { return (DummyEnum[])$VALUES.clone(); } public static DummyEnum valueOf(String s) { return (DummyEnum)Enum.valueOf(DummyEnum, s); } private DummyEnum(String s, int i) { super(s, i); } // æ½è±¡æ¹æ³ abstract void dummyMethod(); // 两个pubic static finalå®ä¾ public static final DummyEnum DUMMY1; public static final DummyEnum DUMMY2; private static final DummyEnum $VALUES[]; // static代ç åè¿è¡åå§å static { DUMMY1 = new DummyEnum("DUMMY1", 0) { public void dummyMethod() { System.out.println("[1]: implements abstract method in enum class"); } } ; DUMMY2 = new DummyEnum("DUMMY2", 1) { public void dummyMethod() { System.out.println("[2]: implements abstract method in enum class"); } } ; // 对æ¬ç±»æ°ç»è¿è¡åå§å $VALUES = (new DummyEnum[] { DUMMY1, DUMMY2 }); } } ``` ### æ£å¸¸çæä¸¾ç±» å®é å¼åä¸ï¼æä¸¾ç±»é常ç形弿¯æä¸¤ä¸ªåæ°ï¼int codeï¼Sring msgï¼çæé å¨ï¼å¯ä»¥ä½ä¸ºç¶æç è¿è¡è¿åãEnum ç±»å®é ä¸ä¹æ¯æä¾äºå å«ä¸¤ä¸ªåæ°ä¸æ¯ protected çæé å¨ï¼è¿é为äºé¿å æ§ä¹ï¼å°æä¸¾ç±»çæé å¨è®¾ç½®ä¸ºä¸ä¸ªï¼ä½¿ç¨ jad åç¼è¯ï¼ æå¤§çå忝ï¼ç°å¨ç private æé å¨ä» 2 ä¸ªåæ°åæ 5 个ï¼èä¸å¨å é¨ä»ç¶å°åä¸¤ä¸ªåæ°éè¿ super ä¼ éç»ç¶ç±»ï¼å©ä½çä¸ä¸ªåæ°ææ¯çæ£èªå·±æä¾çåæ°ãå¯ä»¥æ³è±¡ï¼å¦æèªå®ä¹çæä¸¾ç±»åªæä¾äºä¸ä¸ªåæ°ï¼æç»çæåºå±ä»£ç ä¸ private æé å¨åºè¯¥æä¸ä¸ªåæ°ï¼å两个ä¾ç¶éè¿ super ä¼ éç»ç¶ç±»ã ```java public final class CustomEnum extends Enum { public static CustomEnum[] values() { return (CustomEnum[])$VALUES.clone(); } public static CustomEnum valueOf(String s) { return (CustomEnum)Enum.valueOf(CustomEnum, s); } private CustomEnum(String s, int i, int j, String s1, Object obj) { super(s, i); code = j; msg = s1; data = obj; } public static final CustomEnum FIRST; public static final CustomEnum SECOND; public static final CustomEnum THIRD; private int code; private String msg; private Object data; private static final CustomEnum $VALUES[]; static { FIRST = new CustomEnum("FIRST", 0, 10010, "first", Long.valueOf(100L)); SECOND = new CustomEnum("SECOND", 1, 10020, "second", "Foo"); THIRD = new CustomEnum("THIRD", 2, 10030, "third", new Object()); $VALUES = (new CustomEnum[] { FIRST, SECOND, THIRD }); } } ```