java反射机制基础[转]

JAVA反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

1. 得到某个对象的属性

1 public Object getProperty(Object owner, String fieldName) throws Exception {
2 Class ownerClass = owner.getClass();
3
4 Field field = ownerClass.getField(fieldName);
5
6 Object property = field.get(owner);
7
8 return property;
9 }
Class ownerClass = owner.getClass():得到该对象的Class。
Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。
Object property = field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。

2. 得到某个类的静态属性

1 public Object getStaticProperty(String className, String fieldName)
2 throws Exception {
3 Class ownerClass = Class.forName(className);
4
5 Field field = ownerClass.getField(fieldName);
6
7 Object property = field.get(ownerClass);
8
9 return property;
10 }
Class ownerClass = Class.forName(className) :首先得到这个类的Class。
Field field = ownerClass.getField(fieldName):和上面一样,通过Class得到类声明的属性。
Object property = field.get(ownerClass) :这里和上面有些不同,因为该属性是静态的,所以直接从类的Class里取。

3. 执行某对象的方法

1 public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {
2
3 Class ownerClass = owner.getClass();
4
5 Class[] argsClass = new Class[args.length];
6
7 for (int i = 0, j = args.length; i < j; i++) {
8 argsClass[i] = args[i].getClass();
9 }
10
11 Method method = ownerClass.getMethod(methodName, argsClass);
12
13 return method.invoke(owner, args);
14 }
Class owner_class = owner.getClass() :首先还是必须得到这个对象的Class。
5~9行:配置参数的Class数组,作为寻找Method的条件。
Method method = ownerClass.getMethod(methodName, argsClass):通过Method名和参数的Class数组得到要执行的Method。
method.invoke(owner, args):执行该Method,invoke方法的参数是执行这个方法的对象,和参数数组。返回值是Object,也既是该方法的返回值。

4. 执行某个类的静态方法

1 public Object invokeStaticMethod(String className, String methodName,
2 Object[] args) throws Exception {
3 Class ownerClass = Class.forName(className);
4
5 Class[] argsClass = new Class[args.length];
6
7 for (int i = 0, j = args.length; i < j; i++) {
8 argsClass[i] = args[i].getClass();
9 }
10
11 Method method = ownerClass.getMethod(methodName, argsClass);
12
13 return method.invoke(null, args);
14 }
基本的原理和实例3相同,不同点是最后一行,invoke的一个参数是null,因为这是静态方法,不需要借助实例运行。

5. 新建实例

1
2 public Object newInstance(String className, Object[] args) throws Exception {
3 Class newoneClass = Class.forName(className);
4
5 Class[] argsClass = new Class[args.length];
6
7 for (int i = 0, j = args.length; i < j; i++) {
8 argsClass[i] = args[i].getClass();
9 }
10
11 Constructor cons = newoneClass.getConstructor(argsClass);
12
13 return cons.newInstance(args);
14
15 }
这里说的方法是执行带参数的构造函数来新建实例的方法。如果不需要参数,可以直接使用newoneClass.newInstance()来实现。
Class newoneClass = Class.forName(className):第一步,得到要构造的实例的Class。
第5~第9行:得到参数的Class数组。
Constructor cons = newoneClass.getConstructor(argsClass):得到构造子。
cons.newInstance(args):新建实例。

6. 判断是否为某个类的实例

1 public boolean isInstance(Object obj, Class cls) {
2 return cls.isInstance(obj);
3 }

7. 得到数组中的某个元素

1 public Object getByArray(Object array, int index) {
2 return Array.get(array,index);
3 }

Gmail的一点东西

自己笨 现在才知道

由于Gmail账户的用户名可以使用“.”、“+”等特殊字符,而Gmail会过滤掉信箱地址中的这些特殊字符, 那么岂不是意味着 我给 ec.beta@gmail.com写邮件 ecbeta@gmail.com 也能收到. 那岂不是乱套了. 事实上是的.你给ec.beta@gmail.com写邮件 ecbeta@gmail.com是肯定能收到. Gmail采用了一个比较极端的处理方式如果你申请了ecbeta@gmail.com那么什么ec.beta@gmail.com e.c.beta@gmail.com等等一些列都被你申请掉了.你回去可以试了看看. 这样就有一个好处了.你可以给人留邮箱ec.beta@gmail.com 什么的. 还有Gmail会忽略用户名后面加号的内容比如ecbeta+sex@gmail.com实际上是发到ecbeta@gmail.com或者是ec.beta@gmail.com 主要是看你注册的是哪一个了. 不过这个实际地址最后收到的时候还是ecbeta+sex@gmail.com. 这样你就可以自己定义一个过滤器什么的.

当然你登录的时候还是需要你注册时候选择的那个邮箱..

因为 Gmail 不会将用户名中的点识别为字符,从 Gmail 地址添加或删除点不会更改实际的目标地址。 发送至 yourusername@gmail.com, your.username@gmail.com 和 y.o.u.r.u.s.e.r.n.a.m.e@gmail.com 的邮件都会送达您的收件箱,而且只有您能收到。

对于某个给定的用户名,Gmail 仅允许注册一次。 一旦您注册了某个特定的帐户,新帐户永远都不能使用您的帐户的任何点变体形式。 如果您认为某封邮件是错误地发送给您的,我们建议您与发件人联系,通知他或她地址有错。

如果您创建的帐户的用户名中包含点,但想要进行更改,则可编辑”回复地址”。 要编辑回复地址,请执行如下操作:

1. 点击任一 Gmail 页顶部的设置。
2. 打开帐户标签。
3. 找到标记为默认的电子邮件地址,然后点击编辑信息。
4. 点击指定不同的”回复”地址。
5. 在”回复地址”字段中输入不带点的用户名。
6. 点击保存更改。

出于安全考虑,在登录 Gmail 时,您需要输入最初作为用户名组成部分的所有的点。

哎自己才知道的. 原来我注册了一个邮箱实际上是注册了千千万万个邮箱.无数个邮箱啊. ec………beta@gmail.com.多少个点………..

Linux版QQ

腾讯提供Linux版的QQ下载了。不过功能不是很强大,倒是很美观。我还没有使用,因为这段时间系统一直是用的windows。有时间去下一个做测试一下,看看好不好。
不过不好的事情是LumaQQ是不是也即将不存在了。

专横的QQ。。。。可是很多人在用,没办法我也在用。。。

[转载]《谷歌金山词霸》发布了!

你一定有过这样的烦恼:面对整页英文的国外网站不知所云?手头的翻译软件对生僻的词汇束手无策?还有就是看着新的词汇从互联网上不断涌出,正在使用的软件却来不及整合这些词汇?……

现在,这些烦恼将不复存在!谷歌和金山联合发布的基于互联网的“谷歌金山词霸”将解决以上所有问题。多说无意,还是让我们切实感受一下它强大的翻译能力吧!

1.网页的通篇翻译

打开《谷歌金山词霸》,会发现相比以往版本,在“词典”和“例句”菜单旁新加入了“翻译”的下拉菜单。翻译文字和段落时可以全部显示在同一页面中,方便了用户。同时在最下方加入了翻译网页功能,你只需输入网页链接地址,便可轻松获得整个网页的翻译结果。


庞氏骗局

庞氏骗局是一种最古老和最常见的投资诈骗,是金字塔骗局的变体,很多非法的传销集团就是用这一招聚敛钱财的,这种骗术是一个名叫查尔斯·庞齐的投机商人“发明”的。

  查尔斯·庞齐(Charles Ponzi)是一位生活在19、20世纪的意大利裔投机商,1903年移民到美国,1919年他开始策划一个阴谋,骗人向一个事实上子虚乌有的企业投资,许诺投资者将在三个月内得到40%的利润回报,然后,狡猾的庞齐把新投资者的钱作为快速盈利付给最初投资的人,以诱使更多的人上当。由于前期投资的人回报丰厚,庞齐成功地在七个月内吸引了三万名投资者,这场阴谋持续了一年之久,才让被利益冲昏头脑的人们清醒过来,后人称之为“庞氏骗局”。

Synonym: Pyramid Scheme
A fraudulent investment scheme that promises high returns which are derived from an inflow of new investors’ funds rather than from sound investments. The scheme collapses when there are not enough new investors to pay the old investors. Also known as a Pyramid Scheme.

什么是云计算

这个好像还是比较流行的一个术语.我自己也不是太明白这个词的含义.Google百度全上了,得到一些答案.

“云计算”(Cloud Computing)是分布式处理(Distributed Computing)、并行处理(Parallel Computing)和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。

云计算的基本原理是,通过使计算分布在大量的分布式计算机上,而非本地计算机或远程服务器中,企业数据中心的运行将更与互联网相似。这使得企业能够将资源切换到需要的应用上,根据需求访问计算机和存储系统.