Archive for 技术手册

设计还是BUG

小白买回来有段时间了, 在这之前也在网上看过很多评价, 觉得还可以吧. 用的时候发现了,caps lock键的确如网上评价的一样并不是很灵, 有时按了下去发现根本没有反应,本打算拿去换的,但是看了很多评论以后发现这个可能是一个通病, 再加上影响不是太大也懒得去管了, 不过昨天在搜索mac快捷键的时候发现了苹果官网给出的下面的说明. 原来是特意设计的啊. 只是我突然疑惑了, 这个究竟是有意而为之还是本身就是一个问题呢? 只是换了一种方式而已. 就像当初有人提出ipod的金属外壳容易划伤,Jobs给出的回答是这样你就有一个独一无二的ipod了. 也许这也是苹果的魅力所在吧, 看来苹果的商业的头脑不是一般人能学到的. 实在是佩服.

基于 Intel 的 Apple 便携式电脑:对 Caps Lock 键进行了修改,以减少意外激活的发生
Last Modified: April 14, 2009
Article: HT1192
摘要
在有些基于 Intel 的 Apple 便携式电脑上,按 Caps Lock 键可能不会立即激活大写锁定功能。

受影响的产品
键盘, MacBook (13 英寸,2007 年末期), MacBook (13 英寸,2008 年初期), MacBook Pro(15 英寸,2008 年初期), MacBook Pro(17 英寸,2008 年初期), MacBook Air, MacBook Pro(17 英寸,Late 2008), MacBook Pro(15 英寸,Late 2008), MacBook Air(Late 2008), MacBook (13 英寸,铝,Late 2008), MacBook(13 英寸, Late 2008), MacBook Pro(17 英寸,2009 年初期), 132252
这些电脑上的大写锁定功能经过专门设计,以便减少意外激活的发生。该按键现必须按下稍微长些时间,才能激活大写锁定功能。

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. 得到某个类的静态属性

public Object getStaticProperty(String className, String fieldName) throws Exception {
Class ownerClass = Class.forName(className);
Field field = ownerClass.getField(fieldName);
Object property = field.get(ownerClass);
return property;
}
//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.多少个点………..