﻿<?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-飞翔的起点-最新评论</title><link>http://www.blogjava.net/forgood/CommentsRSS.aspx</link><description>从这里出发</description><language>zh-cn</language><pubDate>Sun, 18 Oct 2009 10:29:06 GMT</pubDate><lastBuildDate>Sun, 18 Oct 2009 10:29:06 GMT</lastBuildDate><generator>cnblogs</generator><item><title>re: 反射机制补充</title><link>http://www.blogjava.net/forgood/archive/2009/01/11/250870.html#250871</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Sun, 11 Jan 2009 09:52:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2009/01/11/250870.html#250871</guid><description><![CDATA[JAVA反射机制<br>    JAVA反射机制是在运行状态中，对于任意一个类，都能够知道这个类的所有属性和方法；对于任意一个对象，都能够调用它的任意一个方法；这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。<br>Java反射机制主要提供了以下功能： 在运行时判断任意一个对象所属的类；在运行时构造任意一个类的对象；在运行时判断任意一个类所具有的成员变量和方法；在运行时调用任意一个对象的方法；生成动态代理。<br>1. 得到某个对象的属性<br><br>1 public Object getProperty(Object owner, String fieldName) throws Exception {<br>2     Class ownerClass = owner.getClass();<br>3 <br>4     Field field = ownerClass.getField(fieldName);<br>5 <br>6     Object property = field.get(owner);<br>7 <br>8     return property;<br>9 }<br>Class ownerClass = owner.getClass()：得到该对象的Class。<br><br>Field field = ownerClass.getField(fieldName)：通过Class得到类声明的属性。<br><br>Object property = field.get(owner)：通过对象得到该属性的实例，如果这个属性是非公有的，这里会报IllegalAccessException。<br><br>2. 得到某个类的静态属性<br><br> 1 public Object getStaticProperty(String className, String fieldName)<br> 2             throws Exception {<br> 3     Class ownerClass = Class.forName(className);<br> 4 <br> 5     Field field = ownerClass.getField(fieldName);<br> 6 <br> 7     Object property = field.get(ownerClass);<br> 8 <br> 9     return property;<br>10 }<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>3. 执行某对象的方法<br><br> 1 public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {<br> 2 <br> 3     Class ownerClass = owner.getClass();<br> 4 <br> 5     Class[] argsClass = new Class[args.length];<br> 6 <br> 7     for (int i = 0, j = args.length; i &lt; j; i++) {<br> 8         argsClass[i] = args[i].getClass();<br> 9     }<br>10 <br>11     Method method = ownerClass.getMethod(methodName, argsClass);<br>12 <br>13     return method.invoke(owner, args);<br>14 }<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>4. 执行某个类的静态方法<br><br> 1 public Object invokeStaticMethod(String className, String methodName,<br> 2             Object[] args) throws Exception {<br> 3     Class ownerClass = Class.forName(className);<br> 4 <br> 5     Class[] argsClass = new Class[args.length];<br> 6 <br> 7     for (int i = 0, j = args.length; i &lt; j; i++) {<br> 8         argsClass[i] = args[i].getClass();<br> 9     }<br>10 <br>11     Method method = ownerClass.getMethod(methodName, argsClass);<br>12 <br>13     return method.invoke(null, args);<br>14 }<br><br>基本的原理和实例3相同，不同点是最后一行，invoke的一个参数是null，因为这是静态方法，不需要借助实例运行。<br><br>5. 新建实例<br> 1 <br> 2 public Object newInstance(String className, Object[] args) throws Exception {<br> 3     Class newoneClass = Class.forName(className);<br> 4 <br> 5     Class[] argsClass = new Class[args.length];<br> 6 <br> 7     for (int i = 0, j = args.length; i &lt; j; i++) {<br> 8         argsClass[i] = args[i].getClass();<br> 9     }<br>10 <br>11     Constructor cons = newoneClass.getConstructor(argsClass);<br>12 <br>13     return cons.newInstance(args);<br>14 <br>15 }<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>6. 判断是否为某个类的实例<br><br>1 public boolean isInstance(Object obj, Class cls) {<br>2     return cls.isInstance(obj);<br>3 }<br><br>7. 得到数组中的某个元素<br>1 public Object getByArray(Object array, int index) {<br>2     return Array.get(array,index);<br>3 }<br><br><br><img src ="http://www.blogjava.net/forgood/aggbug/250871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2009-01-11 17:52 <a href="http://www.blogjava.net/forgood/archive/2009/01/11/250870.html#250871#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: jquery学习网站</title><link>http://www.blogjava.net/forgood/archive/2008/11/30/243537.html#243538</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Sun, 30 Nov 2008 06:47:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2008/11/30/243537.html#243538</guid><description><![CDATA[在线API<br><a href="http://jquery-api-zh-cn.googlecode.com/svn/trunk/index.html" target="_new">http://jquery-api-zh-cn.googlecode.com/svn/trunk/index.html</a><img src ="http://www.blogjava.net/forgood/aggbug/243538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2008-11-30 14:47 <a href="http://www.blogjava.net/forgood/archive/2008/11/30/243537.html#243538#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: java中的String和StringBuffer类</title><link>http://www.blogjava.net/forgood/archive/2008/08/19/187162.html#222923</link><dc:creator>lixinso</dc:creator><author>lixinso</author><pubDate>Tue, 19 Aug 2008 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2008/08/19/187162.html#222923</guid><description><![CDATA[mark<img src ="http://www.blogjava.net/forgood/aggbug/222923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">lixinso</a> 2008-08-19 09:38 <a href="http://www.blogjava.net/forgood/archive/2008/08/19/187162.html#222923#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 多态</title><link>http://www.blogjava.net/forgood/archive/2008/04/28/196702.html#196712</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Mon, 28 Apr 2008 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2008/04/28/196702.html#196712</guid><description><![CDATA[<a href="http://www.ranm.cn/html/school/bianchengkaifaxi/java/20071109/1837.html可以看看这个网站对多态的分析" target="_new">http://www.ranm.cn/html/school/bianchengkaifaxi/java/20071109/1837.html可以看看这个网站对多态的分析</a>，挺不错的<br><img src ="http://www.blogjava.net/forgood/aggbug/196712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2008-04-28 10:39 <a href="http://www.blogjava.net/forgood/archive/2008/04/28/196702.html#196712#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 关于oracle的一些问题</title><link>http://www.blogjava.net/forgood/archive/2008/04/23/191642.html#194949</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Wed, 23 Apr 2008 01:55:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2008/04/23/191642.html#194949</guid><description><![CDATA[select * into destTbl from srcTbl<br><br>insert into destTbl(fld1, fld2) select fld1, 5 from srcTbl<br><br>以上两句都是将 srcTbl 的数据插入到 destTbl，但两句又有区别的。<br><br>第一句（select into from）要求目标表（destTbl）不存在，因为在插入时会自动创建。<br><br>第二句（insert into select from）要求目标表（destTbl）存在，由于目标表已经存在，所以我们除了插入源表（srcTbl）的字段外，还可以插入常量<br><img src ="http://www.blogjava.net/forgood/aggbug/194949.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2008-04-23 09:55 <a href="http://www.blogjava.net/forgood/archive/2008/04/23/191642.html#194949#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: Collection框架二</title><link>http://www.blogjava.net/forgood/archive/2008/04/17/193806.html#193808</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Thu, 17 Apr 2008 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2008/04/17/193806.html#193808</guid><description><![CDATA[add（E e）：在当前表的末尾插入元素，如果在前面表不满的情况下，也是很高效的，直接插入到末尾，但是如果在当前表已经满的情况下，就要重新生成一个比当前表大小更大的新表，新表的大小是当前表大小的1.5倍加1，比如当前表长度为20的，新表的大小就为31，还需要把当前表元素复制到新表中去，然后把当前表引用指向新表，最后把数值插入到表末尾，所以这种操作是非常低效的。<br><img src ="http://www.blogjava.net/forgood/aggbug/193808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2008-04-17 16:50 <a href="http://www.blogjava.net/forgood/archive/2008/04/17/193806.html#193808#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: java中的String和StringBuffer类</title><link>http://www.blogjava.net/forgood/archive/2008/04/14/187162.html#192845</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Mon, 14 Apr 2008 08:38:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2008/04/14/187162.html#192845</guid><description><![CDATA[StringBuilder和StringBuffer差不多，但是StringBuilder是不安全的，而StringBuffer是安全的<img src ="http://www.blogjava.net/forgood/aggbug/192845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2008-04-14 16:38 <a href="http://www.blogjava.net/forgood/archive/2008/04/14/187162.html#192845#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 关于oracle的一些问题</title><link>http://www.blogjava.net/forgood/archive/2008/04/14/191642.html#192842</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Mon, 14 Apr 2008 08:31:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2008/04/14/191642.html#192842</guid><description><![CDATA[select  字段...... into 表1 from 条件。这个语句中在执行前，表1是不存在的，在执行这条语句的时候会自动创建表1.<img src ="http://www.blogjava.net/forgood/aggbug/192842.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2008-04-14 16:31 <a href="http://www.blogjava.net/forgood/archive/2008/04/14/191642.html#192842#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 关于oracle的一些问题</title><link>http://www.blogjava.net/forgood/archive/2008/04/09/191642.html#191643</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Wed, 09 Apr 2008 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2008/04/09/191642.html#191643</guid><description><![CDATA[删除重复记录中的第一种方法不是很明白？？？？<br><img src ="http://www.blogjava.net/forgood/aggbug/191643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2008-04-09 10:01 <a href="http://www.blogjava.net/forgood/archive/2008/04/09/191642.html#191643#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: File类及子类的总结</title><link>http://www.blogjava.net/forgood/archive/2008/03/26/187486.html#188820</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Wed, 26 Mar 2008 10:12:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2008/03/26/187486.html#188820</guid><description><![CDATA[我觉得它只是针对随机读取吧。<img src ="http://www.blogjava.net/forgood/aggbug/188820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2008-03-26 18:12 <a href="http://www.blogjava.net/forgood/archive/2008/03/26/187486.html#188820#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>