当前位置: 首页 > 后端技术 > Java

【设计模式】Java设计模式-反射机制

时间:2023-04-01 16:02:00 Java

Java璁捐妯″紡-鍙嶅皠鏈哄埗😄鎸佺画瀛︿範鎵嶆槸鐜嬮亾馃敟缁х画璧颁笂瀛︿範涔嬭矾锛屽垎浜涔犵瑪璁梆煈婃€绘湁涓€澶╂垜鍙互鍍忓ぇ瀹朵竴鏍风殑甯呭摜馃弳鏈夋ⅵ鎯虫湁鎴忕殑浜篔ava鍙嶅皠鎶€鏈湁鐫€骞挎硾鐨勫簲鐢ㄦ満鍒讹紝鍙互閰嶇疆绫荤殑瀹屽叏闄愬畾鍚嶏紙鍖呭悕+绫诲瀷鍚嶏級銆佹柟娉曞拰鍙傛暟锛屽畬鎴愬璞$殑鍒濆鍖栵紝鍙互澶уぇ澧炲己Java鐨勫彲閰嶇疆鎬э紝杩欐槸SpringIOC鐨勫熀鏈師鐞嗐€?銆侀€氳繃鍙嶅皠鏋勯€犲璞″弽灏勫彲浠ユ瀯閫犲甫鍙傛暟鎴栦笉甯﹀弬鏁扮殑瀵硅薄銆傛棤鍙傦細鍏堝畾涔塕eflectDemo绫伙紝鏈変竴涓柟娉曟槸鏃犲弬鐨勩€俻ublicclassReflectDemo{publicvoidsayHello(){System.out.println("鍙嶅皠鏈哄埗锛侊紒锛?);}}閫氳繃鍙嶅皠鏋勯€犲璞?/ConstructpublicReflectDemogetInstance(){ReflectDemoobject=null;try{object=(ReflectDemo)Class.forName("com.lyd.demo.reflect.ReflectDemo").newInstance();}catch(IllegalAccessExceptione){e.printStackTrace();}catch(InstantiationExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}returnobject;}鍏跺疄灏辨槸閫氳繃Class鐨刦orName()鎵惧埌杩欎釜绫伙紝閫氳繃newInstance()鏂规硶鍒涘缓瀹炰緥銆備负绫诲姞杞藉櫒瀵硅薄娉ㄥ唽涓€涓被ReflectDemo鐨勫畬鍏ㄩ檺瀹氬悕=(ReflectDemo)Class.forName("com.lyd.demo.reflect.ReflectDemo").newInstance();甯﹀弬鏁帮細棣栧厛瀹氫箟ReflectParamDemo绫伙紝鏈変竴涓甫鍙傛暟鐨勬柟娉曞強鍏舵瀯閫犲嚱鏁般€傚叕鍏辩被ReflectParamDemo{绉佹湁瀛楃涓插悕绉帮紱绉佷汉骞撮緞锛沺ublicReflectParamDemo(Stringname,intage){this.name=name;杩欎釜銆傚勾榫?骞撮緞锛泒publicvoidsayHello(Stringname,intage){System.out.println("濮撳悕锛?+濮撳悕+"骞撮緞锛?+骞撮緞);}}鍚岀悊锛屾牴鎹瓹lass.forName鍒涘缓瀹炰緥锛屼絾闇€瑕佹敞鎰忕殑鏄渶瑕佹坊鍔犲弬鏁般€?/閫氳繃鍙嶅皠鏋勯€爌ublicReflectParamDemogetInstance(){ReflectParamDemoobject=null;灏濊瘯{object=(ReflectParamDemo)Class.forName("com.lyd.demo.reflect.ReflectParamDemo").getConstructor(String.class,int.class).newInstance("Lisi",18);}catch(InstantiationExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}catch(InvocationTargetExceptione){e.printStackTrace();}catch(NoSuchMethodExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}returnobject;}getConstructor(),甯﹀叆鍙傛暟绫诲瀷object=(ReflectParamDemo)Class.forName("com.lyd.demo.reflect.ReflectParamDemo").getConstructor(String.class,int.class).newInstance("鏉庢柉鈥?18);2.鍙嶅皠鏂规硶娌℃湁鍙傛暟锛氬厛婕旂ず鍙嶅皠鏂规硶锛屾墍浠ヤ娇鐢╪ew鏂规硶鍒涘缓瀹炰緥鐩爣锛屽叿浣撲唬鐮佸弬鑰冪ず渚嬶紝閫氳繃ReflectDemo.class.getMethod("sayHello");鑾峰彇绫讳腑鐨勬柟娉曪紝閫氳繃璋冪敤绮椾綋椋庢牸鐨勬柟娉曞畬鎴?/鍙嶅皠鏂规硶publicObjectreflectMethod(){ObjectretuenObj=null;ReflectDemotarget=newReflectDemo();灏濊瘯{Methodmethod=ReflectDemo.class.getMethod("sayHello");retuenObj=method.invoke(target);}catch(NoSuchMethodExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}catch(InvocationTargetExceptione){e.printStackTrace();}returnreturnObj;}target:鎸囧畾鐨勫璞nvoke(target):鍦ㄥ摢涓璞′腑璋冪敤鐨勬柟娉曘€傚鏋滃寘鍚弬鏁帮紝鍚庨潰鍙互娣诲姞鍙傛暟锛屽彲浠ユ槸澶氫釜鍙傛暟銆?銆佸疄渚嬶細缁煎悎鍙嶅皠瀵硅薄鍜屾棤鍙傛柟娉曪細//InstancepublicstaticObjectreflect(){ReflectDemoobject=null;try{object=(ReflectDemo)Class.forName("com.lyd.demo.reflect.ReflectDemo").newInstance();鏂规硶method=ReflectDemo.class.getMethod("sayHello");鏂规硶.璋冪敤锛堝璞★級锛泒catch(InstantiationExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTracece();}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(NoSuchMethodExceptione){e.printStackTrace();}catch(InvocationTargetExceptione){e.printStackTrace();}returnobject;}鍖呮嫭锛?/瀹炰緥publicstaticObjectreflect(){ReflectParamDemoobject=null;try{object=(ReflectParamDemo)Class.forName("com.lyd.demo.reflect.ReflectParamDemo").getConstructor(String.class,int.class).newInstance("鏉庡洓",18);鏂规硶method=ReflectParamDemo.class.getMethod("sayHello",String.class,int.class);method.invoke(object,"鏉庡洓",18);}catch(InstantiationExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(NoSuchMethodExceptione){e.printStackTrace();}鎶撲綇(InvocationTargetExceptione){e.printStackTrace();}returnobject;}鏁翠綋浠g爜ReflectDemo:packagecom.lyd.demo.reflect;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;/***@Author:lyd*@Description:鍙嶅皠鏈哄埗-鏃犲弬鏁?@Date:2022-08-14*/publicclassReflectDemo{publicvoidsayHello(){System.out.println("鍙嶅皠鏈哄埗锛侊紒锛?);}//閫氳繃鍙嶅皠鏋勫缓publicReflectDemogetInstance(){ReflectDemoobject=null;try{object=(ReflectDemo)Class.forName("com.lyd.demo.reflect.ReflectDemo").newInstance();}catch(IllegalAccessExceptione){e.printStackTrace();}catch(InstantiationExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}杩斿洖瀵硅薄锛泒//鍙嶅皠鏂规硶publicObjectreflectMethod(){ObjectreturnObj=null;ReflectDemo鐩爣=鏂扮殑鍙嶅皠婕旂ず();灏濊瘯{Methodmethod=ReflectDemo.class.getMethod("sayHello");retuenObj=method.invoke(target);}catch(NoSuchMethodExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}catch(InvocationTargetExceptione){e.printStackTrace();}杩斿洖retuenObj;}//瀹炰緥publicstaticObjectreflect(){ReflectDemoobject=null;try{object=(ReflectDemo)Class.forName("com.lyd.demo.reflect.ReflectDemo").newInstance();鏂规硶method=ReflectDemo.class.getMethod("sayHello");鏂规硶璋冪敤锛堝璞★級锛泒catch(InstantiationExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTr楂樻墜锛堬級;}catch(NoSuchMethodExceptione){e.printStackTrace();}catch(InvocationTargetExceptione){e.printStackTrace();}杩斿洖瀵硅薄锛泒}ReflectParamDemo锛歱ackagecom.lyd.demo.reflect;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;/***@Author:lyd*@Description:鍙嶅皠鏈哄埗閫?甯﹀弬鏁?@鏃ユ湡锛?022-08-14*/publicclassReflectParamDemo{privateStringname;绉佷汉骞撮緞;publicReflectParamDemo(Stringname,intage){this.name=name;杩欎釜銆傚勾榫?骞撮緞锛泒publicvoidsayHello(Stringname,intage){System.out.println("濮撳悕:"+name+"骞撮緞:"+age);}//閫氳繃鍙嶅皠鍘荤粨鏋刾ublicReflectParamDemogetInstance(){ReflectParamDemoobject=null;灏濊瘯{object=(ReflectParamDemo)Class.forName("com.lyd.demo.reflect.ReflectParamDemo").getConstructor(String.class,int.class).newInstance("鏉庡洓",18);}catch(InstantiationExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}catch(InvocationTargetExceptione){e.printStackTrace();}catch(NoSuchMethodExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}杩斿洖瀵硅薄锛泒//瀹炰緥publicstaticObjectreflect(){ReflectParamDemoobject=null;try{object=(ReflectParamDemo)Class.forName("com.lyd.demo.reflect.ReflectParamDemo").getConstructor(String.class,int.class).newInstance("鏉庡洓",18);鏂规硶method=ReflectParamDemo.class.getMethod("sayHello",String.class,int.class);method.invoke(object,"鏉庡洓",18);}catch(InstantiationExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(NoSuchMethodExceptione){e.printStackTrace();}catch(InvocationTargetExceptione){e.printStackTrace();}杩斿洖瀵硅薄锛泒}娴嬭瘯锛歊eflectTestpackagecom.lyd.demo.reflect;/***@Author:lyd*@Description:鍙嶅皠鏈哄埗閫犳祴璇?@Date:2022-08-14*/publicclassReflectTest{publicstaticvoidmain(String[]args){ReflectDemo.reflect();ReflectParamDemo.reflect();}}缁撴灉锛?/p>

最新推荐
猜你喜欢