﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-天下-随笔分类-Java</title><link>http://www.cppblog.com/aaxron/category/20407.html</link><description>记录修行的印记
</description><language>zh-cn</language><lastBuildDate>Fri, 03 Jan 2020 02:50:31 GMT</lastBuildDate><pubDate>Fri, 03 Jan 2020 02:50:31 GMT</pubDate><ttl>60</ttl><item><title>2、Pass a string to/from Java to/from CTag(s): JNI</title><link>http://www.cppblog.com/aaxron/archive/2019/12/06/217014.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 06 Dec 2019 02:53:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2019/12/06/217014.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/217014.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2019/12/06/217014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/217014.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/217014.html</trackback:ping><description><![CDATA[<div>Pass a string to/from Java to/from CTag(s): JNI</div><div>To Java from C (as seen from the previous How-to) :<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;"JavaHowTo.h"&nbsp;<br /><br />JNIEXPORT&nbsp;jstring&nbsp;JNICALL&nbsp;Java_JavaHowTo_sayHello<br />&nbsp;&nbsp;(JNIEnv&nbsp;*env,&nbsp;jobject&nbsp;obj)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;&nbsp;env-&gt;NewStringUTF("Hello&nbsp;world");<br />}<br />From&nbsp;Java&nbsp;to&nbsp;C&nbsp;:&nbsp;Suppose&nbsp;we&nbsp;have&nbsp;a&nbsp;Java&nbsp;Class<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MyClass&nbsp;{<br />&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;sayHello(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;&nbsp;"Hello&nbsp;world&nbsp;From&nbsp;Java";<br />&nbsp;&nbsp;}<br />}</div><div>then from C, we want to call the Java sayHello() method which returns a String :</div><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->JNIEXPORT&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;JNICALL&nbsp;Java_JavaHowTo_sayHello(JNIEnv&nbsp;*env,&nbsp;jobject&nbsp;obj)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*str;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;jclass&nbsp;myclass_class&nbsp;=(jclass)&nbsp;env-&gt;NewGlobalRef&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(env-&gt;FindClass&nbsp;("MyClass"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;we&nbsp;need&nbsp;the&nbsp;MyClass&nbsp;constructor&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;jmethodID&nbsp;constructorID&nbsp;=&nbsp;env-&gt;GetMethodID<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(myclass_class,&nbsp;"",&nbsp;"()V");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;and&nbsp;the&nbsp;sayHello()&nbsp;method</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;jmethodID&nbsp;methodID&nbsp;=&nbsp;env-&gt;GetMethodID<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(myclass_class,&nbsp;"sayHello",&nbsp;"()Ljava/lang/String;");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;instanciate&nbsp;a&nbsp;MyClass&nbsp;object</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;jobject&nbsp;myclass_object&nbsp;=&nbsp;&nbsp;env-&gt;NewObject<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(myclass_class,&nbsp;constructorID);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;call&nbsp;the&nbsp;sayHello()&nbsp;method</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;jstring&nbsp;s&nbsp;=&nbsp;(jstring)&nbsp;&nbsp;env-&gt;CallObjectMethod<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(myclass_object,&nbsp;methodID);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;convert&nbsp;the&nbsp;Java&nbsp;String&nbsp;to&nbsp;use&nbsp;it&nbsp;in&nbsp;C</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;env-&gt;GetStringUTFChars(s,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("%s"&nbsp;,&nbsp;str);<br />&nbsp;&nbsp;&nbsp;&nbsp;env-&gt;ReleaseStringUTFChars(s,&nbsp;str);&nbsp;&nbsp;<br />}</div><br /><div>The Java JNI wrapper would be</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">class</span>&nbsp;JavaHowTo&nbsp;{<br />&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">native</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;sayHello();<br />&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;System.loadLibrary("javahowto");&nbsp;<br />&nbsp;&nbsp;}<br />}</div><div>And finally, to use it</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;JNIJavaHowTo&nbsp;{<br />&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;JavaHowTo&nbsp;jht&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;JavaHowTo();<br />&nbsp;&nbsp;&nbsp;&nbsp;jht.sayHello();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><br /><br /><br /><br /><br /><br /><br /></div><img src ="http://www.cppblog.com/aaxron/aggbug/217014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2019-12-06 10:53 <a href="http://www.cppblog.com/aaxron/archive/2019/12/06/217014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>1、Use native code through JNI (HelloWorld)</title><link>http://www.cppblog.com/aaxron/archive/2019/12/06/217013.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 06 Dec 2019 02:50:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2019/12/06/217013.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/217013.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2019/12/06/217013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/217013.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/217013.html</trackback:ping><description><![CDATA[<p style="margin:0in;font-family:微软雅黑;font-size:10.5pt"><a href="https://www.rgagnon.com/topics/java-jni.html">https://www.rgagnon.com/topics/java-jni.html</a></p>  <p style="margin:0in;font-family:微软雅黑;font-size:10.5pt">&nbsp;</p>  <p style="margin:0in;font-family:微软雅黑;font-size:10.5pt">Use native code through JNI (HelloWorld)</p>  <p style="margin:0in;font-family:微软雅黑;font-size:10.5pt">Use native code through JNITag(s): JNI</p>  <p style="margin:0in;font-family:微软雅黑;font-size:10.5pt">With MSVC6, create a new Win32 DLL project (simple) and call it javahowto.</p>  <span style="font-family: 微软雅黑; font-size: 10.5pt;">In the same directory create a java source called JavaHowTo.java</span>&nbsp;<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">class</span>&nbsp;JavaHowTo&nbsp;{<br />&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">native</span>&nbsp;String&nbsp;sayHello();<br />&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;System.loadLibrary("javahowto");&nbsp;<br />&nbsp;&nbsp;}<br />}</div><div>Compile the Java program and use javah utility to generate the JavaHowTo.h header file.</div><div>javah -jni JavaHowTo</div><div>In MSVC6, add the JavaHowTo.h in your project header files</div><div>In the Tools - Options menu, set the include directories to include the Java JNI headers files. They are located in [jdk dir]\include and [jdk dir]\include\win32 directories</div><div>In the javahowto.cpp source, add</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;"JavaHowTo.h"&nbsp;<br /><br />JNIEXPORT&nbsp;jstring&nbsp;JNICALL&nbsp;Java_JavaHowTo_sayHello<br />&nbsp;&nbsp;(JNIEnv&nbsp;*env,&nbsp;jobject&nbsp;obj)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;&nbsp;env-&gt;NewStringUTF("Hello&nbsp;world");<br />}</div><div>Select the Release configuration and build the project.</div><div>Copy the javahowto.dll in the same directory as the java program.</div><div>Create this new java program<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;JNIJavaHowTo&nbsp;{<br />&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;JavaHowTo&nbsp;jht&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;JavaHowTo();<br />&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(jht.sayHello());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div></div><div>Compile and execute.</div><br /><br /><br /><br /><br /><img src ="http://www.cppblog.com/aaxron/aggbug/217013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2019-12-06 10:50 <a href="http://www.cppblog.com/aaxron/archive/2019/12/06/217013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring 官方下载地址（Spring Framework 3.2.x&amp;Spring Framework 4.0.x）</title><link>http://www.cppblog.com/aaxron/archive/2019/02/12/216238.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 12 Feb 2019 03:44:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2019/02/12/216238.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/216238.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2019/02/12/216238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/216238.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/216238.html</trackback:ping><description><![CDATA[<p>spring 官方下载地址（Spring Framework 3.2.x&amp;Spring Framework 4.0.x）<br />2017年02月24日 15:53:59 </p>
<p>SPRING官方网站改版后，建议都是通过 Maven和Gradle下载，对不使用Maven和Gradle开发项目的，下载就非常麻烦，下给出Spring Framework jar官方直接下载路径:</p>
<p><a href="http://repo.spring.io/libs-release-local/org/springframework/spring/">http://repo.spring.io/libs-release-local/org/springframework/spring/</a></p>
<p>&nbsp;</p>
<p>spring 4.0.x(Spring Framework 4.0.5)下载</p>
<p><a href="http://repo.spring.io/libs-release-local/org/springframework/spring/4.0.5.RELEASE/spring-framework-4.0.5.RELEASE-dist.zip">http://repo.spring.io/libs-release-local/org/springframework/spring/4.0.5.RELEASE/spring-framework-4.0.5.RELEASE-dist.zip</a></p>
<p>&nbsp;</p>
<p>spring 3.2.x（Spring Framework 3.2.9）下载：</p>
<p><a href="http://repo.spring.io/libs-release-local/org/springframework/spring/3.2.9.RELEASE/spring-framework-3.2.9.RELEASE-dist.zip">http://repo.spring.io/libs-release-local/org/springframework/spring/3.2.9.RELEASE/spring-framework-3.2.9.RELEASE-dist.zip</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>spring 3.2.x（Spring Framework 3.2.4）下载：</p>
<p><a href="http://repo.springsource.org/libs-release-local/org/springframework/spring/3.2.4.RELEASE/spring-framework-3.2.4.RELEASE-dist.zip">http://repo.springsource.org/libs-release-local/org/springframework/spring/3.2.4.RELEASE/spring-framework-3.2.4.RELEASE-dist.zip</a></p>
<p><br />&nbsp;</p>
<p>另spring security下载路径：</p>
<p><a href="http://repo.spring.io/libs-release-local/org/springframework/security/spring-security/">http://repo.spring.io/libs-release-local/org/springframework/security/spring-security/</a></p>
<p><a href="http://repo.spring.io/libs-release-local/org/springframework/security/spring-security/3.2.4.RELEASE/spring-security-3.2.4.RELEASE-dist.zip">http://repo.spring.io/libs-release-local/org/springframework/security/spring-security/3.2.4.RELEASE/spring-security-3.2.4.RELEASE-dist.zip</a></p><img src ="http://www.cppblog.com/aaxron/aggbug/216238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2019-02-12 11:44 <a href="http://www.cppblog.com/aaxron/archive/2019/02/12/216238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring源码分析（2）AnnotationMethodHandlerAdapter</title><link>http://www.cppblog.com/aaxron/archive/2018/04/11/215585.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 11 Apr 2018 08:40:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2018/04/11/215585.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/215585.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2018/04/11/215585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/215585.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/215585.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; width: 98%; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AnnotationMethodHandlerAdapter&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;WebContentGenerator<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;HandlerAdapter,&nbsp;Ordered,&nbsp;BeanFactoryAware&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span style="color: #008000"><br /></span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ModelAndView&nbsp;handle(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response,&nbsp;Object&nbsp;handler)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;invokeHandlerMethod(request,&nbsp;response,&nbsp;handler);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;ModelAndView&nbsp;invokeHandlerMethod(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response,&nbsp;Object&nbsp;handler)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletHandlerMethodResolver&nbsp;methodResolver&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getMethodResolver(handler);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;handlerMethod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;methodResolver.resolveHandlerMethod(request);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletHandlerMethodInvoker&nbsp;methodInvoker&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ServletHandlerMethodInvoker(methodResolver);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletWebRequest&nbsp;webRequest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ServletWebRequest(request,&nbsp;response);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExtendedModelMap&nbsp;implicitModel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BindingAwareModelMap();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;methodInvoker.invokeHandlerMethod(handlerMethod,&nbsp;handler,&nbsp;webRequest,&nbsp;implicitModel);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ModelAndView&nbsp;mav&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;methodInvoker.getModelAndView(handlerMethod,&nbsp;handler.getClass(),&nbsp;result,&nbsp;implicitModel,&nbsp;webRequest);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;methodInvoker.updateModelAttributes(handler,&nbsp;(mav&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;mav.getModel()&nbsp;:&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">),&nbsp;implicitModel,&nbsp;webRequest);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;mav;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ModelAndView&nbsp;getModelAndView(Method&nbsp;handlerMethod,&nbsp;Class</span><span style="color: #000000">&lt;?&gt;</span><span style="color: #000000">&nbsp;handlerType,&nbsp;Object&nbsp;returnValue,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExtendedModelMap&nbsp;implicitModel,&nbsp;ServletWebRequest&nbsp;webRequest)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{}<br />}<br /></span></div><br /><br />其他
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; width: 98%; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Method&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Executable&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;invoke(Object&nbsp;obj,&nbsp;Object<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;IllegalAccessException,&nbsp;IllegalArgumentException,InvocationTargetException<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">override)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">Reflection.quickCheckMemberAccess(clazz,&nbsp;modifiers))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class</span><span style="color: #000000">&lt;?&gt;</span><span style="color: #000000">&nbsp;caller&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Reflection.getCallerClass();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkAccess(caller,&nbsp;clazz,&nbsp;obj,&nbsp;modifiers);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MethodAccessor&nbsp;ma&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;methodAccessor;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;read&nbsp;volatile</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ma&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ma&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;acquireMethodAccessor();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;ma.invoke(obj,&nbsp;args);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ModelMap&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;LinkedHashMap</span><span style="color: #000000">&lt;</span><span style="color: #000000">String,&nbsp;Object</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;{}<br /><br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AbstractView&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;WebApplicationObjectSupport&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;View,&nbsp;BeanNameAware&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Prepares&nbsp;the&nbsp;view&nbsp;given&nbsp;the&nbsp;specified&nbsp;model,&nbsp;merging&nbsp;it&nbsp;with&nbsp;static<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;attributes&nbsp;and&nbsp;a&nbsp;RequestContext&nbsp;attribute,&nbsp;if&nbsp;necessary.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Delegates&nbsp;to&nbsp;renderMergedOutputModel&nbsp;for&nbsp;the&nbsp;actual&nbsp;rendering.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@see</span><span style="color: #008000">&nbsp;#renderMergedOutputModel<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;render(Map</span><span style="color: #000000">&lt;</span><span style="color: #000000">String,&nbsp;</span><span style="color: #000000">?&gt;</span><span style="color: #000000">&nbsp;model,&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(logger.isTraceEnabled())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.trace(</span><span style="color: #000000">"</span><span style="color: #000000">Rendering&nbsp;view&nbsp;with&nbsp;name&nbsp;'</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.beanName&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">'&nbsp;with&nbsp;model&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;model&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;and&nbsp;static&nbsp;attributes&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.staticAttributes);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map</span><span style="color: #000000">&lt;</span><span style="color: #000000">String,&nbsp;Object</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;mergedModel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;createMergedOutputModel(model,&nbsp;request,&nbsp;response);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prepareResponse(request,&nbsp;response);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;renderMergedOutputModel(mergedModel,&nbsp;getRequestToExpose(request),&nbsp;response);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div>代码：<br /><img src ="http://www.cppblog.com/aaxron/aggbug/215585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2018-04-11 16:40 <a href="http://www.cppblog.com/aaxron/archive/2018/04/11/215585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring源码分析（1）DispatcherServlet</title><link>http://www.cppblog.com/aaxron/archive/2018/04/11/215584.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 11 Apr 2018 08:39:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2018/04/11/215584.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/215584.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2018/04/11/215584.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/215584.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/215584.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; width: 98%; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;DispatcherServlet&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;FrameworkServlet&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">HandlerMapping</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;handlerMappings;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doService(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doDispatch(request,&nbsp;response);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doDispatch(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;processedRequest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HandlerExecutionChain&nbsp;mappedHandler&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;multipartRequestParsed&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ModelAndView&nbsp;mv&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exception&nbsp;dispatchException&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processedRequest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;checkMultipart(request);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multipartRequestParsed&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(processedRequest&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;request);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Determine&nbsp;handler&nbsp;for&nbsp;the&nbsp;current&nbsp;request.&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">映射处理器</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mappedHandler&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getHandler(processedRequest);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">HandlerExecutionChain</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(mappedHandler&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;mappedHandler.getHandler()&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;noHandlerFound(processedRequest,&nbsp;response);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Determine&nbsp;handler&nbsp;adapter&nbsp;for&nbsp;the&nbsp;current&nbsp;request.&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">适配处理器</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HandlerAdapter&nbsp;ha&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getHandlerAdapter(mappedHandler.getHandler());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">mappedHandler.applyPreHandle(processedRequest,&nbsp;response))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Actually&nbsp;invoke&nbsp;the&nbsp;handler.&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mv&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ha.handle(processedRequest,&nbsp;response,&nbsp;mappedHandler.getHandler());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;applyDefaultViewName(processedRequest,&nbsp;mv);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mappedHandler.applyPostHandle(processedRequest,&nbsp;response,&nbsp;mv);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">渲染视图</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processDispatchResult(processedRequest,&nbsp;response,&nbsp;mappedHandler,&nbsp;mv,&nbsp;dispatchException);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;triggerAfterCompletion(processedRequest,&nbsp;response,&nbsp;mappedHandler,&nbsp;ex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">finally</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;processDispatchResult(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HandlerExecutionChain&nbsp;mappedHandler,&nbsp;ModelAndView&nbsp;mv,&nbsp;Exception&nbsp;exception)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Did&nbsp;the&nbsp;handler&nbsp;return&nbsp;a&nbsp;view&nbsp;to&nbsp;render?</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(mv&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">mv.wasCleared())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;render(mv,&nbsp;request,&nbsp;response);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(logger.isDebugEnabled())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(</span><span style="color: #000000">"</span><span style="color: #000000">Null&nbsp;ModelAndView&nbsp;returned&nbsp;to&nbsp;DispatcherServlet&nbsp;with&nbsp;name&nbsp;'</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;getServletName()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">':&nbsp;assuming&nbsp;HandlerAdapter&nbsp;completed&nbsp;request&nbsp;handling</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(mappedHandler&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mappedHandler.triggerAfterCompletion(request,&nbsp;response,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;render(ModelAndView&nbsp;mv,&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Determine&nbsp;locale&nbsp;for&nbsp;request&nbsp;and&nbsp;apply&nbsp;it&nbsp;to&nbsp;the&nbsp;response.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Locale&nbsp;locale&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.localeResolver.resolveLocale(request);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setLocale(locale);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;view;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(mv.isReference())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;We&nbsp;need&nbsp;to&nbsp;resolve&nbsp;the&nbsp;view&nbsp;name.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;resolveViewName(mv.getViewName(),&nbsp;mv.getModelInternal(),&nbsp;locale,&nbsp;request);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(view&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ServletException(</span><span style="color: #000000">"</span><span style="color: #000000">Could&nbsp;not&nbsp;resolve&nbsp;view&nbsp;with&nbsp;name&nbsp;'</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;mv.getViewName()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">'&nbsp;in&nbsp;servlet&nbsp;with&nbsp;name&nbsp;'</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;getServletName()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">'</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;No&nbsp;need&nbsp;to&nbsp;lookup:&nbsp;the&nbsp;ModelAndView&nbsp;object&nbsp;contains&nbsp;the&nbsp;actual&nbsp;View&nbsp;object.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mv.getView();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(view&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ServletException(</span><span style="color: #000000">"</span><span style="color: #000000">ModelAndView&nbsp;[</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;mv&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">]&nbsp;neither&nbsp;contains&nbsp;a&nbsp;view&nbsp;name&nbsp;nor&nbsp;a&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">View&nbsp;object&nbsp;in&nbsp;servlet&nbsp;with&nbsp;name&nbsp;'</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;getServletName()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">'</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Delegate&nbsp;to&nbsp;the&nbsp;View&nbsp;object&nbsp;for&nbsp;rendering.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(logger.isDebugEnabled())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(</span><span style="color: #000000">"</span><span style="color: #000000">Rendering&nbsp;view&nbsp;[</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;view&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">]&nbsp;in&nbsp;DispatcherServlet&nbsp;with&nbsp;name&nbsp;'</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;getServletName()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">'</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view.render(mv.getModelInternal(),&nbsp;request,&nbsp;response);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(</span><span style="color: #000000">"</span><span style="color: #000000">Error&nbsp;rendering&nbsp;view&nbsp;[</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;view&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">]&nbsp;in&nbsp;DispatcherServlet&nbsp;with&nbsp;name&nbsp;'</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;getServletName()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">'</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;ex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;ex;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/215584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2018-04-11 16:39 <a href="http://www.cppblog.com/aaxron/archive/2018/04/11/215584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AutoCloseable,Closeable和Flushable接口</title><link>http://www.cppblog.com/aaxron/archive/2015/12/04/212411.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 04 Dec 2015 06:50:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/12/04/212411.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212411.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/12/04/212411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212411.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212411.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->探究java&nbsp;IO之AutoCloseable,Closeable和Flushable接口<br />java-io与网络编程<br /><br />有3个接口对于流类相当重要。其中两个接口是Closeable和Flushable，它们是在java.io包中定义的，并且是由JDK5添加的。第3个接口是AutoColseable，它是由JDK7添加的新接口，被打包到java.lang包中。<br /><br />AutoCloseable接口对JDK7新添加的带资源的try语句提供了支持，这种try语句可以自动执行资源关闭过程。只有实现了AutoCloseable接口的类的对象才可以由带资源的try语句进行管理。AutoCloseable接口只定义了close()方法：<br /><span style="color: #0000FF; ">void</span>&nbsp;close()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Exception<br />这个方法关闭调用对象，释放可能占用的所有资源。在带资源的try语句的末尾，会自动调用该方法，因此消除了显式调用close()方法的需要。<br /><br />Closeable接口也定义了close()方法。实现了Closeable接口的类的对象可以被关闭。从JDK7开始，Closeable扩展了AutoCloseable。因此，在JDK7中，所有实现了Closeable接口的类也都实现了AutoCloseable接口。<br /><br />实现了Flushable接口的类的对象，可以强制将缓存的输出写入到与对象关联的流中。该接口定义了flush()方法，如下所示：<br /><span style="color: #0000FF; ">void</span>&nbsp;flush()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException<br />刷新流通常会导致缓存的输出被物理地写入到底层设备中。写入流的所有I/O类都实现了Flushable接口。<br /><br />注：关于带资源的try语句的3个关键点：<br /><br />由带资源的try语句管理的资源必须是实现了AutoCloseable接口的类的对象。<br /><br />在try代码中声明的资源被隐式声明为fianl。<br /><br />通过使用分号分隔每个声明可以管理多个资源。<br /><br />此外请记住，所声明资源的作用域被限制在带资源的try语句中。带资源的try语句的主要优点是：当try代码块结束时，资源（在此时流）会被自动关闭。因此，不太可能会忘记关闭流。使有带资源的try语句，通常可以使源代码更短，更清晰，更容易维护。如例：<br /><br /><span style="color: #0000FF; ">package</span>&nbsp;io;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.BufferedReader;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.File;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.FileInputStream;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.IOException;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.InputStreamReader;<br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;InputStreamReaderTest&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>(BufferedReader&nbsp;reader&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;BufferedReader(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;InputStreamReader(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;FileInputStream(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;File("/home/fuhd/text")),"UTF8"),1024)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(reader.readLine());&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">这里直接读一行</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>(IOException&nbsp;e){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><img src ="http://www.cppblog.com/aaxron/aggbug/212411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-12-04 14:50 <a href="http://www.cppblog.com/aaxron/archive/2015/12/04/212411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA通过JNI调用本地dll</title><link>http://www.cppblog.com/aaxron/archive/2015/12/04/212409.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 04 Dec 2015 03:48:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/12/04/212409.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212409.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/12/04/212409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212409.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212409.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="font-size: 14px;">JAVA通过JNI调用本地dll</span>&nbsp;<br /><br />一、JAVA中所需要做的工作&nbsp;<br />Java工程Example01<br />第一步：创建Java类，类名：TestJni&nbsp;在里面定义一个本地方法（用native关键字修饰的方法）<br /><span style="color: #0000FF; ">package</span>&nbsp;NeoWay;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;TestJni&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.loadLibrary("neoway");<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">native</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;sayHello();<br />}<br /><br />第二步：生成javah&nbsp;说需要的.class文件<br />在DOS窗口中进入工程所在的src文件夹:<br />javac&nbsp;NeoWay\TestJni.java<br /><br />第三步：使用javah命令生成本地方法的C++头文件&nbsp;<br />@rem&nbsp;javah&nbsp;包.类<br />javah&nbsp;NeoWay.TestJni&nbsp;&nbsp;<br />在DOS窗口中进入工程所在目录，然后执行javah&nbsp;NeoWay.TestJni命令，执行完之后就会在当前目录生成一个后缀名为.h的头文件<br /><br />第四步：新建VC++的dll工程（附件选项：空项目），工程名为：neoway<br />将相关的路径加入VC++的include<br />C:\Program&nbsp;Files\Java\jdk1.7.0_80\include<br />C:\Program&nbsp;Files\Java\jdk1.7.0_80\include\Win32<br />将生成的NeoWay_TestJni.h引入该VC工程<br /><br />NeoWay_TestJni.h内容如下：<br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;DO&nbsp;NOT&nbsp;EDIT&nbsp;THIS&nbsp;FILE&nbsp;-&nbsp;it&nbsp;is&nbsp;machine&nbsp;generated&nbsp;</span><span style="color: #008000; ">*/</span><br />#include&nbsp;&lt;jni.h&gt;<br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Header&nbsp;for&nbsp;class&nbsp;NeoWay_TestJni&nbsp;</span><span style="color: #008000; ">*/</span><br /><br />#ifndef&nbsp;_Included_NeoWay_TestJni<br />#define&nbsp;_Included_NeoWay_TestJni<br />#ifdef&nbsp;__cplusplus<br />extern&nbsp;"C"&nbsp;{<br />#endif<br /><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;*&nbsp;Class:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NeoWay_TestJni<br />&nbsp;*&nbsp;Method:&nbsp;&nbsp;&nbsp;&nbsp;sayHello<br />&nbsp;*&nbsp;Signature:&nbsp;()V<br />&nbsp;</span><span style="color: #008000; ">*/</span><br />JNIEXPORT&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;JNICALL&nbsp;Java_NeoWay_TestJni_sayHello<br />&nbsp;&nbsp;(JNIEnv&nbsp;*,&nbsp;jclass);<br /><br /><br />#ifdef&nbsp;__cplusplus<br />}<br />#endif<br />#endif<br /><br />新建一个&nbsp;NeoWay_TestJni.cpp，内容如下：<br />#include&nbsp;"NeoWay_TestJni.h"<br />JNIEXPORT&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;JNICALL&nbsp;Java_NeoWay_TestJni_sayHello&nbsp;(JNIEnv&nbsp;*,&nbsp;jclass)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("Java_NeoWay_TestJni_sayHello()&nbsp;Entry\r\n");<br />}<br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">Example01</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">import</span>&nbsp;NeoWay.TestJni;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Example01&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("main()&nbsp;entry()");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestJni.sayHello();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />第五步：测试运行<br />将VC++工程生成neoway.dll拷贝至Java工程Example01目录<br />javac&nbsp;Example01.java<br />java&nbsp;Example01<br /><br />输出：<br />main()&nbsp;entry()<br />Java_NeoWay_TestJni_sayHello()&nbsp;Entry</div><img src ="http://www.cppblog.com/aaxron/aggbug/212409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-12-04 11:48 <a href="http://www.cppblog.com/aaxron/archive/2015/12/04/212409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java线程Example</title><link>http://www.cppblog.com/aaxron/archive/2015/12/03/212398.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 03 Dec 2015 06:07:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/12/03/212398.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212398.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/12/03/212398.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212398.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212398.html</trackback:ping><description><![CDATA[<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000; ">//</span><span style="color: #008000; ">NewThread.java</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">package</span>&nbsp;NewThread;<br />
<br />
<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;NewThread&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;Runnable<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Thread&nbsp;t;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;NewThread(String&nbsp;_name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;_name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Thread(<span style="color: #0000FF; ">this</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;run()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;3;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">有可能被其他线程中断</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(1000);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name+i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</div>
<div>
<br /><br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">import</span>&nbsp;NewThread.NewThread;<br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Example01&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewThread&nbsp;t&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;NewThread("NewThread");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.t.join();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(InterruptedException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("main_thread.join()");&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><br />
</div><img src ="http://www.cppblog.com/aaxron/aggbug/212398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-12-03 14:07 <a href="http://www.cppblog.com/aaxron/archive/2015/12/03/212398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java和C++的不同点</title><link>http://www.cppblog.com/aaxron/archive/2013/03/14/198420.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 14 Mar 2013 07:59:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2013/03/14/198420.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/198420.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2013/03/14/198420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/198420.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/198420.html</trackback:ping><description><![CDATA[<div><span style="font-family: Verdana; font-size: 10pt">Java 定义了 4 种整数类型：byte、short、int 和 long。</span></div>
<div><span style="font-family: Verdana; font-size: 10pt">所有这些类型都是有符号的、正的或负的整数。</span></div>
<div><span style="font-family: Verdana; font-size: 10pt">Java 不支持无符号的、只是正值的整数。许多其他计算机语言同时支持有符号和无符号整数。然而，Java 的设计者觉得无符号整数不是必需的。</span></div>
<div><span style="font-size: 12px"><br /></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">在 Java 中，用于存储字符的数据类型是 char。然而，C/C++程序员要当心：</span></div>
<div><span style="font-family: Verdana; font-size: 10pt">Java 中的 char与 C 或 C++中的 char 是不同的。在 C/C++中，char 的宽度是 8 位。而在 Java 中不是这样的。</span></div>
<div><span style="font-family: Verdana; font-size: 10pt">相反，Java 使用 Unicode 表示字符。为此，Unicode 需要 16 位宽。因此，在 Java 中 char 是 16 位类型。<span style="white-space: pre"> </span></span></div>
<div><span style="font-size: 12px"><br /></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">从 JDK 7 开始，可以使用二进制指定整型字面值。为此，使用 0b 或 0B 作为数值的前缀。</span></div>
<div><span style="font-family: Verdana; font-size: 10pt">从 JDK 7 开始，在整型字面值中还可以嵌入一个或多个下划线。嵌入下划线可以使阅读很大的整数变得更加容易。当编译字面值时，会丢弃下划线。<span style="white-space: pre"> </span></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">int x = 123___456___789;&nbsp;</span></div>
<div><span style="font-family: Verdana; font-size: 10pt">int x = 0b1101_0101_0001_1010;&nbsp;</span></div>
<div><span style="font-size: 12px"><br /></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">Java 中的字符被索引到 Unicode 字符集，它们是可以转换成整数的 16 位值，并且可以使用整数运算符进行操作，例如加和减运算符。字符型字面值使用位于一对单引号中的字符来表示。</span></div>
<div><span style="font-family: Verdana; font-size: 10pt">所有可见的 ASCII 字符都可以直接输入到单引号中，如'a'、'z'以及'@'。对于那些不能直接输入的字符，可以使用转义字符序列输入需要的字符，</span></div>
<div><span style="font-family: Verdana; font-size: 10pt">例如'\"表示单引号、'\n'表示换行符。还有一种以八进制或十六进制直接输入字符值的机制。对于八进制表示法，使用反斜杠后跟三位数字表示，</span></div>
<div><span style="font-family: Verdana; font-size: 10pt">例如'\141'是字母'a'。对于十六进制，先输入&#8220;\u&#8221;，然后是 4 位的十六进制数。</span></div>
<div><span style="font-family: Verdana; font-size: 10pt">例如'\u0061'表示 ISO-Latin-1 字符'a'，因为第一个字节为 0；'\u73b0'是 '现'</span></div>
<div><span style="font-family: Verdana; font-size: 10pt">char c = '\u73b0'; //现</span></div>
<div><span style="white-space: pre; font-size: 12px"></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">无符号右移运算符</span></div>
<div><span style="font-family: Verdana; font-size: 10pt">int i=-8&gt;&gt;&gt;1;</span></div>
<div><span style="font-size: 12px"><br /></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">Java不用goto语句,而是用try-catch-finally异常处理语句来代替goto语句处理出错的功能.</span></div>
<div><span style="white-space: pre; font-size: 12px"></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">Java不支持宏定义,而是使用关键字final来定义常量,在C++中则采用宏定义来实现常量定义,这不得于程序的可读性.<span style="white-space: pre"> </span></span></div>
<div><span style="white-space: pre; font-size: 12px"></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">结构和联合的处理.在C和C++中,结构和联合的所有成员均为公有,这就带来了安全性问题,而在Java中根本就不包含结构和联合,所有的内容都封装在类里面</span></div>
<div><span style="white-space: pre; font-size: 12px"></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">Java不再使用指针.程序员不能直接进行任何指针操作.<span style="white-space: pre"> </span></span></div>
<div><span style="white-space: pre; font-size: 12px"></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">java没有象C++一样的操作符重载机制<span style="white-space: pre"> </span></span></div>
<div><span style="white-space: pre; font-size: 12px"></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">java不管构造函数有无参数,都应该写括号<span style="white-space: pre"> </span></span></div>
<div><span style="white-space: pre; font-size: 12px"></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">java初始化成员变量的方法和C＋＋有很大不同. java允许直接在类内部指定成员变量初始值<span style="white-space: pre"> </span></span></div>
<div><span style="white-space: pre; font-size: 12px"></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">java成员变量的初始化顺序取决于成员变量的声明顺序, 而成员变量的初始化总是早于构造函数的执行.这也和C＋＋有很大不同,C＋＋的成员变量初始化顺序也取决于成员变量的声明顺序,但是,它们只能在构造函数体内,或者在构造函数的初始化列表里进行初始化,而不会先于构造函数<span style="white-space: pre"> </span></span></div>
<div><span style="font-size: 12px"><br /></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">Java程序中所有的对象都是用new操作符建立在内存堆栈上</span></div>
<div><span style="font-size: 12px"><br /></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">Java提供了自动化的垃圾搜集(可以手动触发)。没有析构函式的概念，对 finalize() 的使用是不推荐的</span></div>
<div><span style="font-size: 12px"><br /></span></div>
<div><span style="font-family: Verdana; font-size: 10pt">Java没有函式指标机制。替代的概念是接口，Adapter 和 Listener也是被广泛使用的<br /><br />
<p><font color="#000000" face="Verdana"><span style="font-family: Verdana; font-size: 10pt">Java的继承是面向对象程序设计的关键。在Java中，通过关键字extends继承一个已有的类，被继承的类称为父类(超类，基类)，新的类称为子类(派生类)。在Java中不允许多继承。</span></font></p>
<p><font color="#000000" face="Verdana"><span style="font-family: Verdana; font-size: 10pt">Java中，this通常指当前对象，super则指父类的。</span><br /><br /><span style="font-family: Verdana; font-size: 10pt">Java里面有一个金科玉律：任何public非static函数的调用都是多态的。 所以，super.method()必然调用的是子类的那个版本</span></font></p></span></div><img src ="http://www.cppblog.com/aaxron/aggbug/198420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2013-03-14 15:59 <a href="http://www.cppblog.com/aaxron/archive/2013/03/14/198420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>