### åå°æºå¶ä»ç» JAVA åå°æºå¶æ¯å¨è¿è¡ç¶æä¸ï¼å¯¹äºä»»æä¸ä¸ªç±»ï¼é½è½å¤ç¥éè¿ä¸ªç±»çææå±æ§åæ¹æ³ï¼å¯¹äºä»»æä¸ä¸ªå¯¹è±¡ï¼é½è½å¤è°ç¨å®çä»»æä¸ä¸ªæ¹æ³å屿§ï¼è¿ç§å¨æè·åçä¿¡æ¯ä»¥å卿è°ç¨å¯¹è±¡çæ¹æ³çåè½ç§°ä¸º java è¯è¨çåå°æºå¶ã ### è·å Class 对象çä¸¤ç§æ¹å¼ 妿æä»¬å¨æè·åå°è¿äºä¿¡æ¯ï¼æä»¬éè¦ä¾é Class 对象ãClass 类对象å°ä¸ä¸ªç±»çæ¹æ³ãåéçä¿¡æ¯åè¯è¿è¡çç¨åºãJava æä¾äºä¸¤ç§æ¹å¼è·å Class 对象: 1.ç¥éå ·ä½ç±»çæ åµä¸å¯ä»¥ä½¿ç¨ï¼ ```java Class alunbarClass = TargetObject.class; ``` 使¯æä»¬ä¸è¬æ¯ä¸ç¥éå ·ä½ç±»çï¼åºæ¬é½æ¯éè¿éåå ä¸é¢çç±»æ¥è·å Class 对象 2.éè¿ `Class.forName()`ä¼ å ¥ç±»çè·¯å¾è·åï¼ ```java Class alunbarClass1 = Class.forName("cn.javaguide.TargetObject"); ``` ### 代ç å®ä¾ **ç®åç¨ä»£ç æ¼ç¤ºä¸ä¸åå°çä¸äºæä½!** 1.å建ä¸ä¸ªæä»¬è¦ä½¿ç¨åå°æä½çç±» `TargetObject`ï¼ ```java package cn.javaguide; public class TargetObject { private String value; public TargetObject() { value = "JavaGuide"; } public void publicMethod(String s) { System.out.println("I love " + s); } private void privateMethod() { System.out.println("value is " + value); } } ``` 2.使ç¨åå°æä½è¿ä¸ªç±»çæ¹æ³ä»¥ååæ° ```java package cn.javaguide; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Main { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchFieldException { /** * è·åTargetObjectç±»çClass对象并ä¸å建TargetObjectç±»å®ä¾ */ Class> tagetClass = Class.forName("cn.javaguide.TargetObject"); TargetObject targetObject = (TargetObject) tagetClass.newInstance(); /** * è·åææç±»ä¸ææå®ä¹çæ¹æ³ */ Method[] methods = tagetClass.getDeclaredMethods(); for (Method method : methods) { System.out.println(method.getName()); } /** * è·åæå®æ¹æ³å¹¶è°ç¨ */ Method publicMethod = tagetClass.getDeclaredMethod("publicMethod", String.class); publicMethod.invoke(targetObject, "JavaGuide"); /** * è·åæå®åæ°å¹¶å¯¹åæ°è¿è¡ä¿®æ¹ */ Field field = tagetClass.getDeclaredField("value"); //为äºå¯¹ç±»ä¸çåæ°è¿è¡ä¿®æ¹æä»¬åæ¶å®å ¨æ£æ¥ field.setAccessible(true); field.set(targetObject, "JavaGuide"); /** * è°ç¨ private æ¹æ³ */ Method privateMethod = tagetClass.getDeclaredMethod("privateMethod"); //为äºè°ç¨privateæ¹æ³æä»¬åæ¶å®å ¨æ£æ¥ privateMethod.setAccessible(true); privateMethod.invoke(targetObject); } } ``` è¾åºå å®¹ï¼ ``` publicMethod privateMethod I love JavaGuide value is JavaGuide ``` ### éæç¼è¯å卿ç¼è¯ - **éæç¼è¯ï¼**å¨ç¼è¯æ¶ç¡®å®ç±»åï¼ç»å®å¯¹è±¡ - **卿ç¼è¯ï¼**è¿è¡æ¶ç¡®å®ç±»åï¼ç»å®å¯¹è±¡ ### åå°æºå¶ä¼ç¼ºç¹ - **ä¼ç¹ï¼** è¿è¡æç±»åç夿ï¼å¨æå è½½ç±»ï¼æé«ä»£ç çµæ´»åº¦ã - **缺ç¹ï¼** 1,æ§è½ç¶é¢ï¼åå°ç¸å½äºä¸ç³»åè§£éæä½ï¼éç¥ JVM è¦åçäºæ ï¼æ§è½æ¯ç´æ¥ç java 代ç è¦æ ¢å¾å¤ã2,å®å ¨é®é¢ï¼è®©æä»¬å¯ä»¥å¨ææä½æ¹åç±»ç屿§åæ¶ä¹å¢å äºç±»çå®å ¨éæ£ã ### åå°çåºç¨åºæ¯ **åå°æ¯æ¡æ¶è®¾è®¡ççµéã** 卿们平æ¶ç项ç®å¼åè¿ç¨ä¸ï¼åºæ¬ä¸å¾å°ä¼ç´æ¥ä½¿ç¨å°åå°æºå¶ï¼ä½è¿ä¸è½è¯´æåå°æºå¶æ²¡æç¨ï¼å®é 䏿å¾å¤è®¾è®¡ãå¼åé½ä¸åå°æºå¶æå ³ï¼ä¾å¦æ¨¡ååçå¼åï¼éè¿åå°å»è°ç¨å¯¹åºçåèç ï¼å¨æä»£ç设计模å¼ä¹éç¨äºåå°æºå¶ï¼è¿ææä»¬æ¥å¸¸ä½¿ç¨ç Springï¼Hibernate çæ¡æ¶ä¹å¤§é使ç¨å°äºåå°æºå¶ã 举ä¾ï¼ 1. æä»¬å¨ä½¿ç¨ JDBC è¿æ¥æ°æ®åºæ¶ä½¿ç¨ `Class.forName()`éè¿åå°å è½½æ°æ®åºç驱å¨ç¨åºï¼ 2. Spring æ¡æ¶ç IOCï¼å¨æå 载管ç Beanï¼å建对象以å AOPï¼å¨æä»£çï¼åè½é½ååå°æèç³»ï¼ 3. 卿é ç½®å®ä¾ç屿§ï¼ 4. ...... **æ¨èé 读ï¼** - [Javaåå°ä½¿ç¨æ»ç»]( https://zhuanlan.zhihu.com/p/80519709) - [Reflectionï¼Java åå°æºå¶çåºç¨åºæ¯](https://segmentfault.com/a/1190000010162647?utm_source=tuicool&utm_medium=referral) - [Java åºç¡ä¹âåå°ï¼é常éè¦ï¼](https://blog.csdn.net/sinat_38259539/article/details/71799078) ##