﻿<?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 Util</title><link>http://www.blogjava.net/hezhi/category/49018.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 31 Aug 2011 20:15:14 GMT</lastBuildDate><pubDate>Wed, 31 Aug 2011 20:15:14 GMT</pubDate><ttl>60</ttl><item><title>ORACLE忘记SYS密码的解决办法 【转】</title><link>http://www.blogjava.net/hezhi/articles/357050.html</link><dc:creator>何智</dc:creator><author>何智</author><pubDate>Mon, 22 Aug 2011 07:55:00 GMT</pubDate><guid>http://www.blogjava.net/hezhi/articles/357050.html</guid><wfw:comment>http://www.blogjava.net/hezhi/comments/357050.html</wfw:comment><comments>http://www.blogjava.net/hezhi/articles/357050.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hezhi/comments/commentRss/357050.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hezhi/services/trackbacks/357050.html</trackback:ping><description><![CDATA[<div style="layout-grid:  15.6pt none" class="Section0">
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">ORACLE&nbsp;<font face="宋体">忘记</font><font face="Times New Roman">SYS</font><font face="宋体">密码</font><font face="Times New Roman">2008-06-20&nbsp;16:56</font><font face="宋体">今天已</font><font face="Times New Roman">SYS</font><font face="宋体">身份连接数据库时出错，权限不足，不知道是无意中修改了</font><font face="Times New Roman">SYS</font><font face="宋体">的密码还是怎么回事。但幸好</font><font face="Times New Roman">SYSTEM</font><font face="宋体">的密码没有忘记。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">下面是我的修改步骤：</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">1<font face="宋体">。以</font><font face="Times New Roman">SYSTEM</font><font face="宋体">身份进去</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">2<font face="宋体">。</font><font face="Times New Roman">SQL&gt;&nbsp;show&nbsp;parameter&nbsp;password;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VALUE</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">------------------------------------&nbsp;-----------&nbsp;------------------------------</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">remote_login_passwordfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXCLUSIVE</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">我的<font face="Times New Roman">VALUE</font><font face="宋体">是</font><font face="Times New Roman">EXCLUSIVE</font><font face="宋体">，如果你的结果是其他，请参看下面的信息。当然你也可以用</font><font face="Times New Roman">SQL&gt;alter&nbsp;system&nbsp;set&nbsp;remote_login_passwordfile='exclusive'&nbsp;scope=spfile;&nbsp;</font><font face="宋体">命令修改</font><font face="Times New Roman">remote_login_passwordfile</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">3<font face="宋体">。</font><font face="Times New Roman">CMD&nbsp;</font><font face="宋体">进入命令行，输入如下命令&nbsp;</font><font face="Times New Roman">orapwd&nbsp;file=C:\oracle\product\10.2.0\db_3\database\pwdorcl1.ora&nbsp;password=test</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">注意&nbsp;<font face="Times New Roman">file=C:\oracle\product\10.2.0\db_3\database\pwdorcl1.ora</font><font face="宋体">，</font><font face="Times New Roman">pwdorcl1.ora</font><font face="宋体">是你的密码文件名字，命名规则为</font><font face="Times New Roman">pwdxxx.ora</font><font face="宋体">，</font><font face="Times New Roman">xxx</font><font face="宋体">是你的数据库名，不是实例名。然后此文件得放在固定目录下，</font><font face="Times New Roman">9i</font><font face="宋体">，</font><font face="Times New Roman">10i</font><font face="宋体">的固定目录为</font><font face="Times New Roman">oracle_home\database</font><font face="宋体">目录，如果你的目录下原先已存在名字相同的文件，事先得删掉</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">4<font face="宋体">。现在就可以以</font><font face="Times New Roman">SYS</font><font face="宋体">的身份登录进去了</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">具体关于<font face="Times New Roman">SYS</font><font face="宋体">密码及参数</font><font face="Times New Roman">remote_login_passwordfile&nbsp;</font><font face="宋体">的信息请参考如下：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">Oracle<font face="宋体">中，假如用户要以特权用户身份登录</font><font face="Times New Roman">Oracle</font><font face="宋体">，具体有两种身份验证的方法：&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">（<font face="Times New Roman">1</font><font face="宋体">）使用与操作系统集成的身份验证&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">（<font face="Times New Roman">2</font><font face="宋体">）使用</font><font face="Times New Roman">Oracle</font><font face="宋体">数据库的密码文件进行身份验证。&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">因此，管理好密码文件，对于控制授权用户从远端或本机登录<font face="Times New Roman">Oracle</font><font face="宋体">数据库系统，执行数据库管理工作，都具有特别重要的意义</font><font face="Times New Roman">.</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">Oracle<font face="宋体">数据库的密码文件存放有超级用户</font><font face="Times New Roman">INTERNAL</font><font face="宋体">／</font><font face="Times New Roman">SYS</font><font face="宋体">的口令及其他特权用户的用户名／口令，一般存放在</font><font face="Times New Roman">ORACLE_HOME</font><font face="宋体">＼</font><font face="Times New Roman">DATABASE</font><font face="宋体">的目录下。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">一、&nbsp;密码文件的创建：</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">在使用<font face="Times New Roman">Oracle&nbsp;Instance&nbsp;Manager</font><font face="宋体">创建一数据库实例的时侯，在</font><font face="Times New Roman">ORACLE_HOME</font><font face="宋体">＼</font><font face="Times New Roman">DATABASE</font><font face="宋体">目录下还自动创建了一个与之对应的密码文件，文件名为</font><font face="Times New Roman">PWDSID.ORA</font><font face="宋体">，其中</font><font face="Times New Roman">SID</font><font face="宋体">代表相应的</font><font face="Times New Roman">Oracle</font><font face="宋体">数据库系统标识符。此密码文件是进行初始数据库管理工作的基础。在此之后，管理员也可以根据需要，使用工具</font><font face="Times New Roman">ORAPWD.EXE</font><font face="宋体">手工创建密码文件，命令格式如下：&nbsp;</font><font face="Times New Roman">c:\&nbsp;ORAPWD&nbsp;FILE=&lt;&nbsp;FILENAME&gt;</font><font face="宋体">　</font><font face="Times New Roman">PASSWORD&nbsp;=&lt;PASSWORD&gt;&nbsp;ENTRIES=&lt;MAX_USERS&gt;</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">各命令参数的含义为：</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">FILENAME<font face="宋体">：密码文件名；</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">PASSWORD<font face="宋体">：设置</font><font face="Times New Roman">INTERNAL</font><font face="宋体">／</font><font face="Times New Roman">SYS</font><font face="宋体">帐号的口令；</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">MAX_USERS<font face="宋体">：密码文件中可以存放的最大用户数，对应于允许以</font><font face="Times New Roman">SYSDBA</font><font face="宋体">／</font><font face="Times New Roman">SYSOPER</font><font face="宋体">权限登录数据库的最大用户数。由于在以后的维护中，若用户数超出了此限制，则需要重建密码文件，所以此参数可以根据需要设置得大一些。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">有了密码文件之后，需要设置初始化参数<font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILE</font><font face="宋体">来控制密码文件的使用状态。&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">二、&nbsp;设置初始化参数<font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILE</font><font face="宋体">：&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">在<font face="Times New Roman">Oracle</font><font face="宋体">数据库实例的初始化参数文件中，此参数控制着密码文件的使用及其状态。它可以有以下几个选项：&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">NONE<font face="宋体">：指示</font><font face="Times New Roman">Oracle</font><font face="宋体">系统不使用密码文件，特权用户的登录通过操作系统进行身份验证；&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">EXCLUSIVE<font face="宋体">：指示只有一个数据库实例可以使用此密码文件。只有在此设置下的密码文件可以包含有除</font><font face="Times New Roman">INTERNAL</font><font face="宋体">／</font><font face="Times New Roman">SYS</font><font face="宋体">以外的用户信息，即允许将系统权限</font><font face="Times New Roman">SYSOPER</font><font face="宋体">／</font><font face="Times New Roman">SYSDBA</font><font face="宋体">授予除</font><font face="Times New Roman">INTERNAL</font><font face="宋体">／</font><font face="Times New Roman">SYS</font><font face="宋体">以外的其他用户。&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">SHARED<font face="宋体">：指示可有多个数据库实例可以使用此密码文件。在此设置下只有</font><font face="Times New Roman">INTERNAL</font><font face="宋体">／</font><font face="Times New Roman">SYS</font><font face="宋体">帐号能被密码文件识别，即使文件中存有其他用户的信息，也不允许他们以</font><font face="Times New Roman">SYSOPER</font><font face="宋体">／</font><font face="Times New Roman">SYSDBA</font><font face="宋体">的权限登录。此设置为缺省值。&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">在<font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILE</font><font face="宋体">参数设置为</font><font face="Times New Roman">EXCLUSIVE</font><font face="宋体">、</font><font face="Times New Roman">SHARED</font><font face="宋体">情况下，</font><font face="Times New Roman">Oracle</font><font face="宋体">系统搜索密码文件的次序为：在系统注册库中查找</font><font face="Times New Roman">ORA_SID_PWFILE</font><font face="宋体">参数值（它为密码文件的全路径名）；若未找到，则查找</font><font face="Times New Roman">ORA_PWFILE</font><font face="宋体">参数值；若仍未找到，则使用缺省值</font><font face="Times New Roman">ORACLE_HOME</font><font face="宋体">＼</font><font face="Times New Roman">DATABASE</font><font face="宋体">＼</font><font face="Times New Roman">PWDSID.ORA</font><font face="宋体">；其中的</font><font face="Times New Roman">SID</font><font face="宋体">代表相应的</font><font face="Times New Roman">Oracle</font><font face="宋体">数据库系统标识符。&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">三、&nbsp;向密码文件中增加、删除用户：&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">当初始化参数<font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILE</font><font face="宋体">设置为</font><font face="Times New Roman">EXCLUSIVE</font><font face="宋体">时，系统允许除</font><font face="Times New Roman">INTERNAL</font><font face="宋体">／</font><font face="Times New Roman">SYS</font><font face="宋体">以外的其他用户以管理员身份从远端或本机登录到</font><font face="Times New Roman">Oracle</font><font face="宋体">数据库系统，执行数据库管理工作；这些用户名必须存在于密码文件中，系统才能识别他们。由于不管是在创建数据库实例时自动创建的密码文件，还是使用工具</font><font face="Times New Roman">ORAPWD.EXE</font><font face="宋体">手工创建的密码文件，都只包含</font><font face="Times New Roman">INTERNAL</font><font face="宋体">／</font><font face="Times New Roman">SYS</font><font face="宋体">用户的信息；为此，在实际操作中，可能需要向密码文件添加或删除其他用户帐号。&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">由于仅被授予<font face="Times New Roman">SYSOPER</font><font face="宋体">／</font><font face="Times New Roman">SYSDBA</font><font face="宋体">系统权限的用户才存在于密码文件中，所以当向某一用户授予或收回</font><font face="Times New Roman">SYSOPER</font><font face="宋体">／</font><font face="Times New Roman">SYSDBA</font><font face="宋体">系统权限时，他们的帐号也将相应地被加入到密码文件或从密码文件中删除。由此，向密码文件中增加或删除某一用户，实际上也就是对某一用户授予或收回</font><font face="Times New Roman">SYSOPER</font><font face="宋体">／</font><font face="Times New Roman">SYSDBA</font><font face="宋体">系统权限。&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">要进行此项授权操作，需使用<font face="Times New Roman">SYSDBA</font><font face="宋体">权限（或</font><font face="Times New Roman">INTERNAL</font><font face="宋体">帐号）连入数据库，且初始化参数</font><font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILE</font><font face="宋体">的设置必须为</font><font face="Times New Roman">EXCLUSIVE.</font><font face="宋体">具体操作步骤如下：&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">创建相应的密码文件；&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">设置初始化参数<font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILE</font><font face="宋体">＝</font><font face="Times New Roman">EXCLUSIVE</font><font face="宋体">；&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">使用<font face="Times New Roman">SYSDBA</font><font face="宋体">权限登录：&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">CONNECT<font face="宋体">　</font><font face="Times New Roman">SYS</font><font face="宋体">／</font><font face="Times New Roman">internal_user_passsword</font><font face="宋体">　</font><font face="Times New Roman">AS</font><font face="宋体">　</font><font face="Times New Roman">SYSDBA</font><font face="宋体">；&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">启动数据库实例并打开数据库；&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">创建相应用户帐号，对其授权（包括<font face="Times New Roman">SYSOPER</font><font face="宋体">和</font><font face="Times New Roman">SYSDBA</font><font face="宋体">）：&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">授予权限：<font face="Times New Roman">GRANT</font><font face="宋体">　</font><font face="Times New Roman">SYSDBA</font><font face="宋体">　</font><font face="Times New Roman">TO</font><font face="宋体">　</font><font face="Times New Roman">user_name</font><font face="宋体">；&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">收回权限：<font face="Times New Roman">REVOKE</font><font face="宋体">　</font><font face="Times New Roman">SYSDBA</font><font face="宋体">　</font><font face="Times New Roman">FROM</font><font face="宋体">　</font><font face="Times New Roman">user_name</font><font face="宋体">；&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">现在这些用户可以以管理员身份登录数据库系统了；&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">四、&nbsp;使用密码文件登录：&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">有了密码文件后，用户就可以使用密码文件以<font face="Times New Roman">SYSOPER</font><font face="宋体">／</font><font face="Times New Roman">SYSDBA</font><font face="宋体">权限登录</font><font face="Times New Roman">Oracle</font><font face="宋体">数据库实例了，注意初始化参数</font><font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILE</font><font face="宋体">应设置为</font><font face="Times New Roman">EXCLUSIVE</font><font face="宋体">或</font><font face="Times New Roman">SHARED.</font><font face="宋体">任何用户以</font><font face="Times New Roman">SYSOPER</font><font face="宋体">／</font><font face="Times New Roman">SYSDBA</font><font face="宋体">的权限登录后，将位于</font><font face="Times New Roman">SYS</font><font face="宋体">用户的</font><font face="Times New Roman">Schema</font><font face="宋体">之下，以下为两个登录的例子：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">1.&nbsp;<font face="宋体">以管理员身份登录：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">假设用户<font face="Times New Roman">scott</font><font face="宋体">已被授予</font><font face="Times New Roman">SYSDBA</font><font face="宋体">权限，则他可以使用以下命令登录：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">CONNECT<font face="宋体">　</font><font face="Times New Roman">scott</font><font face="宋体">／</font><font face="Times New Roman">tiger</font><font face="宋体">　</font><font face="Times New Roman">AS</font><font face="宋体">　</font><font face="Times New Roman">SYSDBA</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">2.&nbsp;<font face="宋体">以</font><font face="Times New Roman">INTERNAL</font><font face="宋体">身份登录：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">CONNECT<font face="宋体">　</font><font face="Times New Roman">INTERNAL</font><font face="宋体">／</font><font face="Times New Roman">INTERNAL_PASSWORD</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">五、密码文件的维护：</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">1.&nbsp;<font face="宋体">查看密码文件中的成员：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">可以通过查询视图<font face="Times New Roman">V$PWFILE_USERS</font><font face="宋体">来获取拥有</font><font face="Times New Roman">SYSOPER</font><font face="宋体">／</font><font face="Times New Roman">SYSDBA</font><font face="宋体">系统权限的用户的信息，表中</font><font face="Times New Roman">SYSOPER</font><font face="宋体">／</font><font face="Times New Roman">SYSDBA</font><font face="宋体">列的取值</font><font face="Times New Roman">TRUE</font><font face="宋体">／</font><font face="Times New Roman">FALSE</font><font face="宋体">表示此用户是否拥有相应的权限。这些用户也就是相应地存在于密码文件中的成员。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">2.&nbsp;<font face="宋体">扩展密码文件的用户数量：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">当向密码文件添加的帐号数目超过创建密码文件时所定的限制（即<font face="Times New Roman">ORAPWD.EXE</font><font face="宋体">工具的</font><font face="Times New Roman">MAX_USERS</font><font face="宋体">参数）时，为扩展密码文件的用户数限制，需重建密码文件，具体步骤如下：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">（<font face="Times New Roman">a</font><font face="宋体">）&nbsp;查询视图</font><font face="Times New Roman">V$PWFILE_USERS</font><font face="宋体">，记录下拥有</font><font face="Times New Roman">SYSOPER</font><font face="宋体">／</font><font face="Times New Roman">SYSDBA</font><font face="宋体">系统权限的用户信息；</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">（<font face="Times New Roman">b</font><font face="宋体">）关闭数据库；</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">（<font face="Times New Roman">c</font><font face="宋体">）&nbsp;删除密码文件；</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">（<font face="Times New Roman">d</font><font face="宋体">）&nbsp;用</font><font face="Times New Roman">ORAPWD.EXE</font><font face="宋体">新建一密码文件；</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">（<font face="Times New Roman">e</font><font face="宋体">）&nbsp;将步骤</font><font face="Times New Roman">a</font><font face="宋体">中获取的用户添加到密码文件中。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">3.&nbsp;<font face="宋体">修改密码文件的状态：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">　密码文件的状态信息存放于此文件中，当它被创建时，它的缺省状态为<font face="Times New Roman">SHARED.</font><font face="宋体">可以通过改变初始化参数</font><font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILE</font><font face="宋体">的设置改变密码文件的状态。当启动数据库事例时，</font><font face="Times New Roman">Oracle</font><font face="宋体">系统从初始化参数文件中读取</font><font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILE</font><font face="宋体">参数的设置；当加载数据库时，系统将此参数与口令文件的状态进行比较，如果不同，则更新密码文件的状态。若计划允许从多台客户机上启动数据库实例，由于各客户机上必须有初始化参数文件，所以应确保各客户机上的初始化参数文件的一致性，以避免意外地改变了密码文件的状态，造成数据库登陆的失败。&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">4.&nbsp;<font face="宋体">修改密码文件的存储位置：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">密码文件的存放位置可以根据需要进行移动，但作此修改后，应相应修改系统注册库有关指向密码文件存放位置的参数或环境变量的设置。</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">5.&nbsp;<font face="宋体">删除密码文件：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="text-align: left; margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">在删除密码文件前，应确保当前运行的各数据库实例的初始化参数<font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILE</font><font face="宋体">皆设置为</font><font face="Times New Roman">NONE.</font><font face="宋体">在删除密码文件后，&nbsp;假如你想要以管理员身份连入数据库的话，就必须使用操作系统验证的方法进行登录。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p></div><!--EndFragment--><img src ="http://www.blogjava.net/hezhi/aggbug/357050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hezhi/" target="_blank">何智</a> 2011-08-22 15:55 <a href="http://www.blogjava.net/hezhi/articles/357050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java反射经典实例 Java Reflection Cookbook (初级) </title><link>http://www.blogjava.net/hezhi/articles/354144.html</link><dc:creator>何智</dc:creator><author>何智</author><pubDate>Tue, 12 Jul 2011 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/hezhi/articles/354144.html</guid><wfw:comment>http://www.blogjava.net/hezhi/comments/354144.html</wfw:comment><comments>http://www.blogjava.net/hezhi/articles/354144.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hezhi/comments/commentRss/354144.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hezhi/services/trackbacks/354144.html</trackback:ping><description><![CDATA[<div class="postbody">Java提供了一套机制来动态执行方法和构造方法，以及数组操作等，这套机制就叫&#8212;&#8212;反射。反射机制是如今很多流行框架的实现基础，其中包括Spring、Hibernate等。原理性的问题不是本文的重点，接下来让我们在实例中学习这套精彩的机制。<br /><br />1. 得到某个对象的属性<br /><br />
<div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,128,128)">1</span>&nbsp;<span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object&nbsp;getProperty(Object&nbsp;owner,&nbsp;String&nbsp;fieldName)&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception&nbsp;{<br /></span><span style="color: rgb(0,128,128)">2</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;ownerClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;owner.getClass();<br /></span><span style="color: rgb(0,128,128)">3</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">4</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;field&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ownerClass.getField(fieldName);<br /></span><span style="color: rgb(0,128,128)">5</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">6</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;property&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;field.get(owner);<br /></span><span style="color: rgb(0,128,128)">7</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">8</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;property;<br /></span><span style="color: rgb(0,128,128)">9</span>&nbsp;<span style="color: rgb(0,0,0)">}</span></div><br />Class ownerClass = owner.getClass()：得到该对象的Class。<br /><br />Field field = ownerClass.getField(fieldName)：通过Class得到类声明的属性。<br /><br />Object property = field.get(owner)：通过对象得到该属性的实例，如果这个属性是非公有的，这里会报IllegalAccessException。<br /><br /><br /><br />2. 得到某个类的静态属性<br /><br />
<div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,128,128)">&nbsp;1</span>&nbsp;<span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object&nbsp;getStaticProperty(String&nbsp;className,&nbsp;String&nbsp;fieldName)<br /></span><span style="color: rgb(0,128,128)">&nbsp;2</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception&nbsp;{<br /></span><span style="color: rgb(0,128,128)">&nbsp;3</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;ownerClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;Class.forName(className);<br /></span><span style="color: rgb(0,128,128)">&nbsp;4</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">&nbsp;5</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;field&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ownerClass.getField(fieldName);<br /></span><span style="color: rgb(0,128,128)">&nbsp;6</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">&nbsp;7</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;property&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;field.get(ownerClass);<br /></span><span style="color: rgb(0,128,128)">&nbsp;8</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">&nbsp;9</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;property;<br /></span><span style="color: rgb(0,128,128)">10</span>&nbsp;<span style="color: rgb(0,0,0)">}</span></div><br /><br />Class ownerClass = Class.forName(className) ：首先得到这个类的Class。<br /><br />Field field = ownerClass.getField(fieldName)：和上面一样，通过Class得到类声明的属性。<br /><br />Object property = field.get(ownerClass) ：这里和上面有些不同，因为该属性是静态的，所以直接从类的Class里取。<br /><br /><br />3. 执行某对象的方法<br /><br />
<div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,128,128)">&nbsp;1</span>&nbsp;<span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object&nbsp;invokeMethod(Object&nbsp;owner,&nbsp;String&nbsp;methodName,&nbsp;Object[]&nbsp;args)&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception&nbsp;{<br /></span><span style="color: rgb(0,128,128)">&nbsp;2</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">&nbsp;3</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;ownerClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;owner.getClass();<br /></span><span style="color: rgb(0,128,128)">&nbsp;4</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">&nbsp;5</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class[]&nbsp;argsClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;Class[args.length];<br /></span><span style="color: rgb(0,128,128)">&nbsp;6</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">&nbsp;7</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">,&nbsp;j&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args.length;&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">&nbsp;j;&nbsp;i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">)&nbsp;{<br /></span><span style="color: rgb(0,128,128)">&nbsp;8</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argsClass[i]&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args[i].getClass();<br /></span><span style="color: rgb(0,128,128)">&nbsp;9</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: rgb(0,128,128)">10</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">11</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;method&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ownerClass.getMethod(methodName,&nbsp;argsClass);<br /></span><span style="color: rgb(0,128,128)">12</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">13</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;method.invoke(owner,&nbsp;args);<br /></span><span style="color: rgb(0,128,128)">14</span>&nbsp;<span style="color: rgb(0,0,0)">}</span></div><br />Class owner_class = owner.getClass() ：首先还是必须得到这个对象的Class。<br /><br />5～9行：配置参数的Class数组，作为寻找Method的条件。<br /><br />Method method = ownerClass.getMethod(methodName, argsClass)：通过Method名和参数的Class数组得到要执行的Method。<br /><br />method.invoke(owner, args)：执行该Method，invoke方法的参数是执行这个方法的对象，和参数数组。返回值是Object，也既是该方法的返回值。<br /><br /><br />4. 执行某个类的静态方法<br /><br />
<div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,128,128)">&nbsp;1</span>&nbsp;<span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object&nbsp;invokeStaticMethod(String&nbsp;className,&nbsp;String&nbsp;methodName,<br /></span><span style="color: rgb(0,128,128)">&nbsp;2</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object[]&nbsp;args)&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception&nbsp;{<br /></span><span style="color: rgb(0,128,128)">&nbsp;3</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;ownerClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;Class.forName(className);<br /></span><span style="color: rgb(0,128,128)">&nbsp;4</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">&nbsp;5</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class[]&nbsp;argsClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;Class[args.length];<br /></span><span style="color: rgb(0,128,128)">&nbsp;6</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">&nbsp;7</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">,&nbsp;j&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args.length;&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">&nbsp;j;&nbsp;i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">)&nbsp;{<br /></span><span style="color: rgb(0,128,128)">&nbsp;8</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argsClass[i]&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args[i].getClass();<br /></span><span style="color: rgb(0,128,128)">&nbsp;9</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: rgb(0,128,128)">10</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">11</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;method&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ownerClass.getMethod(methodName,&nbsp;argsClass);<br /></span><span style="color: rgb(0,128,128)">12</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">13</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;method.invoke(</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">,&nbsp;args);<br /></span><span style="color: rgb(0,128,128)">14</span>&nbsp;<span style="color: rgb(0,0,0)">}</span></div><br /><br />基本的原理和实例3相同，不同点是最后一行，invoke的一个参数是null，因为这是静态方法，不需要借助实例运行。<br /><br /><br /><br />5. 新建实例<br />
<div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,128,128)">&nbsp;1</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">&nbsp;2</span>&nbsp;<span style="color: rgb(0,0,0)"></span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object&nbsp;newInstance(String&nbsp;className,&nbsp;Object[]&nbsp;args)&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception&nbsp;{<br /></span><span style="color: rgb(0,128,128)">&nbsp;3</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;newoneClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;Class.forName(className);<br /></span><span style="color: rgb(0,128,128)">&nbsp;4</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">&nbsp;5</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Class[]&nbsp;argsClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;Class[args.length];<br /></span><span style="color: rgb(0,128,128)">&nbsp;6</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">&nbsp;7</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">,&nbsp;j&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args.length;&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">&nbsp;j;&nbsp;i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">)&nbsp;{<br /></span><span style="color: rgb(0,128,128)">&nbsp;8</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argsClass[i]&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args[i].getClass();<br /></span><span style="color: rgb(0,128,128)">&nbsp;9</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: rgb(0,128,128)">10</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">11</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Constructor&nbsp;cons&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;newoneClass.getConstructor(argsClass);<br /></span><span style="color: rgb(0,128,128)">12</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">13</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;cons.newInstance(args);<br /></span><span style="color: rgb(0,128,128)">14</span>&nbsp;<span style="color: rgb(0,0,0)"><br /></span><span style="color: rgb(0,128,128)">15</span>&nbsp;<span style="color: rgb(0,0,0)">}</span></div><br /><br />这里说的方法是执行带参数的构造函数来新建实例的方法。如果不需要参数，可以直接使用newoneClass.newInstance()来实现。<br /><br />Class newoneClass = Class.forName(className)：第一步，得到要构造的实例的Class。<br /><br />第5～第9行：得到参数的Class数组。<br /><br />Constructor cons = newoneClass.getConstructor(argsClass)：得到构造子。<br /><br />cons.newInstance(args)：新建实例。<br /><br /><br />6. 判断是否为某个类的实例<br /><br />
<div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,128,128)">1</span>&nbsp;<span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">boolean</span><span style="color: rgb(0,0,0)">&nbsp;isInstance(Object&nbsp;obj,&nbsp;Class&nbsp;cls)&nbsp;{<br /></span><span style="color: rgb(0,128,128)">2</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;cls.isInstance(obj);<br /></span><span style="color: rgb(0,128,128)">3</span>&nbsp;<span style="color: rgb(0,0,0)">}</span></div><br /><br /><br />7. 得到数组中的某个元素<br />
<div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,128,128)">1</span>&nbsp;<span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object&nbsp;getByArray(Object&nbsp;array,&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;index)&nbsp;{<br /></span><span style="color: rgb(0,128,128)">2</span>&nbsp;<span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;Array.get(array,index);<br /></span><span style="color: rgb(0,128,128)">3</span>&nbsp;<span style="color: rgb(0,0,0)">}</span></div><br /><br /><br />附完整源码：<br /><br />
<div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;java.lang.reflect.Array;<br /></span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;java.lang.reflect.Constructor;<br /></span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;java.lang.reflect.Field;<br /></span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;java.lang.reflect.Method;<br /><br /><br /></span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />&nbsp;*&nbsp;Java&nbsp;Reflection&nbsp;Cookbook<br />&nbsp;*<br />&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@author</span><span style="color: rgb(0,128,0)">&nbsp;Michael&nbsp;Lee<br />&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@since</span><span style="color: rgb(0,128,0)">&nbsp;2006-8-23<br />&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@version</span><span style="color: rgb(0,128,0)">&nbsp;0.1a<br />&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br /><br /></span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">class</span><span style="color: rgb(0,0,0)">&nbsp;Reflection&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;得到某个对象的公共属性<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;owner,&nbsp;fieldName<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@return</span><span style="color: rgb(0,128,0)">&nbsp;该属性对象<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@throws</span><span style="color: rgb(0,128,0)">&nbsp;Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object&nbsp;getProperty(Object&nbsp;owner,&nbsp;String&nbsp;fieldName)&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;ownerClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;owner.getClass();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;field&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ownerClass.getField(fieldName);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;property&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;field.get(owner);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;property;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;得到某类的静态公共属性<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;className&nbsp;&nbsp;&nbsp;类名<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;fieldName&nbsp;&nbsp;&nbsp;属性名<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@return</span><span style="color: rgb(0,128,0)">&nbsp;该属性对象<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@throws</span><span style="color: rgb(0,128,0)">&nbsp;Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object&nbsp;getStaticProperty(String&nbsp;className,&nbsp;String&nbsp;fieldName)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;ownerClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;Class.forName(className);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;field&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ownerClass.getField(fieldName);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;property&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;field.get(ownerClass);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;property;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;执行某对象方法<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;owner<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对象<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;methodName<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;方法名<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;args<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@return</span><span style="color: rgb(0,128,0)">&nbsp;方法返回值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@throws</span><span style="color: rgb(0,128,0)">&nbsp;Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object&nbsp;invokeMethod(Object&nbsp;owner,&nbsp;String&nbsp;methodName,&nbsp;Object[]&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;ownerClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;owner.getClass();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class[]&nbsp;argsClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;Class[args.length];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">,&nbsp;j&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args.length;&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">&nbsp;j;&nbsp;i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argsClass[i]&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args[i].getClass();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;method&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ownerClass.getMethod(methodName,&nbsp;argsClass);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;method.invoke(owner,&nbsp;args);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;执行某类的静态方法<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;className<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;类名<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;methodName<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;方法名<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;args<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参数数组<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@return</span><span style="color: rgb(0,128,0)">&nbsp;执行方法返回的结果<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@throws</span><span style="color: rgb(0,128,0)">&nbsp;Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object&nbsp;invokeStaticMethod(String&nbsp;className,&nbsp;String&nbsp;methodName,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object[]&nbsp;args)&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;ownerClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;Class.forName(className);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class[]&nbsp;argsClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;Class[args.length];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">,&nbsp;j&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args.length;&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">&nbsp;j;&nbsp;i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argsClass[i]&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args[i].getClass();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;method&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ownerClass.getMethod(methodName,&nbsp;argsClass);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;method.invoke(</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">,&nbsp;args);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;新建实例<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;className<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;类名<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;args<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;构造函数的参数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@return</span><span style="color: rgb(0,128,0)">&nbsp;新建的实例<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@throws</span><span style="color: rgb(0,128,0)">&nbsp;Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object&nbsp;newInstance(String&nbsp;className,&nbsp;Object[]&nbsp;args)&nbsp;</span><span style="color: rgb(0,0,255)">throws</span><span style="color: rgb(0,0,0)">&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;newoneClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;Class.forName(className);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class[]&nbsp;argsClass&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;Class[args.length];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">,&nbsp;j&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args.length;&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">&nbsp;j;&nbsp;i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argsClass[i]&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;args[i].getClass();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor&nbsp;cons&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;newoneClass.getConstructor(argsClass);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;cons.newInstance(args);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;是不是某个类的实例<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;obj&nbsp;实例<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;cls&nbsp;类<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@return</span><span style="color: rgb(0,128,0)">&nbsp;如果&nbsp;obj&nbsp;是此类的实例，则返回&nbsp;true<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">boolean</span><span style="color: rgb(0,0,0)">&nbsp;isInstance(Object&nbsp;obj,&nbsp;Class&nbsp;cls)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;cls.isInstance(obj);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;得到数组中的某个元素<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;array&nbsp;数组<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@param</span><span style="color: rgb(0,128,0)">&nbsp;index&nbsp;索引<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@return</span><span style="color: rgb(0,128,0)">&nbsp;返回指定数组对象中索引组件的值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)">&nbsp;Object&nbsp;getByArray(Object&nbsp;array,&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;index)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;Array.get(array,index);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div></div><img src ="http://www.blogjava.net/hezhi/aggbug/354144.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hezhi/" target="_blank">何智</a> 2011-07-12 10:27 <a href="http://www.blogjava.net/hezhi/articles/354144.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java操作excel(HSSF样式一)</title><link>http://www.blogjava.net/hezhi/articles/354143.html</link><dc:creator>何智</dc:creator><author>何智</author><pubDate>Tue, 12 Jul 2011 02:25:00 GMT</pubDate><guid>http://www.blogjava.net/hezhi/articles/354143.html</guid><wfw:comment>http://www.blogjava.net/hezhi/comments/354143.html</wfw:comment><comments>http://www.blogjava.net/hezhi/articles/354143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hezhi/comments/commentRss/354143.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hezhi/services/trackbacks/354143.html</trackback:ping><description><![CDATA[<p><font size="2">import java.io.IOException;<br />import java.io.PrintWriter;<br />import java.util.ArrayList;<br />import java.util.HashMap;<br />import java.util.Iterator;<br />import java.util.List;</font></p>
<p><font size="2">import javax.servlet.ServletException;<br />import javax.servlet.ServletOutputStream;<br />import javax.servlet.http.HttpServlet;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</font></p>
<p><font size="2">import org.apache.poi.hssf.usermodel.HSSFCell;<br />import org.apache.poi.hssf.usermodel.HSSFCellStyle;<br />import org.apache.poi.hssf.util.HSSFColor;<br />import org.apache.poi.hssf.util.Region;<br />import org.apache.poi.hssf.usermodel.HSSFFont;<br />import org.apache.poi.hssf.usermodel.HSSFRow;<br />import org.apache.poi.hssf.usermodel.HSSFSheet;<br />import org.apache.poi.hssf.usermodel.HSSFWorkbook;</font></p>
<p><font size="2"></font></p>
<p><font size="2">HSSFCellStyle类代表一种单元格样式。可以通过这些类来设置单元格的边框样式、背景颜色、字体、水平和垂直方式的对齐。<br />如:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HSSFWorkbook workbook = new HSSFWorkbook();&nbsp;&nbsp;&nbsp; //建立一个工作薄<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HSSFCellStyle titleStyle=workbook.createCellStyle();&nbsp;&nbsp;&nbsp;&nbsp; //在工作薄的基础上建立一个样式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; titleStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);&nbsp;&nbsp;&nbsp; //设置边框样式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; titleStyle.setBorderLeft((short)1);&nbsp;&nbsp;&nbsp;&nbsp; //左边框<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; titleStyle.setBorderRight((short)1);&nbsp;&nbsp;&nbsp; //右边框<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; titleStyle.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);&nbsp;&nbsp;&nbsp; //顶边框<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; titleStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);&nbsp;&nbsp;&nbsp; //填充的背景颜色<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);&nbsp;&nbsp;&nbsp; //填充图案</font></p>
<p><font size="2">假设什么定义了一个样式，想在填充第一个单元格的时候填充红，第二格单元格填充蓝色。<br />如果:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HSSFCellStyle cellStyle = workbook.createCellStyle();&nbsp;&nbsp;&nbsp; //创建一个样式</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cellStyle.setFillForegroundColor(HSSFColor.RED.index);&nbsp;&nbsp;&nbsp; //设置颜色为红色<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HSSFCell cell1 = row.createCell((short)1);&nbsp;&nbsp;&nbsp;&nbsp; //给单元格cell1填充红色<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell1.setCellStyle(cellStyle);</font></p>
<p><font size="2">若:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cellStyle.setFillForegroundColor(HSSFColor.BLUE.index);&nbsp;&nbsp;&nbsp; //设置颜色为蓝色<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HSSFCell cell2 = row.createCell((short)2);&nbsp;&nbsp;&nbsp; //给单元格cell2填充蓝色<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell2.setCellStyle(cellStyle);</font></p>
<p><font size="2">这个时候会出现的现象是单元格cell1和cell2都变成了蓝色。遇到这种情况，要预先定义两种不同的单元格样式。</font></p>
<p><br /><font size="2">当一个EXCEL文件同时需要很多大同小异的单元格样式时，这样一一定义很麻烦。POI HSSF提供了一个HSSFCellUtil类（在org.apache.poi.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hssf.usermodel.contrib包），里面有几个方法可以绕过HSSFCellStyle直接设定单元格的样式，但这几个方法会抛出NestableException异&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 常，要处理这个异常，需要引用Apache的几个Common包：<br />commons-beanutils.jar<br />commons-beanutils-bean-collections.jar<br />commons-beanutils-core.jar<br />commons-lang.jar<br />commons-logging-api.jar</font></p>
<p><font size="2">以下是其他各种情况的处理：<br />1、中文处理：<br />要在通过POI生成的EXCEL中正常显示中文，需要为单元格设置编码：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell.setEncoding(HSSFCell.ENCODING_UTF_16); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell.setCellValue("部门");</font></p>
<p><font size="2">2、合并单元格：<br />HSSFSheet.addMergedRegion(new Region())方法可以合并单元格，Region()中的一个构造函数含有四个参数，分别代表起始行、起始列、结束&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 行、结束列：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sheet.addMergedRegion(new Region(initRow, (short)(initCol-2), initRow + lists.size() - 1, (short)(initCol-2)));</font></p>
<p><font size="2">3、公式的处理：<br />HSSFCell.setCellFormula()方法用来在EXCEL单元格中写入公式。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell = row.createCell((short)(dataFlag));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell.setCellFormula("SUM(" + getColLetter(initCol) + (listFlag+1) +":" + getColLetter(dataFlag-1) + (listFlag+1) +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ")");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell.setCellStyle(nameStyle);</font></p>
<p><font size="2">4、链接的处理：<br />在POI中往单元格中写链接，是用HYPERLINK函数搞定的。<br />HYPERLINK函数包含两个参数，第一个参数是指向的URL地址，第二个参数是显示字串。<br />&nbsp;&nbsp;&nbsp;&nbsp; cell = row.createCell((short)(dataFlag));<br />&nbsp;&nbsp;&nbsp;&nbsp; cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);<br />&nbsp;&nbsp;&nbsp;&nbsp; cell.setCellFormula("HYPERLINK(\"</font><a href='http://www.xxxxx.com/xxx.jsp?id=1 ", "homepage' href_cetemp='http://www.xxxxx.com/xxx.jsp?id=1 ", "homepage'><font color="#0000ff" size="2">http://www.xxxxx.com/xxx.jsp?id=1\",\"homepage\</font></a><font size="2">")");<br />&nbsp;&nbsp;&nbsp;&nbsp; cell.setCellStyle(linkStyle); <br />为了使链接效果更好，我们可以给链接所在单元格定义一种样式，使链接显示为有下划线的蓝色字串：<br />&nbsp;&nbsp;&nbsp; HSSFCellStyle linkStyle = workbook.createCellStyle();<br />&nbsp;&nbsp;&nbsp; linkStyle.setBorderBottom((short)1);<br />&nbsp;&nbsp;&nbsp; linkStyle.setBorderLeft((short)1);<br />&nbsp;&nbsp;&nbsp; linkStyle.setBorderRight((short)1);<br />&nbsp;&nbsp;&nbsp; linkStyle.setBorderTop((short)1);<br />&nbsp;&nbsp;&nbsp; linkStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index);<br />&nbsp;&nbsp;&nbsp; linkStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);<br />&nbsp;&nbsp;&nbsp; HSSFFont font = workbook.createFont();<br />&nbsp;&nbsp;&nbsp; font.setFontName(HSSFFont.FONT_ARIAL);<br />&nbsp;&nbsp;&nbsp; font.setUnderline((byte)1);<br />&nbsp;&nbsp;&nbsp; font.setColor(HSSFColor.BLUE.index);<br />&nbsp;&nbsp;&nbsp; linkStyle.setFont(font);</font></p><img src ="http://www.blogjava.net/hezhi/aggbug/354143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hezhi/" target="_blank">何智</a> 2011-07-12 10:25 <a href="http://www.blogjava.net/hezhi/articles/354143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个POI Excel的小例子【转】</title><link>http://www.blogjava.net/hezhi/articles/354141.html</link><dc:creator>何智</dc:creator><author>何智</author><pubDate>Tue, 12 Jul 2011 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/hezhi/articles/354141.html</guid><wfw:comment>http://www.blogjava.net/hezhi/comments/354141.html</wfw:comment><comments>http://www.blogjava.net/hezhi/articles/354141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hezhi/comments/commentRss/354141.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hezhi/services/trackbacks/354141.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文出自：http://www.iteye.com/problems/13427Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&nbsp;&nbsp;1package&nbsp;*.*;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/hezhi/articles/354141.html'>阅读全文</a><img src ="http://www.blogjava.net/hezhi/aggbug/354141.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hezhi/" target="_blank">何智</a> 2011-07-12 10:20 <a href="http://www.blogjava.net/hezhi/articles/354141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java的POI操作Excel文件</title><link>http://www.blogjava.net/hezhi/articles/POI.html</link><dc:creator>何智</dc:creator><author>何智</author><pubDate>Mon, 04 Jul 2011 08:10:00 GMT</pubDate><guid>http://www.blogjava.net/hezhi/articles/POI.html</guid><wfw:comment>http://www.blogjava.net/hezhi/comments/353651.html</wfw:comment><comments>http://www.blogjava.net/hezhi/articles/POI.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hezhi/comments/commentRss/353651.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hezhi/services/trackbacks/353651.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;微软在桌面系统上的成功，令我们不得不大量使用它的办公产品，如：Word，Excel。时至今日，它的源代码仍然不公开已封锁了我们的进一步应用和开发。然而在要求更高的服务器领域，微软本身的产品移植性不好，&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;性能不佳。在我们实际的开发中，表现层的解决方案虽然有多样，但是Ie浏览器已成为最多人使用...&nbsp;&nbsp;<a href='http://www.blogjava.net/hezhi/articles/POI.html'>阅读全文</a><img src ="http://www.blogjava.net/hezhi/aggbug/353651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hezhi/" target="_blank">何智</a> 2011-07-04 16:10 <a href="http://www.blogjava.net/hezhi/articles/POI.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>