﻿<?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>BlogJava-咖啡伴侣-随笔分类-Java</title><link>http://www.blogjava.net/oathleo/category/30445.html</link><description>呆在上海</description><language>zh-cn</language><lastBuildDate>Tue, 24 Sep 2013 22:40:21 GMT</lastBuildDate><pubDate>Tue, 24 Sep 2013 22:40:21 GMT</pubDate><ttl>60</ttl><item><title>java整型数与网络字节序的 byte[] 数组转换关系</title><link>http://www.blogjava.net/oathleo/archive/2013/09/23/404305.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Mon, 23 Sep 2013 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2013/09/23/404305.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/404305.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2013/09/23/404305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/404305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/404305.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 工作项目需要在java和c/c++之间进行socket通信，socket通信是以字节流或者字节包进行的，socket发送方须将数据转换为字节流或者字节包，而接收方则将字节流和字节包再转换回相应的数据类型。如果发送方和接收方都是同种语言，则一般只涉及到字节序的调整。而对于java和c/c++的通信，则情况就要复杂一些，主要是因为java中没有unsigned类型，并且java和c在某些数据类型上的长...&nbsp;&nbsp;<a href='http://www.blogjava.net/oathleo/archive/2013/09/23/404305.html'>阅读全文</a><img src ="http://www.blogjava.net/oathleo/aggbug/404305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2013-09-23 10:02 <a href="http://www.blogjava.net/oathleo/archive/2013/09/23/404305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>URL问题 转</title><link>http://www.blogjava.net/oathleo/archive/2013/05/27/399830.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Mon, 27 May 2013 09:00:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2013/05/27/399830.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/399830.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2013/05/27/399830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/399830.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/399830.html</trackback:ping><description><![CDATA[<p style="margin-right: 0px; margin-left: 0px; padding: 0px; text-indent: 2em; line-height: 23px; color: #444444; font-size: 13px; font-family: 微软雅黑, Verdana; background-color: #ffffff;">Java路径中的空格问题<br />1、 URLTest.class.getResource("/").getPath();<br />&nbsp;&nbsp;&nbsp; URLTest.class.getResource("/").getFile();<br />&nbsp;&nbsp;&nbsp; URLTest.class.getClassLoader().getResource("").getPath();<br />&nbsp;&nbsp;&nbsp; Thread.currentThread().getContextClassLoader().getResource("").getPath();等多种相似方式获得的路径，不能被FileReader()和FileWriter()直接应用，原因是URL对空格，特殊字符(%,#,[]等)和中文进行了编码处理。如果文件中URLTest.class.getResource("/").getPath();必须以"/"开头然后再加文件名，而URLTest.class.getClassLoader().getResource("").getPath();不用加"/"可以直接添加文件名。</p><p style="margin-right: 0px; margin-left: 0px; padding: 0px; text-indent: 2em; line-height: 23px; color: #444444; font-size: 13px; font-family: 微软雅黑, Verdana; background-color: #ffffff;">路径中包含空格时，如果空格变为"%20"有如下处理方法：<br />1)使用repaceAll("%20",' ')替换，但只能解决空格问题，如果路径中包含其他特殊字符和中文就不能解决问题。<br />2)使用URLDecoder.decode(str,"UTF-8")解码，但是只能解决一部分，若路径中含有+，也是不能解决的，原因是URL并不是完全用URLEncoder.encode(str,"UTF-8")编码的,+号被解码后，则变成空格。<br />3)解决所有的问题,用URLTest.class.getClassLoader().getResource("").toURI().getPath();，但是需要处理URISyntaxException异常，比较麻烦一些。</p><p style="margin-right: 0px; margin-left: 0px; padding: 0px; text-indent: 2em; line-height: 23px; color: #444444; font-size: 13px; font-family: 微软雅黑, Verdana; background-color: #ffffff;">2、new URL();的参数可以为正确的URI，或者为URI格式的字符串；若字符串是非完整的URI格式，则创建失败。java.net.URI返回的路径中的空格以&#8220;空格&#8221;的形式出现方法为Thread.currentThread().getContextClassLoader().getResource("").toURI().getPath();但是Thread.currentThread().getContextClassLoader().getResource("").toURI().toString();则会以&#8220;%20&#8221;的形式出现。java.net.URL返回的一切路径中的空格都是以&#8220;%20&#8221;的形式出现。URL/URI返回的路径分隔符都是&#8220;/&#8221;(控制台输出"/")。</p><p style="margin-right: 0px; margin-left: 0px; padding: 0px; text-indent: 2em; line-height: 23px; color: #444444; font-size: 13px; font-family: 微软雅黑, Verdana; background-color: #ffffff;"><br />3、new File(String filePath);接受正确URI格式的参数和带&#8220;空格&#8221;（非%20）的正确相对/绝对字符串路径，否则即使给的路径是正确的也会出现找不到文件的异常。File返回的路径分隔符都为&#8220;\&#8221;(控制台输出"\")，对于存在的文件返回的路径字符串，空格都以"空格"出现，而不存在的路径new出的file，getPath（）返回的路径中的空格，仍是new File(String filePath)的参数中原有的形式，即若filePath中是空格的getPath（）返回的仍是空格，是&#8220;%20&#8221;的仍是&#8220;%20&#8221;。File.toURI() 会将file的路径名中的&#8220;空格&#8221;转化为&#8220;%20&#8221;，然后在路径前加protocol："file:/"，而File.toURL()只会在file路径 前简单的加上protocol："file:/"，而不会将&#8220;空格&#8221;转化为&#8220;%20&#8221;，原来的无论是&#8220;空格&#8221;还是&#8220;%20&#8221;都只会原样保留。</p><p style="margin-right: 0px; margin-left: 0px; padding: 0px; text-indent: 2em; line-height: 23px; color: #444444; font-size: 13px; font-family: 微软雅黑, Verdana; background-color: #ffffff;"><br />实际使用中遇到的问题总结如下：<br />1、相对路径(即相对于当前用户目录的相对路径)均可通过以下方式获得（不论是一般的java项目还是web项目） String relativelyPath=System.getProperty("user.dir"); 对于一般的java项目中的文件是相对于项目的根目录，而对于web项目中的文件路径，可能是服务器的某个路径，同时不同的web服务器也不同 （tomcat是相对于 tomcat安装目录\bin）。为此，个人认为，在web项目中，最好不要使用&#8220;相对于当前用户目录的相对路径&#8221;。然而默认情况下，java.io 包中的类总是根据当前用户目录来分析相对路径名。此目录由系统属性 user.dir 指定，通常是 Java 虚拟机的调用目录。这就是说，在使用java.io包中的类时，最好不要使用相对路径。否则，虽然在SE程序中可能还算正常，但是到了EE程序中，可能会出现问题。</p><p style="margin-right: 0px; margin-left: 0px; padding: 0px; text-indent: 2em; line-height: 23px; color: #444444; font-size: 13px; font-family: 微软雅黑, Verdana; background-color: #ffffff;">2、web项目根目录获取<br />1)建立一个servlet,在其init()方法中添加如下代码<br />ServletContext context = this.getServletContext();&nbsp;<br />String strs = context.getRealPath("/");&nbsp;<br />2）利用httpServletRequest，得到相应的项目路径<br />String pathUrl = request.getSession().getServletContext().getRealPath("/");</p><img src ="http://www.blogjava.net/oathleo/aggbug/399830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2013-05-27 17:00 <a href="http://www.blogjava.net/oathleo/archive/2013/05/27/399830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java打包jar在Eclipse代码提示中方法的参数名称无意义</title><link>http://www.blogjava.net/oathleo/archive/2013/01/17/java_jar_args.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Thu, 17 Jan 2013 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2013/01/17/java_jar_args.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/394335.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2013/01/17/java_jar_args.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/394335.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/394335.html</trackback:ping><description><![CDATA[<div><div>一.Java源码在用Ant脚本打成jar之后，再被调用时，Eclipse代码提示中方法的参数名称是无意义的（arg0、arg1）<br /><br />解决办法：使用ibm/eclipse的编译器<br /><br />二.使用ibm/eclipse的编译器也会有一些方法&nbsp;参数语法提示名称是无意义</div>估计可能是ibm的java编译器的bug，&nbsp;</div> <div><span style="color: red;">只要方法中含有synchronized 代码块 </span><br /><span style="color: red;">就会导致这种情况</span></div> <div>有兴趣的同学可以研究下<br /><br />解决办法：把相应代码块提取到方法，让方法<span style="color: #ff0000;">synchronized</span><br /><br /><br /><br /></div><img src ="http://www.blogjava.net/oathleo/aggbug/394335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2013-01-17 09:39 <a href="http://www.blogjava.net/oathleo/archive/2013/01/17/java_jar_args.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>防止utils类/tool等被实例化</title><link>http://www.blogjava.net/oathleo/archive/2011/12/12/366162.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Mon, 12 Dec 2011 08:57:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2011/12/12/366162.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/366162.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2011/12/12/366162.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/366162.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/366162.html</trackback:ping><description><![CDATA[<div>abstract 该类</div><img src ="http://www.blogjava.net/oathleo/aggbug/366162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2011-12-12 16:57 <a href="http://www.blogjava.net/oathleo/archive/2011/12/12/366162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件系统开发中的数据交换协议</title><link>http://www.blogjava.net/oathleo/archive/2011/05/09/349853.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Mon, 09 May 2011 08:41:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2011/05/09/349853.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/349853.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2011/05/09/349853.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/349853.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/349853.html</trackback:ping><description><![CDATA[<p>在很多地方都有&#8220;数据交换&#8221;这个概念，本文所说的&#8220;数据交换&#8221; 是指在计算机网络中，一个系统把数据传递给另外一个系统。这非常类似于一个人要告诉另外一个人一件事情。</p>
<p>当一个人要把一件事情告诉另外一个人的时候，我们可以通过电话、邮件、短信、IM工具或者当面说的方式来交流。这种方式类似于系统数据交换要通过
tcp、udp、管道等等的方式实现。当两个人交流的时候，我们需要一种共同的语言才能明白对方的意思，同样的，两个系统要交换数据，也需要定义一种双方
都明白的协议，我们称为&#8220;数据交换协议&#8221;。</p>
<h2>数据交换协议</h2>
<p>数据交换协议的目的是让两个系统进行正确的数据交互。所以几乎各种开发语言都提供了方便使用的数据交换功能。比如说使用JAVA语言的开发的系统使
用
MySQL数据库存储数据，就是通过MySQL数据交换协议跟MySQL做数据交换；通过JAVA的RMI可以方便的做跨机器的分布式数据交换，RMI也
就是一种数据交换协议。</p>
<p>一般我们在不同的系统、不同的语言之间交换数据的时候，我们会选择一种通用的交换协议或者自己定义一种容易使用的交换协议。
WebService曾经非常流行， 在Web 2.0时代，轻量级的REST协议又开始受到追捧。那么究竟在我们的系统中应该选择什么样的协议呢？</p>
<h2>如何选择数据交换协议</h2>
<p>选择什么样的协议跟我们的应用场景有很大的关系。我们需要考虑我们开发是否方便、接口是否容易发布、是否需要考虑带宽占用成本、序列化和反序列化的性能、接口协议的扩展性等等。下面我们看下几个比较常用的交换协议实现。
</p>
<table border="1">
    <tbody>
        <tr>
            <td>协议</td>
            <td>实现</td>
            <td>跨语言</td>
            <td>性能</td>
            <td>传输量</td>
            <td>RPC</td>
        </tr>
        <tr>
            <td>xml</td>
            <td>广泛</td>
            <td>几乎所有</td>
            <td>低</td>
            <td>很大</td>
            <td>N（可实现）</td>
        </tr>
        <tr>
            <td>json</td>
            <td>广泛</td>
            <td>大量</td>
            <td>一般</td>
            <td>一般</td>
            <td>N（可实现）</td>
        </tr>
        <tr>
            <td>php serialize</td>
            <td>PHPRPC</td>
            <td>大量</td>
            <td>一般</td>
            <td>一般</td>
            <td>Y</td>
        </tr>
        <tr>
            <td>hessian</td>
            <td>hessian</td>
            <td>大量</td>
            <td>一般</td>
            <td>小</td>
            <td>Y</td>
        </tr>
        <tr>
            <td>thrift</td>
            <td>thrift</td>
            <td>大量</td>
            <td>高</td>
            <td>小</td>
            <td>Y</td>
        </tr>
        <tr>
            <td>protobuf</td>
            <td>protobuf</td>
            <td>大量</td>
            <td>高</td>
            <td>小</td>
            <td>N（可实现）</td>
        </tr>
        <tr>
            <td>ice</td>
            <td>ice</td>
            <td>大量</td>
            <td>高</td>
            <td>小</td>
            <td>Y</td>
        </tr>
        <tr>
            <td>avro</td>
            <td><a target="_self" href="http://avro.apache.org/" title="Apache Avro ">Apache Avro </a></td>
            <td>少量</td>
            <td>高</td>
            <td>小</td>
            <td>Y</td>
        </tr>
        <tr>
            <td>messagepack</td>
            <td><a target="_self" href="http://msgpack.org/" title="messagepack ">messagepack </a>
            </td>
            <td>大量</td>
            <td>高</td>
            <td>小</td>
            <td>Y</td>
        </tr>
    </tbody>
</table>
<p>上面表格列出了一些常用数据交换协议的一些特性的比较。这里并没有比较好坏，只是想说明不同数据交换协议是有区别的，所以我们需要在我们的应用场景中进行选择。</p>
<h3>开放式</h3>
<p>像微博，SNS这种开放平台、对静态html页面提供javascript接口调用的系统都属于这种类型 。这种类型的特点是：</p>
<ul>
    <li>调用方不完全可控，而且是针对公网的，你可能不知道是谁、是什么语言、是什么方式在调用你提供的数据接口；</li>
    <li>接口访问量一般都非常大，要求具有很高的性能和吞吐量；</li>
    <li>需要考虑安全问题，外部提交的数据可能不是合法的。</li>
</ul>
<p>所以在这种情况下，需要考虑数据传输的带宽消耗和数据交换协议的易用性，以及多语言支持程度。以前对于html页面使用的javascript接口
调用一般都使用XML格式，最近几年几乎都转成了json格式了，因为json传输量更小，比XML更加容易使用。
而对于开放平台，由于使用的场景很多，所以需要提供多种交换协议格式。基本上都会提供XML和json。为了提高平台本身的性能和客户端的性能，也可以提
供protobuf这种二进制交换协议并且增加压缩支持，以节省带宽传输和解析的性能消耗。</p>
<h3>内部服务</h3>
<p>对于一个大型系统来说，内部服务的数据交换无处不在。从最基本和常见的数据库数据交换、memcached缓存数据交换、消息队列的数据交换到系统
之间使用的RPC服务框架等等，都可以算作内部服务的数据交换。内部服务的特点是不用考虑防火墙，不对外开放，速度快（基本无带宽成本）。</p>
<p>内部服务的数据交换协议的选择空间非常大，一般需要考虑：</p>
<ul>
    <li>数据交换协议的性能</li>
    <li>是否需要跨语言支持</li>
    <li>数据交换协议的消息体大小</li>
</ul>
<h3>持久化存储</h3>
<p>对于持久化存储来说，每一种数据交换协议其实都可以实现。一般需要根据应用场景考虑：</p>
<ul>
    <li>是否人工可阅读</li>
    <li>存储的空间消耗</li>
    <li>序列化和反序列化的性能</li>
    <li>是否经过压缩</li>
</ul>
<h3>跨语言</h3>
<p>假设我们的网站前端页面展示层使用PHP语言开发，中间业务逻辑使用JAVA语言开发，那么就涉及到跨语言数据交换的问题。只要系统不是单纯的使用一种语言，那么就必须考虑这个问题。事实上，考虑未来的扩展和需求变化问题，也最好考虑跨语言的数据交互协议。</p>
<h3>数据交换协议可升级</h3>
<p>在选择数据交换协议的时候，我们同样需要考虑类似于数据库表的?schema设计时的扩展问题。比如一个提供用户信息的数据交换协议接口，现在包含
用户名、性别、住址的信息，在升级过程中，增加了一个最后登录的IP信息。如果不考虑数据交换协议升级带来的影响，很可能会导致以前的客户端出现异常或者
旧的数据无法正确解析的问题。</p>
<h3>兼容协议的巧用</h3>
<p>兼容协议的巧用非常有用，新产品兼容提供现有成熟的数据交换协议，可以降低使用门槛和产品的开发速度。比如新浪开源的<a href="http://memcachedb.org/memcacheq/">memcacheQ</a>就使用了memcached协议。</p>
<h3>总结</h3>
<p>数据交换协议的各种通用开源实现非常多，数据交换协议只是一个非常宽泛的说法，其实只要实现了数据的序列化和反序列化
，那么就可以说是一个可以交换数据的协议。数据交换协议的性能其实就是序列化和反序列化的性能，如果加上RPC，那么跟RPC实现本身的性能也有非常大的
关系。</p>
<img src ="http://www.blogjava.net/oathleo/aggbug/349853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2011-05-09 16:41 <a href="http://www.blogjava.net/oathleo/archive/2011/05/09/349853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 执行脚本语言javascript - javascrip 操作 java对象</title><link>http://www.blogjava.net/oathleo/archive/2010/06/30/javascrip_java.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Wed, 30 Jun 2010 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2010/06/30/javascrip_java.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/324910.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2010/06/30/javascrip_java.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/324910.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/324910.html</trackback:ping><description><![CDATA[应用：javax.script 包<br />
<br />
javascrip 操作 java对象。<br />
<br />
GEllipse ellipse = new GEllipse();//自定义java对象<br />
//添加上下文绑定数据<br />
SimpleBindings bindings = new SimpleBindings();<br />
bindings.put("ellipse", ellipse);<br />
ScriptEngine engine = sem.getEngineByExtension("js");<br />
engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);<br />
try{<br />
&nbsp;&nbsp;&nbsp;&nbsp; engine.eval(" ellipse.setX(101);");//脚本里设置自定义java对象对象属性<br />
&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(ellipse.getX());//输出101，测试OK<br />
}catch(Exception ex){<br />
&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br />
}<br />
<img src ="http://www.blogjava.net/oathleo/aggbug/324910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2010-06-30 17:09 <a href="http://www.blogjava.net/oathleo/archive/2010/06/30/javascrip_java.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java执行脚本语言javascript</title><link>http://www.blogjava.net/oathleo/archive/2010/06/03/322622.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Thu, 03 Jun 2010 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2010/06/03/322622.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/322622.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2010/06/03/322622.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/322622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/322622.html</trackback:ping><description><![CDATA[version jdk1.6<br />
<br />
很早就听说了这个功能一直没仔细看看，尝试了下 功能不错！<br />
<br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ScriptEngineManager sem = new ScriptEngineManager();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //添加上下文绑定数据<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SimpleBindings bindings = new SimpleBindings();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bindings.put("aaa_av", new Double(10000.1));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bindings.put("bbb_av", new Double(20000.2));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ScriptEngine engine = sem.getEngineByExtension("js");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //直接解析<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Object res = engine.eval(" res =&nbsp; Math.max(aaa_av , bbb_av) + aaa_av");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(res);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //创建脚本<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String script = "function getMax() "<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + "{ return Math.max(aaa_av , bbb_av)}";<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //执行脚本<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; engine.eval(script);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Invocable inv = (Invocable) engine;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //执行方法并传递参数<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Object obj = inv.invokeFunction("getMax", null);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //打印结果<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(obj);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }catch(Exception ex){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
<img src ="http://www.blogjava.net/oathleo/aggbug/322622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2010-06-03 15:04 <a href="http://www.blogjava.net/oathleo/archive/2010/06/03/322622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hash code</title><link>http://www.blogjava.net/oathleo/archive/2010/03/03/314415.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Wed, 03 Mar 2010 08:03:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2010/03/03/314415.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/314415.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2010/03/03/314415.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/314415.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/314415.html</trackback:ping><description><![CDATA[<strong>如果两个对象equal，那么它们的hashCode值一定要相同；2、如果两个对象的hashCode相同，它们并不一定equal</strong><br />
<br />
当Set要添加新的元素时，先调用这个元素的hashCode方法，就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素，它就可以直接存储在
这个位置上，不用再进行任何比较了；如果这个位置上已经有元素了，就调用它的equals方法与新元素进行比较，相同的话就不存了，不相同就散列其它的地址。<br />
<br />
<strong>所以两个不equal的对象，有相同的hash，是可以存进Set的。</strong><br />
<br />
class HashNode {<br />
&nbsp;&nbsp;&nbsp; int id;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public HashNode(int id){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.id = id;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public int hashCode() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return id;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public boolean equals(Object obj) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
public class HashTest {<br />
<br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; HashNode n1 = new HashNode(1);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; HashNode n2 = new HashNode(1);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; HashMap map = new HashMap();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; map.put(n1, "111");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; map.put(n2, "222");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(n1.equals(n2));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(n1.hashCode() == n2.hashCode());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(map.keySet().size());<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
}<br />
<img src ="http://www.blogjava.net/oathleo/aggbug/314415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2010-03-03 16:03 <a href="http://www.blogjava.net/oathleo/archive/2010/03/03/314415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MVC与MVP</title><link>http://www.blogjava.net/oathleo/archive/2010/02/28/MVC_MVP.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Sun, 28 Feb 2010 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2010/02/28/MVC_MVP.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/314106.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2010/02/28/MVC_MVP.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/314106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/314106.html</trackback:ping><description><![CDATA[很长一段时间，对MVC和MVP区别很是模糊。<br />
一直忙碌于客户不停的需求中，忽略了产品本身上这些最重要的东西。<br />
现在即将待业，放下自己为之工作近三年的产品，真的感觉犹如失去自己的孩子。<br />
好的一方面是空闲的时间多了，终于可以想想这些事情了。<br />
<br />
MVC算是个被人说烂掉的东西了，MVP也屡屡被人提及。<br />
最大的区别在哪里呢？为什么要再演变个MVP出来呢？<br />
<br />
就定义上来说最大的区别在于C和P，就构架上来说，是View层实现的方式不同。<br />
MVC：View层肩负很大任务，View关联Model，View的渲染是直接通过Model层的数据来确定的。还是有很多业务逻辑在View上完成。<br />
MVP：View层的任务大大缩减，View不再知道Model，P层完成上面提到的View层完成的业务逻辑。<br />
总之一句话MVP里，View层绝对不能再访问Model了，<br />
<br />
任何一种设计模式的出现绝对不是为了出现而出现的。总是为了解决现实中存在的某些老的模式无法或难以解决的问题才出现的。<br />
<br />
为什么会出现MVP呢？<br />
看看客户拿到一个设计精良的MVC的产品，做二次开发的时候，如果他项目足够大，肯定会发现MVC的好处。任务集中在Model层，设计好Model层数据的填充，简单的实现就完成了。MVC的架构帮他解决了很多问题，大家很Happy！<br />
当然客户的需求总是永无止境的，当简单需求被满足的时候，他又会往高层次发展，也许他就完全需要不同的View来做同样的Model的展示(比如一个在JSP，一个在Swing或者Android上)，在这个时候，稍微想下，他就发现他要做的任务开始变的很大了。Model层的数据纵使可以共享，事件控制(转发)也能，而View层无论如何是逃不了了。于是Web程序员硬着头皮也要学Swing，Swing的程序员郁闷的学JSP。<br />
试想这个时候如果有个人，能把陷在View上的上万行code，拉到一个即能联系到Model，又能联系到View的层次上，那真的要感谢苍天大地了。<br />
<br />
MVP我想应该就是在这个时候出现的。它处理所有View和Model之间的消息传递，数据更新，交互操作。比如从Swing的TextField里输入个字段信息，和从JSP里的Form里输入这个字段信息，处理的流程应该是可以共享这段代码的。当然这个时候，为了解决不同View上的一些特殊情况，可以使用适配器模式，来处理多个View的程序设计问题。<br />
<br />
设计模式没有好坏之分，只有合不合适。你的产品如果只需要输入个A返回个B，没有平台建议，没有系统升级，那就忘了所有的设计模式，走那条最快实现的路吧。<br />
<br />
<img src ="http://www.blogjava.net/oathleo/aggbug/314106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2010-02-28 15:38 <a href="http://www.blogjava.net/oathleo/archive/2010/02/28/MVC_MVP.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过反射修改类的私有字段值,调用私有方法</title><link>http://www.blogjava.net/oathleo/archive/2008/06/21/209668.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Sat, 21 Jun 2008 03:40:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2008/06/21/209668.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/oathleo/archive/2008/06/21/209668.html'>阅读全文</a><img src ="http://www.blogjava.net/oathleo/aggbug/209668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2008-06-21 11:40 <a href="http://www.blogjava.net/oathleo/archive/2008/06/21/209668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>动态 JNLP</title><link>http://www.blogjava.net/oathleo/archive/2008/03/28/189199.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Fri, 28 Mar 2008 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2008/03/28/189199.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/189199.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2008/03/28/189199.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/189199.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/189199.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/oathleo/archive/2008/03/28/189199.html'>阅读全文</a><img src ="http://www.blogjava.net/oathleo/aggbug/189199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2008-03-28 10:11 <a href="http://www.blogjava.net/oathleo/archive/2008/03/28/189199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA 移位运算符 &lt;&lt; &gt;&gt; &gt;&gt;&gt;</title><link>http://www.blogjava.net/oathleo/archive/2008/03/28/189197.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Fri, 28 Mar 2008 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2008/03/28/189197.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/189197.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2008/03/28/189197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/189197.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/189197.html</trackback:ping><description><![CDATA[
		<div class="cnt">
				<p>/* <br />
 * show the arthimetic character of '&lt;&lt;' '&gt;&gt;' '&gt;&gt;&gt;'<br />
 */</p>
				<p>public class TestArithmetic {<br />
   public TestArithmetic() {<br />
   }<br />
  <br />
   public   static void   main(String [] args){<br />
     int minus = -10;<br />
     System.out.println(" Binary of -10 is " + Integer.toBinaryString(minus));<br />
     System.out.println(" Arthimetic minus by -10 &lt;&lt; 2 = " +
(minus&lt;&lt;2) + " Binary is " +
Integer.toBinaryString(minus&lt;&lt;2));<br />
     System.out.println(" Arthimetic minus by -10 &gt;&gt; 2 = " +
(minus&gt;&gt;2) + " Binary is " +
Integer.toBinaryString(minus&gt;&gt;2));<br />
     System.out.println(" Arthimetic minus by -10 &gt;&gt;&gt;2 =   " +
(minus &gt;&gt;&gt; 2) + " Binary is " +
Integer.toBinaryString(minus&gt;&gt;&gt;2) <br />
                        + ",length is " + Integer.toBinaryString(minus&gt;&gt;&gt;2).length());<br />
    <br />
     int plus = 10;<br />
     System.out.println(" Binary of 10 is " + Integer.toBinaryString(plus));<br />
     System.out.println(" Arthimetic minus by 10 &lt;&lt; 2 = " +
(plus&lt;&lt;2)+ "Binary is " + Integer.toBinaryString(plus&lt;&lt;2));<br />
     System.out.println(" Arthimetic minus by 10 &gt;&gt; 2 = " +
(plus&gt;&gt;2)+ "Binary is "+ Integer.toBinaryString(plus&gt;&gt;2));<br />
     System.out.println(" Arthimetic minus by 10 &gt;&gt;&gt;2 =   " +
(plus &gt;&gt;&gt; 2)+ "Binary is "+ Integer.toBinaryString(plus
&gt;&gt;&gt; 2));<br />
   }</p>
				<p>补充知识：数值的补码表示也分两种情况： <br />
（1）正数的补码：与原码相同。 <br />
例如，+9的补码是00001001。 <br />
（2）负数的补码：符号位为1，其余位为该数绝对值的原码按位取反；然后整个数加1。 <br />
例如，-7的补码：因为是负数，则符号位为“1”,整个为10000111；其余7位为-7的绝对值+7的原码0000111按位取反为1111000；再加1，所以-7的补码是11111001。 <br /><br /><br />
已知一个数的补码，求原码的操作分两种情况： <br />
（1）如果补码的符号位为“0”，表示是一个正数，所以补码就是该数的原码。 <br />
（2）如果补码的符号位为“1”，表示是一个负数，求原码的操作可以是：符号位为1，其余各位取反，然后再整个数加1。 <br />
例如，已知一个补码为11111001，则原码是10000111（-7）：因为符号位为“1”，表示是一个负数，所以该位不变，仍为“1”；其余7位1111001取反后为0000110；再加1，所以是10000111。</p>
		</div>
<img src ="http://www.blogjava.net/oathleo/aggbug/189197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2008-03-28 10:08 <a href="http://www.blogjava.net/oathleo/archive/2008/03/28/189197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Word转html</title><link>http://www.blogjava.net/oathleo/archive/2008/03/28/189196.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Fri, 28 Mar 2008 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2008/03/28/189196.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/189196.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2008/03/28/189196.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/189196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/189196.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/oathleo/archive/2008/03/28/189196.html'>阅读全文</a><img src ="http://www.blogjava.net/oathleo/aggbug/189196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2008-03-28 10:08 <a href="http://www.blogjava.net/oathleo/archive/2008/03/28/189196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用XMLEncode输出时候，有BigDecimal有时候不好使。</title><link>http://www.blogjava.net/oathleo/archive/2008/03/28/189195.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Fri, 28 Mar 2008 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2008/03/28/189195.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/189195.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2008/03/28/189195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/189195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/189195.html</trackback:ping><description><![CDATA[
		<div id="blog_text" class="cnt">
				<p>用XMLEncode输出时候，如果有BigDecimal有时候不好使。<br />
原因是：如果类的变量在定义时候有初始值，而不是null，就必须要重载DefaultPersistenceDelegate的mutatesTo方法。<br />
关于这个说明，在网上这里可以看到：<br /><a href="http://forum.java.sun.com/thread.jspa?threadID=631299&amp;messageID=3642493">http://forum.java.sun.com/thread.jspa?threadID=631299&amp;messageID=3642493</a><br /><br />有兴趣的可以看看：<br />
//setup big decimal delegate.<br />
          DefaultPersistenceDelegate bigDecimalDelegate = new DefaultPersistenceDelegate() {<br />
              protected Expression instantiate(Object oldInstance, Encoder out) {<br />
                  BigDecimal decimal = (BigDecimal) oldInstance;<br />
                  return new Expression(oldInstance, oldInstance.getClass(), "new", new Object[] {decimal.toString()});<br />
              }<br />
              //must override this method.<br />
              // see <a href="http://forum.java.sun.com/thread.jspa?threadID=631299&amp;messageID=3642493">http://forum.java.sun.com/thread.jspa?threadID=631299&amp;messageID=3642493</a><br />
              protected boolean mutatesTo(Object oldInstance, Object newInstance) {<br />
                  return oldInstance.equals(newInstance);<br />
              }<br />
              //--- Joshua<br />
          };<br /><br />
网上的牛人说：<br /><br />
This works for BigDecimal properties that aren't initialized, i.e.
null. But if you initialize the property, then this won't work unless
you override mutatesTo in addition to instantiate mentioned above:</p>
				<p>protected boolean mutatesTo(Object oldInstance, Object newInstance) {<br />
return oldInstance.equals(newInstance);<br />
} </p>
		</div>
<img src ="http://www.blogjava.net/oathleo/aggbug/189195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2008-03-28 10:07 <a href="http://www.blogjava.net/oathleo/archive/2008/03/28/189195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 引用</title><link>http://www.blogjava.net/oathleo/archive/2008/03/28/189193.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Fri, 28 Mar 2008 02:05:00 GMT</pubDate><guid>http://www.blogjava.net/oathleo/archive/2008/03/28/189193.html</guid><wfw:comment>http://www.blogjava.net/oathleo/comments/189193.html</wfw:comment><comments>http://www.blogjava.net/oathleo/archive/2008/03/28/189193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/oathleo/comments/commentRss/189193.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/oathleo/services/trackbacks/189193.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt">
				<p>public class MethodDemo {</p>
				<p>/**<br />
* @param args<br />
*/<br />
public static void main(String[] args) {<br />
&nbsp;&nbsp;  MethodDemo demo = new MethodDemo();<br />
&nbsp;&nbsp;  Integer i = Integer.valueOf(1);<br />
&nbsp;&nbsp;  demo.add(i);<br />
&nbsp;&nbsp;  System.out.println("i:" + i);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;  String s = "ss";<br />
&nbsp;&nbsp;  demo.stringchange(s);<br />
&nbsp;&nbsp;  System.out.println("s:" + s);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;  Person per = new Person();</p><p><div>&nbsp;&nbsp;&nbsp; per.name = "per1";</div>
&nbsp;&nbsp;  demo.setDate(per);<br />
&nbsp;&nbsp;  System.out.println("per:" + per.getName());<br />
}</p>
				<p>//基本类型变不了<br />
public void add(int i) {<br />
&nbsp;&nbsp;  i++;<br />
}</p>
				<p>
				</p>
				<p>
				</p>
				<p> /***<br />
  * 凡是在引用中出现修改引用的赋值语句，<br />
  * 修改都变成无效<br />
  * @param i<br />
  */</p>
				<p>//想修改引用，不行<br />
public void add(Integer i) {<br />
&nbsp;&nbsp;  int j = i.intValue();<br />
&nbsp;&nbsp;  i = Integer.valueOf(j++);//i的原引用已经丢失了<br />
}<br /><br />
//想修改引用，不行<br />
public void stringchange(String s){<br />
&nbsp;&nbsp;  s = "stringchange";<br />
}<br /><br />
public void setDate(Person per){<br />
&nbsp;&nbsp;  Person per2 = new Person();<br />
&nbsp;&nbsp;  per2.setName("per2Name");<br />
&nbsp;&nbsp;  per = per2;//<span style="color: #ff0000;">per的原引用已经丢失了</span><span style="color: #ff0000;">,这个估计很多人会出错</span><br />
&nbsp;&nbsp;  per.setName("name");<br />
}</p>
				<p>}</p>
				<p>class Person {<br />
String name ;</p>
				<p>public String getName() {<br />
&nbsp;&nbsp;  return name;<br />
}</p>
				<p>public void setName(String name) {<br />
&nbsp;&nbsp;  this.name = name;<br />
}<br /><br />
}</p>
		</div><img src ="http://www.blogjava.net/oathleo/aggbug/189193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/oathleo/" target="_blank">oathleo</a> 2008-03-28 10:05 <a href="http://www.blogjava.net/oathleo/archive/2008/03/28/189193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>