{"id":50737,"date":"2023-12-23T10:31:40","date_gmt":"2023-12-23T02:31:40","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/"},"modified":"2023-12-23T15:28:37","modified_gmt":"2023-12-23T07:28:37","slug":"java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/","title":{"rendered":"Java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b"},"content":{"rendered":"<p>Java\u53cd\u5c04\u63d0\u4f9b\u4e86\u68c0\u67e5\u548c\u4fee\u6539\u5e94\u7528\u7a0b\u5e8f\u8fd0\u884c\u884c\u4e3a\u7684\u80fd\u529b\u3002Java\u4e2d\u7684\u53cd\u5c04\u662f\u6838\u5fc3Java\u4e2d\u7684\u4e00\u4e2a\u9ad8\u7ea7\u4e3b\u9898\u3002\u4f7f\u7528Java\u53cd\u5c04\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u8fd0\u884c\u65f6\u68c0\u67e5\u7c7b\u3001\u63a5\u53e3\u3001\u679a\u4e3e\uff0c\u83b7\u53d6\u5b83\u4eec\u7684\u7ed3\u6784\u3001\u65b9\u6cd5\u548c\u5b57\u6bb5\u4fe1\u606f\uff0c\u5373\u4f7f\u5728\u7f16\u8bd1\u65f6\u7c7b\u4e0d\u53ef\u8bbf\u95ee\u3002\u6211\u4eec\u8fd8\u53ef\u4ee5\u4f7f\u7528\u53cd\u5c04\u6765\u5b9e\u4f8b\u5316\u5bf9\u8c61\uff0c\u8c03\u7528\u5176\u65b9\u6cd5\uff0c\u66f4\u6539\u5b57\u6bb5\u503c\u3002<\/p>\n<h2>Java \u53cd\u5c04<\/h2>\n<\/p>\n<ol>\u5728Java\u4e2d\u7684\u53cd\u5c04<br \/>\nJava\u7c7b\u7684\u53cd\u5c04<\/p>\n<p>\u83b7\u53d6\u7c7b\u5bf9\u8c61<br \/>\n\u83b7\u53d6\u7236\u7c7b<br \/>\n\u83b7\u53d6\u516c\u5171\u6210\u5458\u7c7b<br \/>\n\u83b7\u53d6\u58f0\u660e\u7684\u7c7b<br \/>\n\u83b7\u53d6\u58f0\u660e\u7c7b<br \/>\n\u83b7\u53d6\u5305\u540d<br \/>\n\u83b7\u53d6\u7c7b\u4fee\u9970\u7b26<br \/>\n\u83b7\u53d6\u7c7b\u578b\u53c2\u6570<br \/>\n\u83b7\u53d6\u5b9e\u73b0\u7684\u63a5\u53e3<br \/>\n\u83b7\u53d6\u6240\u6709\u516c\u5171\u65b9\u6cd5<br \/>\n\u83b7\u53d6\u6240\u6709\u516c\u5171\u6784\u9020\u51fd\u6570<br \/>\n\u83b7\u53d6\u6240\u6709\u516c\u5171\u5b57\u6bb5<br \/>\n\u83b7\u53d6\u6240\u6709\u6ce8\u91ca<\/p>\n<p>Java\u5b57\u6bb5\u7684\u53cd\u5c04<\/p>\n<p>\u83b7\u53d6\u516c\u5171\u5b57\u6bb5<br \/>\n\u5b57\u6bb5\u58f0\u660e\u7c7b<br \/>\n\u83b7\u53d6\u5b57\u6bb5\u7c7b\u578b<br \/>\n\u83b7\u53d6\/\u8bbe\u7f6e\u516c\u5171\u5b57\u6bb5\u503c<br \/>\n\u83b7\u53d6\/\u8bbe\u7f6e\u79c1\u6709\u5b57\u6bb5\u503c<\/p>\n<p>Java\u65b9\u6cd5\u7684\u53cd\u5c04<\/p>\n<p>\u83b7\u53d6\u516c\u5171\u65b9\u6cd5<br \/>\n\u8c03\u7528\u516c\u5171\u65b9\u6cd5<br \/>\n\u8c03\u7528\u79c1\u6709\u65b9\u6cd5<\/p>\n<p>Java\u6784\u9020\u51fd\u6570\u7684\u53cd\u5c04<\/p>\n<p>\u83b7\u53d6\u516c\u5171\u6784\u9020\u51fd\u6570<br \/>\n\u4f7f\u7528\u6784\u9020\u51fd\u6570\u5b9e\u4f8b\u5316\u5bf9\u8c61<\/p>\n<p>Java\u6ce8\u91ca\u7684\u53cd\u5c04<\/ol>\n<\/p>\n<ol>Java\u4e2d\u7684\u53cd\u5c04<\/ol>\n<p>Java\u4e2d\u7684\u53cd\u5c04\u662f\u4e00\u4e2a\u975e\u5e38\u5f3a\u5927\u7684\u6982\u5ff5\uff0c\u5728\u6b63\u5e38\u7684\u7f16\u7a0b\u4e2d\u7528\u5904\u4e0d\u5927\uff0c\u4f46\u5b83\u662f\u5927\u591a\u6570Java\u3001J2EE\u6846\u67b6\u7684\u57fa\u7840\u3002\u4e00\u4e9b\u4f7f\u7528Java\u53cd\u5c04\u7684\u6846\u67b6\u5305\u62ec\uff1a<\/p>\n<ol>JUnit &#8211; \u4f7f\u7528\u53cd\u5c04\u6765\u89e3\u6790@Test\u6ce8\u89e3\u4ee5\u83b7\u53d6\u6d4b\u8bd5\u65b9\u6cd5\u5e76\u8fdb\u884c\u8c03\u7528\u3002<br \/>\nSpring &#8211; \u4f9d\u8d56\u6ce8\u5165\uff0c\u8bf7\u9605\u8bfb\u66f4\u591a\u5173\u4e8eSpring\u4f9d\u8d56\u6ce8\u5165\u7684\u5185\u5bb9\u3002<br \/>\nTomcat Web\u5bb9\u5668\u901a\u8fc7\u89e3\u6790web.xml\u6587\u4ef6\u548c\u8bf7\u6c42URI\u5c06\u8bf7\u6c42\u8f6c\u53d1\u5230\u6b63\u786e\u7684\u6a21\u5757\u3002<br \/>\nEclipse\u81ea\u52a8\u5b8c\u6210\u65b9\u6cd5\u540d\u79f0\u3002<br \/>\nStruts<br \/>\nHibernate<\/ol>\n<p>\u5217\u8868\u662f\u65e0\u6b62\u5883\u7684\uff0c\u8fd9\u4e9b\u6846\u67b6\u90fd\u4f7f\u7528 Java \u53cd\u5c04\uff0c\u56e0\u4e3a\u5b83\u4eec\u90fd\u65e0\u6cd5\u83b7\u53d6\u548c\u4e86\u89e3\u7528\u6237\u5b9a\u4e49\u7684\u7c7b\u3001\u63a5\u53e3\u53ca\u5176\u65b9\u6cd5\u7b49\u3002\u5728\u6211\u4eec\u5df2\u7ecf\u53ef\u4ee5\u8bbf\u95ee\u8fd9\u4e9b\u7c7b\u548c\u63a5\u53e3\u7684\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e0d\u5e94\u8be5\u5728\u6b63\u5e38\u7f16\u7a0b\u4e2d\u4f7f\u7528\u53cd\u5c04\uff0c\u56e0\u4e3a\u5b58\u5728\u4ee5\u4e0b\u7f3a\u70b9\u3002<\/p>\n<ul class=\"post-ul\">\n<li>Poor Performance &#8211; Since java reflection resolve the types dynamically, it involves processing like scanning the classpath to find the class to load, causing slow performance.<\/li>\n<li>Security Restrictions &#8211; Reflection requires runtime permissions that might not be available for system running under security manager. This can cause you application to fail at runtime because of security manager.<\/li>\n<li>Security Issues &#8211; Using reflection we can access part of code that we are not supposed to access, for example we can access private fields of a class and change it\u2019s value. This can be a serious security threat and cause your application to behave abnormally.<\/li>\n<li>High Maintenance &#8211; Reflection code is hard to understand and debug, also any issues with the code can\u2019t be found at compile time because the classes might not be available, making it less flexible and hard to maintain.<\/li>\n<\/ul>\n<ol>Java\u53cd\u5c04\u7c7b\u7684\u7528\u9014<\/ol>\n<p>\u5728Java\u4e2d\uff0c\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u662f\u539f\u59cb\u7c7b\u578b\u6216\u5f15\u7528\u7c7b\u578b\u3002\u6240\u6709\u7684\u7c7b\u3001\u679a\u4e3e\u548c\u6570\u7ec4\u90fd\u662f\u5f15\u7528\u7c7b\u578b\uff0c\u5e76\u7ee7\u627f\u81eajava.lang.Object\u3002\u539f\u59cb\u7c7b\u578b\u5305\u62ec\u5e03\u5c14\u578b\u3001\u5b57\u8282\u578b\u3001\u77ed\u6574\u578b\u3001\u6574\u578b\u3001\u957f\u6574\u578b\u3001\u5b57\u7b26\u578b\u3001\u6d6e\u70b9\u578b\u548c\u53cc\u7cbe\u5ea6\u578b\u3002java.lang.Class\u662f\u6240\u6709\u53cd\u5c04\u64cd\u4f5c\u7684\u5165\u53e3\u70b9\u3002\u5bf9\u4e8e\u6bcf\u79cd\u5bf9\u8c61\u7c7b\u578b\uff0cJVM\u4f1a\u5b9e\u4f8b\u5316\u4e00\u4e2a\u4e0d\u53ef\u53d8\u7684java.lang.Class\u5b9e\u4f8b\uff0c\u4ee5\u63d0\u4f9b\u65b9\u6cd5\u6765\u68c0\u67e5\u5bf9\u8c61\u7684\u8fd0\u884c\u65f6\u5c5e\u6027\uff0c\u521b\u5efa\u65b0\u5bf9\u8c61\uff0c\u8c03\u7528\u5176\u65b9\u6cd5\uff0c\u4ee5\u53ca\u83b7\u53d6\/\u8bbe\u7f6e\u5bf9\u8c61\u5b57\u6bb5\u3002\u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u5c06\u8ba8\u8bbaClass\u7684\u4e00\u4e9b\u91cd\u8981\u65b9\u6cd5\uff0c\u4e3a\u4e86\u65b9\u4fbf\u8d77\u89c1\uff0c\u6211\u5c06\u521b\u5efa\u4e00\u4e9b\u5177\u6709\u7ee7\u627f\u5c42\u6b21\u7ed3\u6784\u7684\u7c7b\u548c\u63a5\u53e3\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.Olivia.reflection;\r\n\r\npublic interface BaseInterface {\r\n\t\r\n\tpublic int interfaceInt=0;\r\n\t\r\n\tvoid method1();\r\n\t\r\n\tint method2(String str);\r\n}\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>package com.Olivia.reflection;\r\n\r\npublic class BaseClass {\r\n\r\n\tpublic int baseInt;\r\n\t\r\n\tprivate static void method3(){\r\n\t\tSystem.out.println(\"Method3\");\r\n\t}\r\n\t\r\n\tpublic int method4(){\r\n\t\tSystem.out.println(\"Method4\");\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\tpublic static int method5(){\r\n\t\tSystem.out.println(\"Method5\");\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\tvoid method6(){\r\n\t\tSystem.out.println(\"Method6\");\r\n\t}\r\n\t\r\n\t\/\/ inner public class\r\n\tpublic class BaseClassInnerClass{}\r\n\t\t\r\n\t\/\/member public enum\r\n\tpublic enum BaseClassMemberEnum{}\r\n}\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>package com.Olivia.reflection;\r\n\r\n@Deprecated\r\npublic class ConcreteClass extends BaseClass implements BaseInterface {\r\n\r\n\tpublic int publicInt;\r\n\tprivate String privateString=\"private string\";\r\n\tprotected boolean protectedBoolean;\r\n\tObject defaultObject;\r\n\t\r\n\tpublic ConcreteClass(int i){\r\n\t\tthis.publicInt=i;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void method1() {\r\n\t\tSystem.out.println(\"Method1 impl.\");\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int method2(String str) {\r\n\t\tSystem.out.println(\"Method2 impl.\");\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\t@Override\r\n\tpublic int method4(){\r\n\t\tSystem.out.println(\"Method4 overriden.\");\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\tpublic int method5(int i){\r\n\t\tSystem.out.println(\"Method4 overriden.\");\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\t\/\/ inner classes\r\n\tpublic class ConcreteClassPublicClass{}\r\n\tprivate class ConcreteClassPrivateClass{}\r\n\tprotected class ConcreteClassProtectedClass{}\r\n\tclass ConcreteClassDefaultClass{}\r\n\t\r\n\t\/\/member enum\r\n\tenum ConcreteClassDefaultEnum{}\r\n\tpublic enum ConcreteClassPublicEnum{}\r\n\t\r\n\t\/\/member interface\r\n\tpublic interface ConcreteClassPublicInterface{}\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u8ba9\u6211\u4eec\u6765\u770b\u4e00\u4e9b\u7c7b\u7684\u91cd\u8981\u53cd\u5c04\u65b9\u6cd5\u3002<\/p>\n<h3>\u83b7\u53d6\u7c7b\u5bf9\u8c61<\/h3>\n<p>\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u4e09\u79cd\u65b9\u6cd5\u6765\u83b7\u53d6\u4e00\u4e2a\u5bf9\u8c61\u7684\u7c7b &#8211; \u901a\u8fc7\u9759\u6001\u53d8\u91cf\u7c7b\u3001\u4f7f\u7528\u5bf9\u8c61\u7684getClass()\u65b9\u6cd5\u4ee5\u53cajava.lang.Class.forName(String fullyClassifiedClassName)\u3002\u5bf9\u4e8e\u539f\u59cb\u7c7b\u578b\u548c\u6570\u7ec4\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u9759\u6001\u53d8\u91cf\u7c7b\u3002\u5c01\u88c5\u7c7b\u63d0\u4f9b\u4e86\u53e6\u4e00\u4e2a\u9759\u6001\u53d8\u91cfTYPE\u6765\u83b7\u53d6\u7c7b\u3002<\/p>\n<pre class=\"post-pre\"><code>\/\/ Get Class using reflection\r\nClass&lt;?&gt; concreteClass = ConcreteClass.class;\r\nconcreteClass = new ConcreteClass(5).getClass();\r\ntry {\r\n\t\/\/ below method is used most of the times in frameworks like JUnit\r\n\t\/\/Spring dependency injection, Tomcat web container\r\n\t\/\/Eclipse auto completion of method names, hibernate, Struts2 etc.\r\n\t\/\/because ConcreteClass is not available at compile time\r\n\tconcreteClass = Class.forName(\"com.Olivia.reflection.ConcreteClass\");\r\n} catch (ClassNotFoundException e) {\r\n\te.printStackTrace();\r\n}\r\nSystem.out.println(concreteClass.getCanonicalName()); \/\/ prints com.Olivia.reflection.ConcreteClass\r\n\r\n\/\/for primitive types, wrapper classes and arrays\r\nClass&lt;?&gt; booleanClass = boolean.class;\r\nSystem.out.println(booleanClass.getCanonicalName()); \/\/ prints boolean\r\n\r\nClass&lt;?&gt; cDouble = Double.TYPE;\r\nSystem.out.println(cDouble.getCanonicalName()); \/\/ prints double\r\n\r\nClass&lt;?&gt; cDoubleArray = Class.forName(\"[D\");\r\nSystem.out.println(cDoubleArray.getCanonicalName()); \/\/prints double[]\r\n\r\nClass&lt;?&gt; twoDStringArray = String[][].class;\r\nSystem.out.println(twoDStringArray.getCanonicalName()); \/\/ prints java.lang.String[][]\r\n<\/code><\/pre>\n<p>getCanonicalName()\u65b9\u6cd5\u8fd4\u56de\u5e95\u5c42\u7c7b\u7684\u89c4\u8303\u540d\u79f0\u3002\u8bf7\u6ce8\u610f\uff0cjava.lang.Class\u4f7f\u7528\u6cdb\u578b\uff0c\u5b83\u6709\u52a9\u4e8e\u6846\u67b6\u786e\u4fdd\u68c0\u7d22\u5230\u7684\u7c7b\u662f\u6846\u67b6\u57fa\u7c7b\u7684\u5b50\u7c7b\u3002\u67e5\u770bJava\u6cdb\u578b\u6559\u7a0b\u4ee5\u4e86\u89e3\u6cdb\u578b\u53ca\u5176\u901a\u914d\u7b26\u7528\u6cd5\u3002<\/p>\n<h3>\u53d6\u5f97\u8d85\u7c7b<\/h3>\n<p>\u5728Class\u5bf9\u8c61\u4e0a\u8c03\u7528getSuperclass()\u65b9\u6cd5\u4f1a\u8fd4\u56de\u8be5\u7c7b\u7684\u7236\u7c7b\u3002\u5982\u679c\u8fd9\u4e2aClass\u4ee3\u8868\u7684\u662fObject\u7c7b\u3001\u4e00\u4e2a\u63a5\u53e3\u3001\u539f\u59cb\u7c7b\u578b\u6216\u8005void\uff0c\u5219\u8fd4\u56denull\u3002\u5982\u679c\u8fd9\u4e2a\u5bf9\u8c61\u4ee3\u8868\u7684\u662f\u4e00\u4e2a\u6570\u7ec4\u7c7b\uff0c\u5219\u8fd4\u56de\u4ee3\u8868Object\u7c7b\u7684Class\u5bf9\u8c61\u3002<\/p>\n<pre class=\"post-pre\"><code>Class&lt;?&gt; superClass = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getSuperclass();\r\nSystem.out.println(superClass); \/\/ prints \"class com.Olivia.reflection.BaseClass\"\r\nSystem.out.println(Object.class.getSuperclass()); \/\/ prints \"null\"\r\nSystem.out.println(String[][].class.getSuperclass());\/\/ prints \"class java.lang.Object\"\r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\u516c\u5171\u6210\u5458\u7c7b<\/h3>\n<p>\u83b7\u53d6\u5bf9\u8c61\u7684\u7c7b\u7684getClasses()\u65b9\u6cd5\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\uff0c\u8be5\u6570\u7ec4\u5305\u542b\u8868\u793a\u8be5\u7c7b\u7684\u6240\u6709\u516c\u5171\u7c7b\u3001\u63a5\u53e3\u548c\u679a\u4e3e\u7c7b\u578b\u6210\u5458\u7684Class\u5bf9\u8c61\u3002\u5176\u4e2d\u5305\u62ec\u4ece\u7236\u7c7b\u7ee7\u627f\u7684\u516c\u5171\u7c7b\u548c\u63a5\u53e3\u6210\u5458\uff0c\u4ee5\u53ca\u7531\u8be5\u7c7b\u58f0\u660e\u7684\u516c\u5171\u7c7b\u548c\u63a5\u53e3\u6210\u5458\u3002\u5982\u679c\u8be5Class\u5bf9\u8c61\u6ca1\u6709\u516c\u5171\u6210\u5458\u7c7b\u6216\u63a5\u53e3\uff0c\u6216\u8005\u8be5Class\u5bf9\u8c61\u8868\u793a\u539f\u59cb\u7c7b\u578b\u3001\u6570\u7ec4\u7c7b\u6216void\uff0c\u5219\u8be5\u65b9\u6cd5\u8fd4\u56de\u957f\u5ea6\u4e3a0\u7684\u6570\u7ec4\u3002<\/p>\n<pre class=\"post-pre\"><code>Class&lt;?&gt;[] classes = concreteClass.getClasses();\r\n\/\/[class com.Olivia.reflection.ConcreteClass$ConcreteClassPublicClass, \r\n\/\/class com.Olivia.reflection.ConcreteClass$ConcreteClassPublicEnum, \r\n\/\/interface com.Olivia.reflection.ConcreteClass$ConcreteClassPublicInterface,\r\n\/\/class com.Olivia.reflection.BaseClass$BaseClassInnerClass, \r\n\/\/class com.Olivia.reflection.BaseClass$BaseClassMemberEnum]\r\nSystem.out.println(Arrays.toString(classes));\r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\u58f0\u660e\u7684\u7c7b<\/h3>\n<p>getDeclaredClasses\uff08\uff09\u65b9\u6cd5\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\uff0c\u5176\u4e2d\u5305\u542b\u53cd\u6620\u7531\u6b64Class\u5bf9\u8c61\u8868\u793a\u7684\u7c7b\u7684\u6240\u6709\u6210\u5458\u58f0\u660e\u7684\u7c7b\u548c\u63a5\u53e3\u7684Class\u5bf9\u8c61\u3002\u8fd4\u56de\u7684\u6570\u7ec4\u4e0d\u5305\u62ec\u5728\u7ee7\u627f\u7684\u7c7b\u548c\u63a5\u53e3\u4e2d\u58f0\u660e\u7684\u7c7b\u3002<\/p>\n<pre class=\"post-pre\"><code>\/\/getting all of the classes, interfaces, and enums that are explicitly declared in ConcreteClass\r\nClass&lt;?&gt;[] explicitClasses = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getDeclaredClasses();\r\n\/\/prints [class com.Olivia.reflection.ConcreteClass$ConcreteClassDefaultClass, \r\n\/\/class com.Olivia.reflection.ConcreteClass$ConcreteClassDefaultEnum, \r\n\/\/class com.Olivia.reflection.ConcreteClass$ConcreteClassPrivateClass, \r\n\/\/class com.Olivia.reflection.ConcreteClass$ConcreteClassProtectedClass, \r\n\/\/class com.Olivia.reflection.ConcreteClass$ConcreteClassPublicClass, \r\n\/\/class com.Olivia.reflection.ConcreteClass$ConcreteClassPublicEnum, \r\n\/\/interface com.Olivia.reflection.ConcreteClass$ConcreteClassPublicInterface]\r\nSystem.out.println(Arrays.toString(explicitClasses));\r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\u58f0\u660e\u7c7b<\/h3>\n<p>getDeclaringClass()\u65b9\u6cd5\u8fd4\u56deClass\u5bf9\u8c61\uff0c\u8be5\u5bf9\u8c61\u4ee3\u8868\u4e86\u58f0\u660e\u8be5\u65b9\u6cd5\u7684\u7c7b\u3002<\/p>\n<pre class=\"post-pre\"><code>Class&lt;?&gt; innerClass = Class.forName(\"com.Olivia.reflection.ConcreteClass$ConcreteClassDefaultClass\");\r\n\/\/prints com.Olivia.reflection.ConcreteClass\r\nSystem.out.println(innerClass.getDeclaringClass().getCanonicalName());\r\nSystem.out.println(innerClass.getEnclosingClass().getCanonicalName());\r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\u8f6f\u4ef6\u5305\u540d\u79f0<\/h3>\n<p>getPackage() \u65b9\u6cd5\u8fd4\u56de\u8be5\u7c7b\u7684\u5305\u3002\u8be5\u7c7b\u7684\u7c7b\u52a0\u8f7d\u5668\u7528\u4e8e\u67e5\u627e\u5305\u3002\u6211\u4eec\u53ef\u4ee5\u8c03\u7528 Package \u7684 getName() \u65b9\u6cd5\u6765\u83b7\u53d6\u5305\u7684\u540d\u79f0\u3002<\/p>\n<pre class=\"post-pre\"><code>\/\/prints \"com.Olivia.reflection\"\r\nSystem.out.println(Class.forName(\"com.Olivia.reflection.BaseInterface\").getPackage().getName());\r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\u7c7b\u7684\u4fee\u9970\u7b26<\/h3>\n<p>getModifiers()\u65b9\u6cd5\u8fd4\u56de\u7c7b\u4fee\u9970\u7b26\u7684\u6574\u6570\u8868\u793a\u5f62\u5f0f\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528java.lang.reflect.Modifier.toString()\u65b9\u6cd5\u4ee5\u5b57\u7b26\u4e32\u683c\u5f0f\u83b7\u53d6\u6e90\u4ee3\u7801\u4e2d\u4f7f\u7528\u7684\u4fee\u9970\u7b26\u3002<\/p>\n<pre class=\"post-pre\"><code>System.out.println(Modifier.toString(concreteClass.getModifiers())); \/\/prints \"public\"\r\n\/\/prints \"public abstract interface\"\r\nSystem.out.println(Modifier.toString(Class.forName(\"com.Olivia.reflection.BaseInterface\").getModifiers())); \r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\u7c7b\u578b\u53c2\u6570<\/h3>\n<p>\u5982\u679c\u7c7b\u4e0e\u4efb\u4f55\u7c7b\u578b\u53c2\u6570\u76f8\u5173\u8054\uff0c\u5219getTypeParameters()\u4f1a\u8fd4\u56deTypeVariable\u6570\u7ec4\u3002\u8fd9\u4e9b\u7c7b\u578b\u53c2\u6570\u4ee5\u58f0\u660e\u7684\u76f8\u540c\u987a\u5e8f\u8fd4\u56de\u3002<\/p>\n<pre class=\"post-pre\"><code>\/\/Get Type parameters (generics)\r\nTypeVariable&lt;?&gt;[] typeParameters = Class.forName(\"java.util.HashMap\").getTypeParameters();\r\nfor(TypeVariable&lt;?&gt; t : typeParameters)\r\nSystem.out.print(t.getName()+\",\");\r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\u5df2\u5b9e\u73b0\u7684\u63a5\u53e3<\/h3>\n<p>getGenericInterfaces() \u65b9\u6cd5\u8fd4\u56de\u4f7f\u7528\u6cdb\u578b\u7c7b\u578b\u4fe1\u606f\u5b9e\u73b0\u7684\u63a5\u53e3\u6570\u7ec4\u3002\u6211\u4eec\u8fd8\u53ef\u4ee5\u4f7f\u7528 getInterfaces() \u83b7\u53d6\u6240\u6709\u5b9e\u73b0\u7684\u63a5\u53e3\u7684\u7c7b\u8868\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code>Type[] interfaces = Class.forName(\"java.util.HashMap\").getGenericInterfaces();\r\n\/\/prints \"[java.util.Map&lt;K, V&gt;, interface java.lang.Cloneable, interface java.io.Serializable]\"\r\nSystem.out.println(Arrays.toString(interfaces));\r\n\/\/prints \"[interface java.util.Map, interface java.lang.Cloneable, interface java.io.Serializable]\"\r\nSystem.out.println(Arrays.toString(Class.forName(\"java.util.HashMap\").getInterfaces()));\t\t\r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\u6240\u6709\u516c\u5171\u65b9\u6cd5<\/h3>\n<p>getMethods()\u65b9\u6cd5\u8fd4\u56de\u5305\u62ec\u5176\u7236\u7c7b\u548c\u7236\u63a5\u53e3\u7684\u516c\u5171\u65b9\u6cd5\u5728\u5185\u7684Class\u7684\u516c\u5171\u65b9\u6cd5\u6570\u7ec4\u3002<\/p>\n<pre class=\"post-pre\"><code>Method[] publicMethods = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getMethods();\r\n\/\/prints public methods of ConcreteClass, BaseClass, Object\r\nSystem.out.println(Arrays.toString(publicMethods));\r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\u6240\u6709\u516c\u5171\u6784\u9020\u51fd\u6570<\/h3>\n<p>getConstructors\uff08\uff09\u65b9\u6cd5\u8fd4\u56de\u5bf9\u8c61\u7c7b\u53c2\u8003\u7684\u516c\u5171\u6784\u9020\u51fd\u6570\u5217\u8868\u3002<\/p>\n<pre class=\"post-pre\"><code>\/\/Get All public constructors\r\nConstructor&lt;?&gt;[] publicConstructors = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getConstructors();\r\n\/\/prints public constructors of ConcreteClass\r\nSystem.out.println(Arrays.toString(publicConstructors));\r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\u6240\u6709\u516c\u5171\u5b57\u6bb5<\/h3>\n<p>getFields()\u65b9\u6cd5\u8fd4\u56de\u7c7b\u7684\u516c\u5171\u5b57\u6bb5\u6570\u7ec4\uff0c\u5305\u62ec\u5176\u7236\u7c7b\u548c\u7236\u63a5\u53e3\u7684\u516c\u5171\u5b57\u6bb5\u3002<\/p>\n<pre class=\"post-pre\"><code>\/\/Get All public fields\r\nField[] publicFields = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getFields();\r\n\/\/prints public fields of ConcreteClass, it's superclass and super interfaces\r\nSystem.out.println(Arrays.toString(publicFields));\r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\u6240\u6709\u7684\u6ce8\u91ca<\/h3>\n<p>getAnnotations()\u65b9\u6cd5\u8fd4\u56de\u5143\u7d20\u7684\u6240\u6709\u6ce8\u89e3\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u5b83\u4e0e\u7c7b\u3001\u5b57\u6bb5\u548c\u65b9\u6cd5\u4e00\u8d77\u4f7f\u7528\u3002\u6ce8\u610f\uff0c\u53ea\u6709\u4f7f\u7528\u53cd\u5c04\u673a\u5236\u8fdb\u884c\u8fd0\u884c\u65f6\u4fdd\u7559\u7b56\u7565\u7684\u6ce8\u89e3\u624d\u53ef\u7528\uff0c\u8bf7\u67e5\u770bJava\u6ce8\u89e3\u6559\u7a0b\u3002\u6211\u4eec\u5c06\u5728\u540e\u9762\u7684\u7ae0\u8282\u4e2d\u8be6\u7ec6\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\u3002<\/p>\n<pre class=\"post-pre\"><code>java.lang.annotation.Annotation[] annotations = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getAnnotations();\r\n\/\/prints [@java.lang.Deprecated()]\r\nSystem.out.println(Arrays.toString(annotations));\r\n<\/code><\/pre>\n<ol>Java\u53cd\u5c04\u7528\u4e8e\u5b57\u6bb5<\/ol>\n<p>\u53cd\u5c04API\u63d0\u4f9b\u4e86\u51e0\u79cd\u65b9\u6cd5\u6765\u5206\u6790\u7c7b\u7684\u5b57\u6bb5\uff0c\u5e76\u5728\u8fd0\u884c\u65f6\u4fee\u6539\u5b83\u4eec\u7684\u503c\u3002\u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u5c06\u4ecb\u7ecd\u4e00\u4e9b\u5e38\u7528\u7684\u53cd\u5c04\u65b9\u6cd5\uff0c\u7528\u4e8e\u5904\u7406\u65b9\u6cd5\u3002<\/p>\n<h3>\u83b7\u53d6\u516c\u5171\u5b57\u6bb5<\/h3>\n<p>\u5728\u4e0a\u4e00\u90e8\u5206\u4e2d\uff0c\u6211\u4eec\u770b\u5230\u4e86\u5982\u4f55\u83b7\u53d6\u4e00\u4e2a\u7c7b\u7684\u6240\u6709\u516c\u5171\u5b57\u6bb5\u7684\u5217\u8868\u3002\u53cd\u5c04API\u8fd8\u63d0\u4f9b\u4e86\u901a\u8fc7getField()\u65b9\u6cd5\u83b7\u53d6\u7279\u5b9a\u516c\u5171\u5b57\u6bb5\u7684\u65b9\u6cd5\u3002\u8be5\u65b9\u6cd5\u4f1a\u5728\u6307\u5b9a\u7684\u7c7b\u5f15\u7528\u4e2d\u67e5\u627e\u8be5\u5b57\u6bb5\uff0c\u7136\u540e\u5728\u8d85\u7ea7\u63a5\u53e3\u548c\u8d85\u7ea7\u7c7b\u4e2d\u67e5\u627e\u3002<\/p>\n<pre class=\"post-pre\"><code>Field field = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getField(\"interfaceInt\");\r\n<\/code><\/pre>\n<p>\u5982\u679c\u5728ConcreteClass\u4e2d\u5b9e\u73b0\u4e86BaseInterface\u63a5\u53e3\uff0c\u4ee5\u4e0a\u8c03\u7528\u5c06\u8fd4\u56deBaseInterface\u4e2d\u7684\u5b57\u6bb5\u3002\u5982\u679c\u672a\u627e\u5230\u8be5\u5b57\u6bb5\uff0c\u5219\u4f1a\u629b\u51faNoSuchFieldException\u5f02\u5e38\u3002<\/p>\n<h3>\u58f0\u660e\u5b57\u6bb5\u7684\u7c7b<\/h3>\n<p>\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u5b57\u6bb5\u5bf9\u8c61\u7684getDeclaringClass()\u65b9\u6cd5\u6765\u83b7\u53d6\u58f0\u660e\u8be5\u5b57\u6bb5\u7684\u7c7b\u3002<\/p>\n<pre class=\"post-pre\"><code>try {\r\n\tField field = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getField(\"interfaceInt\");\r\n\tClass&lt;?&gt; fieldClass = field.getDeclaringClass();\r\n\tSystem.out.println(fieldClass.getCanonicalName()); \/\/prints com.Olivia.reflection.BaseInterface\r\n} catch (NoSuchFieldException | SecurityException e) {\r\n\te.printStackTrace();\r\n}\r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\u5b57\u6bb5\u7c7b\u578b<\/h3>\n<p>\u5982\u679c\u5b57\u6bb5\u662f\u539f\u59cb\u6570\u636e\u7c7b\u578b\uff0cgetType()\u65b9\u6cd5\u8fd4\u56de\u58f0\u660e\u5b57\u6bb5\u7c7b\u578b\u7684Class\u5bf9\u8c61\uff0c\u5982\u679c\u5b57\u6bb5\u662f\u5305\u88c5\u7c7b\u5bf9\u8c61\uff0c\u5219\u8fd4\u56de\u5305\u88c5\u7c7b\u5bf9\u8c61\u3002<\/p>\n<pre class=\"post-pre\"><code>Field field = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getField(\"publicInt\");\r\nClass&lt;?&gt; fieldType = field.getType();\r\nSystem.out.println(fieldType.getCanonicalName()); \/\/prints int\t\t\t\r\n<\/code><\/pre>\n<h3>\u83b7\u53d6\/\u8bbe\u7f6e\u516c\u5171\u5b57\u6bb5\u7684\u503c<\/h3>\n<p>\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u53cd\u5c04\u6765\u83b7\u53d6\u548c\u8bbe\u7f6e\u5bf9\u8c61\u4e2d\u5b57\u6bb5\u7684\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code>Field field = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getField(\"publicInt\");\r\nConcreteClass obj = new ConcreteClass(5);\r\nSystem.out.println(field.get(obj)); \/\/prints 5\r\nfield.setInt(obj, 10); \/\/setting field value to 10 in object\r\nSystem.out.println(field.get(obj)); \/\/prints 10\r\n<\/code><\/pre>\n<p>get()\u65b9\u6cd5\u8fd4\u56deObject\u7c7b\u578b\u7684\u5bf9\u8c61\uff0c\u6240\u4ee5\u5982\u679c\u5b57\u6bb5\u662f\u539f\u59cb\u7c7b\u578b\uff0c\u5b83\u4f1a\u8fd4\u56de\u5bf9\u5e94\u7684\u5305\u88c5\u7c7b\u3002\u5982\u679c\u5b57\u6bb5\u662f\u9759\u6001\u7684\uff0c\u5728get()\u65b9\u6cd5\u4e2d\u6211\u4eec\u53ef\u4ee5\u4f20\u9012null\u4f5c\u4e3a\u53c2\u6570\u3002\u6709\u51e0\u4e2aset*()\u65b9\u6cd5\u53ef\u4ee5\u5c06\u5bf9\u8c61\u8bbe\u7f6e\u5230\u5b57\u6bb5\u4e2d\uff0c\u6216\u8005\u5c06\u4e0d\u540c\u7c7b\u578b\u7684\u539f\u59cb\u7c7b\u578b\u8bbe\u7f6e\u5230\u5b57\u6bb5\u4e2d\u3002\u6211\u4eec\u53ef\u4ee5\u83b7\u53d6\u5b57\u6bb5\u7684\u7c7b\u578b\uff0c\u7136\u540e\u8c03\u7528\u6b63\u786e\u7684\u51fd\u6570\u6765\u6b63\u786e\u8bbe\u7f6e\u5b57\u6bb5\u7684\u503c\u3002\u5982\u679c\u5b57\u6bb5\u662ffinal\u7684\uff0cset()\u65b9\u6cd5\u4f1a\u629b\u51fajava.lang.IllegalAccessException\u5f02\u5e38\u3002<\/p>\n<h3>\u8bbe\u7f6e\/\u83b7\u53d6\u79c1\u6709\u5b57\u6bb5\u7684\u503c\u3002<\/h3>\n<p>\u6211\u4eec\u77e5\u9053\uff0c\u79c1\u6709\u5b57\u6bb5\u548c\u65b9\u6cd5\u5728\u7c7b\u5916\u90e8\u662f\u65e0\u6cd5\u8bbf\u95ee\u7684\uff0c\u4f46\u662f\u901a\u8fc7\u4f7f\u7528\u53cd\u5c04\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5173\u95edJava\u5bf9\u5b57\u6bb5\u4fee\u9970\u7b26\u7684\u8bbf\u95ee\u68c0\u67e5\u6765\u83b7\u53d6\/\u8bbe\u7f6e\u79c1\u6709\u5b57\u6bb5\u7684\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code>Field privateField = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getDeclaredField(\"privateString\");\r\n\/\/turning off access check with below method call\r\nprivateField.setAccessible(true);\r\nConcreteClass objTest = new ConcreteClass(1);\r\nSystem.out.println(privateField.get(objTest)); \/\/ prints \"private string\"\r\nprivateField.set(objTest, \"private string updated\");\r\nSystem.out.println(privateField.get(objTest)); \/\/prints \"private string updated\"\r\n<\/code><\/pre>\n<ol>Java\u65b9\u6cd5\u7684\u53cd\u5c04<\/ol>\n<p>\u901a\u8fc7\u53cd\u5c04\uff0c\u6211\u4eec\u53ef\u4ee5\u83b7\u53d6\u6709\u5173\u65b9\u6cd5\u7684\u4fe1\u606f\u5e76\u6267\u884c\u5b83\u3002\u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u5c06\u5b66\u4e60\u4e0d\u540c\u7684\u65b9\u6cd5\u6765\u83b7\u53d6\u4e00\u4e2a\u65b9\u6cd5\uff0c\u8c03\u7528\u4e00\u4e2a\u65b9\u6cd5\u5e76\u8bbf\u95ee\u79c1\u6709\u65b9\u6cd5\u3002<\/p>\n<h3>\u83b7\u53d6\u516c\u5171\u65b9\u6cd5<\/h3>\n<p>\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528getMethod()\u65b9\u6cd5\u6765\u83b7\u53d6\u4e00\u4e2a\u7c7b\u7684\u516c\u5171\u65b9\u6cd5\uff0c\u6211\u4eec\u9700\u8981\u4f20\u9012\u65b9\u6cd5\u7684\u540d\u79f0\u548c\u53c2\u6570\u7c7b\u578b\u3002\u5982\u679c\u5728\u7c7b\u4e2d\u627e\u4e0d\u5230\u8be5\u65b9\u6cd5\uff0c\u53cd\u5c04API\u4f1a\u5728\u7236\u7c7b\u4e2d\u67e5\u627e\u8be5\u65b9\u6cd5\u3002\u5728\u4e0b\u9762\u7684\u793a\u4f8b\u4e2d\uff0c\u6211\u4f7f\u7528\u53cd\u5c04\u6765\u83b7\u53d6HashMap\u7684put()\u65b9\u6cd5\u3002\u793a\u4f8b\u8fd8\u5c55\u793a\u4e86\u5982\u4f55\u83b7\u53d6\u65b9\u6cd5\u7684\u53c2\u6570\u7c7b\u578b\u3001\u65b9\u6cd5\u4fee\u9970\u7b26\u548c\u8fd4\u56de\u7c7b\u578b\u3002<\/p>\n<pre class=\"post-pre\"><code>Method method = Class.forName(\"java.util.HashMap\").getMethod(\"put\", Object.class, Object.class);\r\n\/\/get method parameter types, prints \"[class java.lang.Object, class java.lang.Object]\"\r\nSystem.out.println(Arrays.toString(method.getParameterTypes()));\r\n\/\/get method return type, return \"class java.lang.Object\", class reference for void\r\nSystem.out.println(method.getReturnType());\r\n\/\/get method modifiers\r\nSystem.out.println(Modifier.toString(method.getModifiers())); \/\/prints \"public\"\r\n<\/code><\/pre>\n<h3>\u8c03\u7528\u516c\u5171\u65b9\u6cd5<\/h3>\n<p>\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528Method\u5bf9\u8c61\u7684invoke()\u65b9\u6cd5\u6765\u8c03\u7528\u4e00\u4e2a\u65b9\u6cd5\uff0c\u5728\u4e0b\u9762\u7684\u793a\u4f8b\u4ee3\u7801\u4e2d\uff0c\u6211\u901a\u8fc7\u53cd\u5c04\u8c03\u7528HashMap\u7684put\u65b9\u6cd5\u3002<\/p>\n<pre class=\"post-pre\"><code>Method method = Class.forName(\"java.util.HashMap\").getMethod(\"put\", Object.class, Object.class);\r\nMap&lt;String, String&gt; hm = new HashMap&lt;&gt;();\r\nmethod.invoke(hm, \"key\", \"value\");\r\nSystem.out.println(hm); \/\/ prints {key=value}\r\n<\/code><\/pre>\n<p>\u5982\u679c\u8fd9\u4e2a\u65b9\u6cd5\u662f\u9759\u6001\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06NULL\u4f20\u9012\u4f5c\u4e3a\u5bf9\u8c61\u53c2\u6570\u3002<\/p>\n<h3>\u8c03\u7528\u79c1\u6709\u65b9\u6cd5<\/h3>\n<p>\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528getDeclaredMethod()\u6765\u83b7\u53d6\u79c1\u6709\u65b9\u6cd5\uff0c\u7136\u540e\u5173\u95ed\u8bbf\u95ee\u68c0\u67e5\u6765\u8c03\u7528\u5b83\uff0c\u4e0b\u9762\u7684\u4f8b\u5b50\u5c55\u793a\u4e86\u6211\u4eec\u5982\u4f55\u8c03\u7528\u6ca1\u6709\u53c2\u6570\u4e14\u4e3a\u9759\u6001\u65b9\u6cd5\u7684BaseClass\u7684method3()\u3002<\/p>\n<pre class=\"post-pre\"><code>\/\/invoking private method\r\nMethod method = Class.forName(\"com.Olivia.reflection.BaseClass\").getDeclaredMethod(\"method3\", null);\r\nmethod.setAccessible(true);\r\nmethod.invoke(null, null); \/\/prints \"Method3\"\r\n<\/code><\/pre>\n<ol>\u6784\u9020\u51fd\u6570\u7684Java\u53cd\u5c04<\/ol>\n<p>\u53cd\u5c04API\u63d0\u4f9b\u4e86\u83b7\u53d6\u7c7b\u7684\u6784\u9020\u51fd\u6570\u8fdb\u884c\u5206\u6790\u7684\u65b9\u6cd5\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528\u6784\u9020\u51fd\u6570\u6765\u521b\u5efa\u7c7b\u7684\u65b0\u5b9e\u4f8b\u3002\u6211\u4eec\u5df2\u7ecf\u5b66\u4e60\u4e86\u5982\u4f55\u83b7\u53d6\u6240\u6709\u7684\u516c\u5171\u6784\u9020\u51fd\u6570\u3002<\/p>\n<h3>\u83b7\u53d6\u516c\u5171\u6784\u9020\u51fd\u6570\u3002<\/h3>\n<p>\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u7c7b\u5bf9\u8c61\u7684getConstructor()\u65b9\u6cd5\u6765\u83b7\u53d6\u7279\u5b9a\u7684\u516c\u5171\u6784\u9020\u51fd\u6570\u3002\u4e0b\u9762\u7684\u793a\u4f8b\u5c55\u793a\u4e86\u5982\u4f55\u83b7\u53d6\u4e0a\u9762\u5b9a\u4e49\u7684ConcreteClass\u7684\u6784\u9020\u51fd\u6570\u4ee5\u53caHashMap\u7684\u65e0\u53c2\u6784\u9020\u51fd\u6570\u3002\u5b83\u8fd8\u5c55\u793a\u4e86\u5982\u4f55\u83b7\u53d6\u6784\u9020\u51fd\u6570\u7684\u53c2\u6570\u7c7b\u578b\u6570\u7ec4\u3002<\/p>\n<pre class=\"post-pre\"><code>Constructor&lt;?&gt; constructor = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getConstructor(int.class);\r\n\/\/getting constructor parameters\r\nSystem.out.println(Arrays.toString(constructor.getParameterTypes())); \/\/ prints \"[int]\"\r\n\t\t\r\nConstructor&lt;?&gt; hashMapConstructor = Class.forName(\"java.util.HashMap\").getConstructor(null);\r\nSystem.out.println(Arrays.toString(hashMapConstructor.getParameterTypes())); \/\/ prints \"[]\"\r\n<\/code><\/pre>\n<h3>\u4f7f\u7528\u6784\u9020\u51fd\u6570\u5b9e\u4f8b\u5316\u5bf9\u8c61<\/h3>\n<p>\u6211\u4eec\u53ef\u4ee5\u5728\u6784\u9020\u51fd\u6570\u5bf9\u8c61\u4e0a\u4f7f\u7528newInstance()\u65b9\u6cd5\u6765\u5b9e\u4f8b\u5316\u7c7b\u7684\u65b0\u5b9e\u4f8b\u3002\u7531\u4e8e\u5728\u7f16\u8bd1\u65f6\u6ca1\u6709\u7c7b\u7684\u4fe1\u606f\u65f6\u6211\u4eec\u4f7f\u7528\u53cd\u5c04\uff0c\u56e0\u6b64\u53ef\u4ee5\u5c06\u5176\u8d4b\u7ed9Object\uff0c\u7136\u540e\u8fdb\u4e00\u6b65\u4f7f\u7528\u53cd\u5c04\u6765\u8bbf\u95ee\u5176\u5b57\u6bb5\u548c\u8c03\u7528\u5176\u65b9\u6cd5\u3002<\/p>\n<pre class=\"post-pre\"><code>Constructor&lt;?&gt; constructor = Class.forName(\"com.Olivia.reflection.ConcreteClass\").getConstructor(int.class);\r\n\/\/getting constructor parameters\r\nSystem.out.println(Arrays.toString(constructor.getParameterTypes())); \/\/ prints \"[int]\"\r\n\t\t\r\nObject myObj = constructor.newInstance(10);\r\nMethod myObjMethod = myObj.getClass().getMethod(\"method1\", null);\r\nmyObjMethod.invoke(myObj, null); \/\/prints \"Method1 impl.\"\r\n\r\nConstructor&lt;?&gt; hashMapConstructor = Class.forName(\"java.util.HashMap\").getConstructor(null);\r\nSystem.out.println(Arrays.toString(hashMapConstructor.getParameterTypes())); \/\/ prints \"[]\"\r\nHashMap&lt;String,String&gt; myMap = (HashMap&lt;String,String&gt;) hashMapConstructor.newInstance(null);\r\n<\/code><\/pre>\n<ol>\u6279\u6ce8\u7684\u53cd\u601d<\/ol>\n<p>Java 1.5\u5f15\u5165\u4e86\u6ce8\u89e3\uff08Annotations\uff09\u7684\u6982\u5ff5\uff0c\u7528\u4e8e\u63d0\u4f9b\u7c7b\u3001\u65b9\u6cd5\u6216\u5b57\u6bb5\u7684\u5143\u6570\u636e\u4fe1\u606f\u3002\u73b0\u5728\u5728Spring\u548cHibernate\u7b49\u6846\u67b6\u4e2d\u5e7f\u6cdb\u4f7f\u7528\u6ce8\u89e3\u3002\u53cd\u5c04API\u4e5f\u8fdb\u884c\u4e86\u6269\u5c55\uff0c\u4ee5\u652f\u6301\u5728\u8fd0\u884c\u65f6\u5206\u6790\u6ce8\u89e3\u3002\u4f7f\u7528\u53cd\u5c04API\uff0c\u6211\u4eec\u53ef\u4ee5\u5206\u6790\u4fdd\u7559\u7b56\u7565\u4e3a\u8fd0\u884c\u65f6\uff08Runtime\uff09\u7684\u6ce8\u89e3\u3002\u6211\u5df2\u7ecf\u5199\u4e86\u4e00\u4efd\u5173\u4e8e\u6ce8\u89e3\u4ee5\u53ca\u5982\u4f55\u4f7f\u7528\u53cd\u5c04API\u89e3\u6790\u6ce8\u89e3\u7684\u8be6\u7ec6\u6559\u7a0b\uff0c\u5efa\u8bae\u60a8\u67e5\u770bJava\u6ce8\u89e3\u6559\u7a0b\u3002\u4ee5\u4e0a\u5c31\u662f\u5173\u4e8eJava\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b\u7684\u5168\u90e8\u5185\u5bb9\u4e86\uff0c\u5e0c\u671b\u60a8\u559c\u6b22\u8fd9\u7bc7\u6559\u7a0b\uff0c\u5e76\u7406\u89e3Java\u53cd\u5c04API\u7684\u91cd\u8981\u6027\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java\u53cd\u5c04\u63d0\u4f9b\u4e86\u68c0\u67e5\u548c\u4fee\u6539\u5e94\u7528\u7a0b\u5e8f\u8fd0\u884c\u884c\u4e3a\u7684\u80fd\u529b\u3002Java\u4e2d\u7684\u53cd\u5c04\u662f\u6838\u5fc3Java\u4e2d\u7684\u4e00\u4e2a\u9ad8\u7ea7\u4e3b\u9898\u3002\u4f7f\u7528Jav [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-50737","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b\" \/>\n<meta property=\"og:description\" content=\"Java\u53cd\u5c04\u63d0\u4f9b\u4e86\u68c0\u67e5\u548c\u4fee\u6539\u5e94\u7528\u7a0b\u5e8f\u8fd0\u884c\u884c\u4e3a\u7684\u80fd\u529b\u3002Java\u4e2d\u7684\u53cd\u5c04\u662f\u6838\u5fc3Java\u4e2d\u7684\u4e00\u4e2a\u9ad8\u7ea7\u4e3b\u9898\u3002\u4f7f\u7528Jav [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-23T02:31:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-23T07:28:37+00:00\" \/>\n<meta name=\"author\" content=\"\u65b0, \u97f5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u65b0, \u97f5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/\",\"name\":\"Java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-12-23T02:31:40+00:00\",\"dateModified\":\"2023-12-23T07:28:37+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\",\"name\":\"\u65b0, \u97f5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"caption\":\"\u65b0, \u97f5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b\/","og_locale":"zh_CN","og_type":"article","og_title":"Java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b","og_description":"Java\u53cd\u5c04\u63d0\u4f9b\u4e86\u68c0\u67e5\u548c\u4fee\u6539\u5e94\u7528\u7a0b\u5e8f\u8fd0\u884c\u884c\u4e3a\u7684\u80fd\u529b\u3002Java\u4e2d\u7684\u53cd\u5c04\u662f\u6838\u5fc3Java\u4e2d\u7684\u4e00\u4e2a\u9ad8\u7ea7\u4e3b\u9898\u3002\u4f7f\u7528Jav [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-12-23T02:31:40+00:00","article_modified_time":"2023-12-23T07:28:37+00:00","author":"\u65b0, \u97f5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u65b0, \u97f5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"2 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/","name":"Java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-12-23T02:31:40+00:00","dateModified":"2023-12-23T07:28:37+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"Java\u53cd\u5c04\u793a\u4f8b\u6559\u7a0b"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9","name":"\u65b0, \u97f5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","caption":"\u65b0, \u97f5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/java%e5%8f%8d%e5%b0%84%e7%a4%ba%e4%be%8b%e6%95%99%e7%a8%8b\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50737","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=50737"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50737\/revisions"}],"predecessor-version":[{"id":50793,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50737\/revisions\/50793"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=50737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=50737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=50737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}