2008年12月19日星期五

结构和联合

结构的数据成员各自占用一块内存空间, 它们形成一个整体, 所占空间是全部成员所占空间的总和。联合与此不同, 它的数据成员重叠挤占同一段内存空间, 有点像"一套班子, 多块招牌", 它们形成的整体, 所占空间取成员中占用空间最大者。下图表示了结构和联合与区别:

struct A {
    int x;
    float y;
};

 
xy
    
    
 

结构A拥有2个成员:
    x: 4字节, 整数
    y: 4字节, 单精度实数
两个成员各自分配内存空间
整个结构占空间8字节

union B {
    int x;
    float y;
};

 
x
    
y
 

联合B拥有2个成员:
    x: 4字节, 整数
    y: 4字节, 单精度实数
两个成员挤占同一段内存空间
整个联合占空间4字节

在程序设计中, 联合一般用于把同一段内存空间, 根据不同的情况存储不同类型的数据。下面以几何图形为例说明结构和联合的用法。

对于点, 需要保存该点的横坐标x和纵坐标y; 对于直线, 需要保存直线方程ax + by + c = 0的三个系数; 对于矩形, 需要保存两个点 —— 左上角p1和右下角p2的坐标; 对于圆, 需要保存圆心点center的坐标和半径radius等, 下面是点、线、矩形和圆的结构定义:

POINT结构表示点, 它有两个成员, 分别是点的横坐标x(实数)和纵坐标y(实数):

struct POINT { // 点(16字节)
    double x, y; // 坐标: (x, y)
};

xy
        
        

LINE结构表示直线, 它有三个成员, 分别是直线方程的三个系数(实数):

struct LINE { // 线(24字节)
    double a, b, c; // 直线方程: ax + by + c = 0
};

abc
        
        
        

RECT结构表示矩形, 它有两个成员, 分别是左上角和右下角的点(POINT结构):

struct RECT { // 矩形(32字节)
    POINT p1, p2; // 两点: 左上角和右下角
};

p1p2
xy
        
        
xy
        
        

CIRCLE结构表示圆, 它有两个成员, 分别表示圆心点(POINT结构)和半径(实数):

struct CIRCLE { // 圆(24字节)
    POINT center; // 圆心
    double radius; // 半径
};

centerradius
xy
        
        
 
        

对于一个几何图形, 它要么是点, 要么是直线, 要么是矩形, 要么是圆, ...。它不可能既是点, 又是线, 所以只需要用一套内存空间来表示即可。这里可以用联合来表示它:

union SHAPE { // 几何图形(32字节)
    POINT p; // 点(16字节)
    LINE l; // 直线(24字节)
    RECT r; // 矩形(32字节)
    CIRCLE c; // 圆(24字节)
};

p(点) 
l(直线) 
r(矩形)
c(圆) 
        
        
        
        

虽然从理论上说可以这么做, 但实际使用时却不方便, 因为我们并不清楚这个联合现在到底表示的是什么! 下面是改进的方案, 增设一个标记成员来识辨现在的图形到底是什么! 我们当然可以用编号来表示, 比如: 0 - 表示点, 1 - 表示直线, 2 - 表示矩形, 3 - 表示圆, ...。为了方便, 使用枚举来代替编码, 更直观:

enum SHAPE_TAG {point, line, rect, circle}; // 图形标识类(枚举)

SHAPE_TAG是枚举类型名, 该类型可取的值有: point, line, rect, circle, 这四个单词分别表示整数0, 1, 2, 3, 用来表示图形类别编号。下面是几何图形的结构定义, 在结构中嵌套了一个无名的联合:

struct SHAPE { // 几何图形结构(36字节)
    SHAPE_TAG tag; // 图形标记(4字节);
    union { // 图形联合体(32字节)
        POINT p; // 点
        LINE l; // 直线
        RECT r; // 矩形
        CIRCLE c; // 圆
    };
};

tagp, l, r 或 c
    
        
        
        
        

在几何图形结构里, 有两个成员, 一个是图形标记(枚举, 4字节), 另一个是一个图形联合体(32字节), 它要么是点p(16字节), 要么是直线l(24字节), 要么是矩形r(32字节), 要么是圆c(24字节)。

转自:
http://blog.csdn.net/Horse_Lixiang/archive/2006/05/05/708735.aspx

深入探讨C++中的引用

引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用。

  一、引用简介

  引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

  引用的声明方法:类型标识符 &引用名=目标变量名;

  【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名

  说明:

  (1)&在此不是求地址运算,而是起标识作用。

  (2)类型标识符是指目标变量的类型。

  (3)声明引用时,必须同时对其进行初始化。

  (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。

   ra=1; 等价于 a=1;

  (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。

  (6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。

  二、引用应用

  1、引用作为参数

  引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免将整块数据全部压栈,可以提高程序的效率。但是现在(C++中)又增加了一种同样有效率的选择(在某些特殊情况下又是必须的选择),就是引用。

  【例2】:

void swap(int &p1, int &p2) //此处函数的形参p1, p2都是引用 
{ int p; p=p1; p1=p2; p2=p; }

  为在程序中调用该函数,则相应的主调函数的调用点处,直接以变量作为实参进行调用即可,而不需要实参变量有任何的特殊要求。如:对应上面定义的swap函数,相应的主调函数可写为:

main( )

 int a,b;
 cin>>a>>b; //输入a,b两变量的值
 swap(a,b); //直接以变量a和b作为实参调用swap函数 
 cout<< a<< ' ' << b; //输出结果 
}

  上述程序运行时,如果输入数据10 20并回车后,则输出结果为20 10。

  由【例2】可看出:

  (1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。

  (2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。

  (3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。

  如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。

  2、常引用

  常引用声明方式:const 类型标识符 &引用名=目标变量名;

  用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。

  【例3】:

int a ;
const int &ra=a;
ra=1; //错误
a=1; //正确

  这不光是让代码更健壮,也有些其它方面的需要。

  【例4】:假设有如下函数声明:

string foo( );
void bar(string & s);

  那么下面的表达式将是非法的:

bar(foo( ));
bar("hello world");

  原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。

  引用型参数应该在能被定义为const的情况下,尽量定义为const 。


  3、引用作为返回值

  要以引用返回函数值,则函数定义时要按以下格式:

类型标识符 &函数名(形参列表及类型说明)
{函数体}

  说明:

  (1)以引用返回函数值,定义函数时需要在函数名前加&

  (2)用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。

  【例5】以下程序中定义了一个普通的函数fn1(它用返回值的方法返回函数值),另外一个函数fn2,它以引用的方法返回函数值。

#include
float temp; //定义全局变量temp
float fn1(float r); //声明函数fn1
float &fn2(float r); //声明函数fn2
float fn1(float r) //定义函数fn1,它以返回值的方法返回函数值

 temp=(float)(r*r*3.14); 
 return temp; 
}
float &fn2(float r) //定义函数fn2,它以引用方式返回函数值

 temp=(float)(r*r*3.14); 
 return temp;
}
void main() //主函数

 float a=fn1(10.0); //第1种情况,系统生成要返回值的副本(即临时变量)
 float &b=fn1(10.0); //第2种情况,可能会出错(不同 C++系统有不同规定)
 //不能从被调函数中返回一个临时变量或局部变量的引用
 float c=fn2(10.0); //第3种情况,系统不生成返回值的副本
 //可以从被调函数中返回一个全局变量的引用
 float &d=fn2(10.0); //第4种情况,系统不生成返回值的副本
 //可以从被调函数中返回一个全局变量的引用
 cout<< a<< c<< d;
}

  引用作为返回值,必须遵守以下规则:

  (1)不能返回局部变量的引用。这条可以参照Effective C++[1]的Item 31。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。

  (2)不能返回函数内部new分配的内存的引用。这条可以参照Effective C++[1]的Item 31。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。

  (3)可以返回类成员的引用,但最好是const。这条原则可以参照Effective C++[1]的Item 30。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。

  (4)引用与一些操作符的重载:

  流操作符<<和>>,这两个操作符常常希望被连续使用,例如:cout << "hello" << x =" j" x="10)="100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。

  【例6】 测试用返回引用的函数值作为赋值表达式的左值。

#include
int &put(int n);
int vals[10];
int error=-1;
void main()
{
put(0)=10; //以put(0)函数值作为左值,等价于vals[0]=10; 
put(9)=20; //以put(9)函数值作为左值,等价于vals[9]=20; 
cout<< vals[0]; 
cout<< vals[9];

int &put(int n)
{
if (n>=0 && n<=9 ) return vals[n]; 
else { cout<<"subscript error"; return error; }
}

  (5)在另外的一些操作符中,却千万不能返回引用:+-*/ 四则运算符。它们不能返回引用,Effective C++[1]的Item23详细的讨论了这个问题。主要原因是这四个操作符没有side effect,因此,它们必须构造一个对象作为返回值,可选的方案包括:返回一个对象、返回一个局部变量的引用,返回一个new分配的对象的引用、返回一个静态对象引用。根据前面提到的引用作为返回值的三个规则,第2、3两个方案都被否决了。静态对象的引用又因为((a+b) == (c+d))会永远为true而导致错误。所以可选的只剩下返回一个对象了。

  4、引用和多态

  引用是除指针外另一个可以产生多态效果的手段。这意味着,一个基类的引用可以指向它的派生类实例。

  【例7】:

class  A;
class  B:public A{……};
B  b;
A  &Ref = b; // 用派生类对象初始化基类对象的引用

  Ref 只能用来访问派生类对象中从基类继承下来的成员,是基类引用指向派生类。如果A类中定义有虚函数,并且在B类中重写了这个虚函数,就可以通过Ref产生多态效果。

  三、引用总结

  (1)在引用的使用中,单纯给某个变量取个别名是毫无意义的,引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问题。

  (2)用引用传递函数的参数,能保证参数传递中不产生副本,提高传递的效率,且通过const的使用,保证了引用传递的安全性。

  (3)引用与指针的区别是,指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。

  (4)使用引用的时机。流操作符<< 和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。

转自:http://blog.csdn.net/wfwd/archive/2006/05/30/763551.aspx

2008年12月17日星期三

借记卡、贷记卡、准贷记卡、信用卡之间有什么区别

准贷记卡 
准贷记卡(SemiCreditCard)是指持卡人须先按发卡银行要求交存一定金额的备用金,当备用金帐户余额不足支付时,可在发卡银行规定的信用额度内透支的信用卡。 
准贷记卡中存入的资金是有利息的,利率按照央行规定的活期利率执行。 
(1)准贷记卡存款有息(按活期利率计算)。 
(2)准贷记卡不享受免息还款期,。 
(3)准贷记卡额度:信用卡普卡5000元、金卡10000元。 
贷记卡 
贷记卡是指发卡银行给予持卡人一定的信用额度,持卡人可在信用额度内先消费,后还款的信用卡。贷记卡是真正意义上的信用卡,具有信用消费、转账结算、存取现金等功能。它具有以下特点:先消费后还款,享有免息缴款期(最长可达56天),并设有最低还款额,客户出现透支可自主分期还款. 
如何透支: 
贷记卡持卡人不需要在银行备用金,即可在发卡银行规定的信用额度内透支信用卡,一般透支最大数额30000-50000元,不同银行最大透支的数额是不同的,而且根据每个人的信用记录的不同,透支最大数额也会不同。 
透支预期未还的处理: 
透支后,要加收透支利息,每天万分之五,时间为3个月, 如3个月内无任何归还现象,按金融诈骗罪定论,一般1个月不偿还的就会被银行列为黑户观察,越早还越好,最长时间为3个月。 
关于还款金额和期限的问题,一般透支免期是一个月,帐单上会有一个最低还款额度,一般银行设定额是你上月透支总额的10%,如果你还了这个最低还款额,剩下的部分可以计入下月的还款金额,而且透支除了每日万分之一利息之外,还有一个滞纳金的,十元起收,另外信用额度,如果你在申请信用卡时,没有提供相应的财产证明及担保,按照现行银行的最低透支额度去计算的,大概在五千左右,以后透运额的调整会根据你个人的透支及还款的信用度,银行会帮你做出相应的调整。 
如何申请贷记卡? 
贷记卡办理一般需要有人为申请者提供担保。申请人和担保人通常要有固定的工作和一定的经济能力,担保人愿意承担担保责任。在申请办理时,申请人和担保人要同时到场,并且持双方的有效身份证件及复印件各一张。有效身份证件是指身份证、护照、军官证、警官证或公安部门认可的其他有效身份证件。如果两个人都想申请银行卡,双方不能互相担保。根据申请人的资信状况不同,银行确定申请人需要交纳的保证金数额也各不相同。除了要交保证金外,申请人还要交纳相应的手续费,即所谓的年费。年费要每年交一次,根据卡的种类不同及发卡银行的不同,年费标准也不一样,一般在几十元左右或更多。信用卡和贷记卡不能当场就完成办理,用户一般要等1到5个工作日之后才能拿到手中。 
信用卡按使用对象分为:单位卡和个人卡;按信誉等级分为:白金卡、金卡和普通卡;按币种分为:人民币卡、国际卡或兼有两种功能的双币种卡 
信用卡有如下特点: 
1、不需存款即可透支消费,并可享有20-50天的免息期按时还款分文利息不收。 
2、购物时刷卡不仅安全、卫生、方便,还有积分礼品赠送。 
3、持卡在银行的特约商户消费,可享受折扣优惠。 
4、积累个人信用,在您的信用档案中增添诚信记录,让您终生受益。 
5、通行全国无障碍,在有银联标识的ATM和POS机上均可取款或刷卡消费。 
6、全年多种优惠及抽奖活动,让您只要用卡就能时刻感到惊喜。 
7、每月免费邮寄对帐单,让你透明掌握每笔消费支出。 
8、特有的附属卡功能,适合夫妻共同理财,或掌握子女的财务支出。 
9、自由选择的一卡双币形式,通行全世界,境外消费可以境内人民币还款。 
10、免费800电话24小时服务,挂失即时生效,失卡零风险。 
信用卡 
是先消费后还款,还可享受20-50天免利息 

借记卡(DebitCard)是指先存款后消费(或取现),没有透支功能的信用卡。其按功能不同,又可分为转帐卡(含储蓄卡)、专用卡及储值卡。是一种具有转账结算、存取现金、购物消费等功能的信用工具,它还附加了转账、买基金、炒股等众多理财等功能,还提供了大量增值服务。 
借记卡最大的优势就是电子管家功能,消费者可以用它去缴水、电、煤、电话等公用事业费,甚至还可以办理银证转账和银券通炒股业务。现在不少银行都给借记卡赋予了强大的管家功能,消费者应当根据自己的实际利用率,尽可能把保留目标落在功能涵盖面较广、实用性较高的借记卡上。 
但是以前的借记卡给了广大的消费者方便和优惠,而现在方便没有增加,优惠却没有了,截至2008年6月,国有四大银行开始对借记卡实行收费的标准:5元的开卡费,10元的年费,还有每笔2元的同城跨行ATM取款费。所以现在用借记卡应该要想到在最实惠的情况下办理。 
信用卡是商业银行向个人和单位发行的,凭以向特约单位购物、消费和向银行存取现金,具有消费信用的特制载体卡片,其形式是一张正面印有发卡银行名称、有效期、号码、持卡人姓名等内容,背面有磁条、签名条的卡片。我们现在所说的信用卡,一般单指贷记卡。

2008年12月16日星期二

财务起步

反映企业点时间的财务状况:
资产=债务+所有者权益
反映企业经营成果:
利润=收入-费用

2008年12月10日星期三

一觉醒来,突然产生的想法

2008年12月10日一早爬起来,大脑一片混沌,在床上了楞了5分钟,突然脑海中出现了一个想法,记录一下。

昨天收到了小小吴的回复邮件,关于开题报告的事情,他提到的修改意见其实我之前早就想到过了,只是没有提出来。我是11月19日左右提交开题报告的初稿的,现在差不多快1个月了,目前是二次修改进行中。以目前的进度,09年寒假前开题看来希望不是很大。

09年的寒假从1月19日开始,刚看了研究生院的通知,1月9日至2月16日,停止办理毕业论文盲审的事宜;寒假期间停止办理论文答辩的事宜。也就是说暑假期间6月底至9月初也是这种情况。也就是说如果年前不能顺利开题,拖到年后,2月份又很短暂,再加上刚过完年,很有可能各个部门的办事效率处于最低点,开题极有可能拖到3月初。3月初开题的话,最好情况9月份答辩。9月份答辩,那就11月份、12月份能够拿到毕业证书、学位证书。

也就是说09年底10年初才能够难道两证?

现在在夏普实习,是否可以辞职,不是找工作,而是找另外一家公司实习?让后以在两家公司实习过的经历,参加09年的秋季校园招聘?

2008年12月9日星期二

一些计算机核心期刊的投稿经验

1 .《小型微型计算机系统》 沈阳 
审稿周期:四个月 (不固定) 
发表周期:一年半(不办理加急业务) 
审稿费:100元(初审通过后才要求作者寄审稿费,这个要赞一下!) 
服务态度:极好 
投稿方式:邮寄打印稿,交付审稿费后可在其主页上查询稿件状态。 
转一下华中科技大学一位朋友的经验: 
****** 
我中小微的经验: 
1) 看看小微最近2年的杂志,有没有相关方面的文章,如果没有,中的机会大。 
2)参考文献要尽量多引用那些是小微杂志编辑委员会写的文章的。 
3)小微要求内容比较新,而且注重实现,要有数据和实现。 
4)运气好的1个月就可以中。 
****** 
2.《计算机应用》 成都 
审稿周期:三个月(一般两个月左右能知道录用与否) 
发表周期:半年(我所了解到最快的) 
审稿费:50元 
服务态度:较好 
投稿方式:在其网站上在线投稿 
对文章的质量要求较高,杂志社工作认真负责,信息反馈较快,送审两个月后基本上都能收到稿件的最终处理结果。 
对是否挂基金号与项目编号不是特别看重,比较适合我这样没有基金资助的学生,呵呵。 
3.《计算机科学》 重庆 
审稿周期:两个月(快慢不等) 
发表周期:8个月到一年不等(有时候可以加急发表) 
无需审稿费 
服务态度:一般 
投稿方式:邮寄打印稿,交付审稿费后可在其主页上查询稿件状态。 
比较注重较为新颖的文章,如果挂有基金号或者重大项目编号,一周内就能返回录用通知。在其网站上经常看到有当天收稿,第二天就录用的,估计是被杂志社约稿了,呵呵。 
4.《计算机工程》 上海 
审稿周期:两个月 
发表周期:一年左右(可以加急发表) 
审稿费:50元 
服务态度:较好 
投稿方式:e-mail,可在其网站上留言查询审稿情况 
最大的有点就是审稿快,一般一个半月就能收到消息,两个月内肯定能收到消息。有篇文章今天才让我修改,呵呵。 
有基金号或者项目编号等的文章录用机率较高。 
5.《计算机应用研究》 成都 
审稿周期:三个月 
发表周期:15个月左右 
无需审稿费 
服务态度:较好(e-mail反馈很快) 
投稿方式:e-mail,可在其网站上留言查询审稿情况 
特别注重有基金号或者项目编号等的文章,最快的一周内就能收到录用通知。很喜欢把作者的稿件录用在增刊上,商业味道太浓。 
不过有一点要赞,就是杂志社寄来的录用通知上编辑的字迹很隽秀,看着很养眼 
6.《计算机工程与设计》 北京 
审稿周期:三个月 
发表周期:一年左右(可以加急发表) 
审稿费:100元 
服务态度:一般 
投稿方式:在线网站投稿,较为正规 
有同学投中过,比较亲睐有基金号或者项目编号等的文章。审稿时间较长。有趣的是,编辑部寄来的发票上还可以刮奖。 
7.《计算机工程与应用》 北京 
审稿周期:号称是三个月,其实编辑透露最长有四个半月的 
发表周期:9个月以上 
审稿费:50元 
服务态度:较差 
投稿方式:在线网站投稿 
以前被这个编辑部郁闷过一回,交了审稿费如果被退稿,审稿意见都是千篇一律的一条:缺乏创新。感觉很不负责任,即便不录用,返回给作者一些有参考价值的审稿意见,应该是一个编辑部起码能够为作者做的一点事情。从这一点看,杂志社没有发展前途。(可能带一些个人感情色彩,大家批判的吸收,呵呵) 
8.《微型机与应用》 北京 
审稿周期:两个月 
发表周期:半年左右 
无需审稿费 
投稿方式:e-mail 
服务态度:很差(话没说完编辑就会撂电话,BS) 
稿件较多,所以比较难中,有些时候稿件投到这家不录用,再投到《计算机科学》等刊物却录用了,搞不懂为什么。 
9.《微型机与计算机》 西安 
审稿周期:两个月 
发表周期:8个月左右 
无需审稿费 
投稿方式:邮寄打印稿 
服务态度:较好 
杂志档次较低,比较好中,不过也看运气,暑假前投稿审稿会快一些。录用后不发邮件通知,而是直接给作者寄挂号信通知录用。较为另类,呵呵。

2008年11月19日星期三

小句作为句子成分一部分的相关句型

1.小句(简体形)+かもしれません
也许。。。,或许。。。,说不定。。。
午後雨が降るかもしれません。
森さんは今日会社を休むかもしれません。
あの二人は 仲(なか)がいいですね。ーあの二人は結婚するかもしれませんね。
クレジットカードーを 落(お)としたかもしれません。
来週は暇(ひま)かもしれません。
明日は雪かもしれません。
2.小句(简体形)+そうです
据说。。。,听说。。。
馬さんの息子さんは 今年小学校に入学するそうです。
天気予報によると、明日は雨だそうです。
うわさんによると、あの店のラーメンは美味しくないそうです。
森さんは来週の土曜日は暇だそうです
3.小句(基本型)+ために、小句
表示目的,“为了。。。”
日本留学のために日本語を勉強しています。
運動(うんどう)をするために、、新しい靴を買いました。
林さんは駅へ 行くために、バスに乗りました。
小句1为非意志性表现时,表示原因,“因为。。。”,“由于。。。”
事故があったために、電車が遅れたんです。
明日マラソン大会があるために、この道路は 通行禁止になります。
この村は交通が不便なために、住んでいる人が少ないです。



动词た形相关句型

1.动词た形+ことがある(あります)
曾经。。。过
わたしは すき焼きを 食べたことがあります。
北京へ 行ったことがありますか。 -いいえ、一度も行ったことがありません。 -いいえ、ありません。

2.动词た形+ことがない
从未。。。过


2008年11月18日星期二

动词て形相关句型

1.动词て形+いく
表示由近到远的行动或状态
飛行機(ひこうき)はだんだん遠く飛んでいきました。
李さんは急いで帰っていきました。

2.动词て形+くる
表示由远到近的行动或状态
寒いなって、風邪を引く人が増えてきました。
ずいぷんたくさん人が乗(の)ってきましたね。

3.动词て形+みる
表示试探性地做某事
この料理は美味しいかどうか一度食べてみてください。
太田さんは中国語で手紙をかいてみました。
美味しいそうですね。食べんてみます。
それはおかしい。もう一度調(しら)べてみてください。

4.动词て形+しまう(しまいます)
表示完了,不能恢复原态或与愿望相反的结果等;结果是令人不愉快的事情。
銀行(ぎんこう)のカードをなくしてしまって、困(こま)っています。
森さんはボーナスを全部つかってしまいました。
大切(たいせつ)な種類をうっかりわすれてしまいました。
むりをすると、病気(びょうき)になってしまいますよ。

5.动词て形+おく(おきます)
表示事先做好某种动作或保持某种状态。
お客さんが来る前に、へやを掃除しておきます。
明日は忙しいです、今夜はゆっくりや休んでおいてください。
訪問する前に、一度電話しておきます。
帰りの切符をかっておきますか。-いいえ、買っておかなくてもいいです。

6.动词て形+やる(やります)、あげる(あげます)
表示给第一人称以外的其他人称作某种事情
森さんはお年寄(としよ)りの荷物を持ってあげました。
おじいさんが孫(まご)にほんを読んであげました。
この本をあなたに貸してあげます。

7.动词て形+くれる(くれます)、くださる(くださいます)
表示给第一人称做某事请,第一人称是受益者
母はセーターを送ってくれました。
女の人がわたしの財布(さいふ)を拾(ひろ)ってくれました。
友達がおもしろい本を教えってくれました。
ごみを出してくれますか。 -いいですよ。

8.动词て形+もらう(もらいます)、いただく
表示说话人请他人为自己做某事,自己是受益者
田中さんに病院(びょういん)の電話(出んわ)番号(ばんごう)を教えてもらいました。
森さんは李さんに北京を案内(あんない)してもらいました。
係の人に切符(きっぷ)を交換(こうかん)してもらいました。
林さん、もう少し まってもらいたいのですが。 ーわかりました。

9.动词て形+もいい(です)、もかまいません、もかまわない
表示许可、允许,“可以。。。”,“。。。也可以”
家で 仕事を してもいいです。
ここで 写真を とってもいいですか。 -いいですよ。
家に 帰ってもいいですか。 -はい、帰ってもいいです。
このことは今日決めてもかまいません。
10.动词て形+はいけません(はいけない)
表示禁止
ここで 写真を撮ってはいけません。
飛行機のなかで タバコをすってはいけません。
教室で ものを食べではいけません。
この部屋に 入ってはいけません。 -はい、入ってはいけません。 -いいえ、はいってはいいです。


2008年11月17日星期一

名词的相关句型

1.(名词)にする
表示选择、决定的结果
喉(のど)が渇(かわ)いたから、コーヒーにします。


动词意志形的相关句型

1.动(意志行)+と思います
自己想要做某事(表达一种意志)。我想。。。
会社をやめて、2年(ねん)ぐらい英語(えいご)を勉強(べんきょう)しようと思います。
今日、会社を休もうと思います。
もう遅いので、そろそろ帰ろうと思います。


动词基本形/ない形相关句型

1.动(基本形/ない形)+つもります
表示说话之前已经形成的意志、打算
来月(らいげつ)アメリカへ旅行に行くつもります。
今度の日曜日に遊園地へ行くつもります。
ボーナスで車を買うつもります。
もうタバコは吸わないつもります。

2.动词ない形で(ずに)
不。。。就。。。;没有。。。就。。。
兄は今日、鞄(かばん)を持たずにいえをできました。

3.动词なければなりません(なければならない)
表示必须。。。;一定要。。。
老人(ろうじん)の面倒(めんどう)を見えなけらばなりません。
李さんは 今日 早く 帰らなければなりません。
この薬(くすり)は毎日 飲まなければなりません。
すぐに  書類(しょるい)を送らなければなりません。
4.动词+なくてもいいです
表示许可,“可以不。。。”,“不。。。也可以”
あしたは  残業(ざんぎょう)し なくてもいいです。
あわて なくてもいいですよ。
靴を 脱(ぬが) なくてもいいですか。

5.动词+なくてはいけない
必须。。。;如果不。。。就不行

6.动词基本形/动词ない形+ことがあります
有时。。。
そのパソコンは たまに フリーズすることがある(あります)。
ときどき 寝坊(ねぼう)することがあります。
たまに朝ご飯を 食べないことがあります。

7.动词基本型/动词ない形+こともある
有时也。。。

8.动词基本型+ことができる(できます)
能。。。,能够。。。,全。。。表示可能
スミスさんは ピアノ を 弾(ひ)くことができます。
森さんは中華料理(ちゅうかりょうり) を つくることができますか。 -はい、できます。
日本語で 手紙を書くことができます。


动词连用形相关句型

1.お+一类动/二类动+になる
构成尊敬语,表示对方的行为动作。一类动词去掉"ます"只有一个音节的词,如"みます","ねます","います"不能用这种形式。三类动词也不可以。
この新聞(しんぶん)はお読みになりましたか。
お客様はもうお帰りになりました。
お食事はもうお済みになりましたか。
旅行の日程はもうお決めになりましたか。

2.お+一类动/二类动+ください
构成尊敬语,表示对方的行为动作。劝说听话人做。。。事情时使用。1中不能使用的情况2中亦不能使用。
パスポートをおみせください。
どうぞお座りください。
エスカレーターをお利用ください。
こちらのドアからおはいりください。

3.お+一类动/二类动+する(いたす)
构成自谦语,通过压低自身或说话人表示敬意的表达方式。
修理ができたら、お知らせいたします。
お荷物は私がお持ちします。
昨日メールをおくりしたんですが。。。
  -ええ、拝見しました。先ほど返事をお出ししました。
明日の午後、ご連絡します。
4.动+始(はじ)める(はじめます)
表示动作开始。。。
桜が咲きはじめるのはいちごろですか。
このほんは、昨日読み はじめたばかりです。
あめが ふり はじめました。
だんだんひとか 帰り 始めましたね。

5.动+だす(だします)
表示变化的开始;。。。起来
子供が泣(な)きだして、困りました。
さっきまであんなに機嫌(きげん)がよかったのに、急に 怒り 出してびっくりしました。

6.动/一类形/二类形+すぎる(すぎます)
表示动作行为超过某限制,“过于。。。”
きのう、のみすげて、今日も頭(あたま)が痛(いた)い。
昼ご飯をたべすげました。
このスープはあつすげませんか。
この説明(せつめい)は複雑(ふくざつ)すげます。

7.动+たい、たいと思う
表示说话人自己的愿望
わたしは 映画を 見たいです。
今日は お酒を飲みたくないです。
あなたは なにを したいですか。 -何もしたくありません。

8.动+たがる
表示第三人称的愿望
山田さんは新しい辞書を買いたがっています。
9.动+続(つづ)ける
表示动作行为的持续进行
古い建物を修理したがら 使いつづけていました。
三時間 歩き続けました。
二時間前からずっと 立ちつづています。もう疲(つか)れました。

10.动词+終わる(終わります)
表示动作的终了、完了
その本はもう 読み 終わりました。
先週もらった薬はもう 飲み終わりました。
11.动词+やすい
容易。。。,不难。。。
このポールペンはとても書きやすいです。
この本は読みやすいです。

12.动词+にくい
不容易。。。,难以。。。
この店の場所はわかりにくかったです。
運動(うんどう)をしている人太(ふと)りにくいです。
13.动词+かた
。。。方法(做法)

14.动词+なさい
表示轻微的命令,“请。。。”
できる人は手をあげなさい。
15.动/形+そうです
看上去像。。。,好像。。。
一类形去掉结尾"い"加"そうです"
このケーキはとても美味しそうです。
李さんは仕事が大変そうです。
雨が降りそうです。
あの人は将来 偉くなりそうです。


2008年11月14日星期五

UltraEdit 对UTF-8文件的自动处理

关于Unicode 编码,这里有篇文章 可以参考。Unicode是几种多字节编码格式的统称,其中使用广泛的有UTF-8与UTF-16,而通常人们说Unicode时,实际是在指UTF-16编码,UltraEdit 就是这样,为了避免混淆,下面都按照标准引用名字。 

使用UltraEdit 打开一个UTF-8 编码的文件,然后按ctrl+h 进入16进制模式查看文件内码,你会发现文件已经被转换成UTF-16 编码,并添加了UTF-16 little endian 的BOM :FF  FE,UltraEdit 状态栏文件的尺寸也增加了不少。其实大可不必担心,可以回到正常模式继续编辑并保存,保存后的文件并没有改变编码格式,只是在编辑时使用UTF-16格式而已。

因此,如果通过UltraEdit打开文件查看BOM 来确定文件格式,并不是安全的。UltraEdit 下方状态栏则真实的显示了当前打开文件的实际编码格式,而不是当前编辑的编码格式。 对于一个普通Ascii 格式的文件,它显示为DOS 或者UNIX,对于一个包含有UTF-8编码字符的文件,它显示为U8-DOS 或者U8-UNIX,对于UTF-16编码的文件,它显示为U-DOS 或者U-UNIX。

我们知道,UTF-8 对于Ascii 字符的编码与原有的Ascii 编码一致,因此假如我们删除了一个UTF-8 DOS文件中所有Ascii 以外的字符,保存后再打开,UltraEdit 将显示为DOS(Ascii)。

如果我们不希望UltraEdit 在打开UTF-8 文件时自动转为UTF-16 格式编辑,我们可以修改配置。如下图,确保“自动检测 UTF-8文件”不被选中。

需要注意的是,如果取消了这个选项,UltraEdit打开包含UTF-8编码的文件会产生乱码。

UltraEdit 在File-Convertions 菜单中提供了多种编码格式之间的转换,这将影响到保存的文件编码,转换后,在状态栏也能看到相应变化。在有些选项后标明有(Unicode Editing) 或者(ASCII Editing),这指定了编辑时显示用的编码,并不影响保存文件所用的编码,要区分开。

工具WinHex 可以用来查看文件16进制内码。

以前写程序的时候有关对二进制文件的处理经常使用UE来对文件进行编辑,所以不注意编码格式很容易出现一些不必要的疏忽和困惑。

转:http://www.aiview.com/2007/02/ultraedit_auto_detect_utf-8_file.html

2008年10月29日星期三

动词的"ない形"

一类动词:
把"ます形"去掉"ます"后的最后一个音变成相应的"あ段"音,后加"ない";如果最后音为"い",把"い"变成"わ"再加上"ない"
二类动词:
把"ます"去掉后加上"ない"
三类动词:
"来(き)ます"变成"来(こ)ない",把"します"变成成"しない"

语法:
动ないで ください
表示否定的命令
部屋の かぎお忘れないでください。

动なければ なりません
表示必须。
李さんは 今日 早く 帰らなければなりません。

动なくても いいです
表示不做某事也可以。
あしたは 残業(ざんぎょう)し なくてもいいです。


2008年10月27日星期一

日语中的比较

名1 は 名2より 一类行/二类行です
名词1比名词2更具有形容词所表示的性质
李さんは 森さんより 若(わか)いです。
中国(ちゅうごく)は 日本(にほん)より 広いです。
上海(シャンハイ)は 北京(ペキン)より にぎやかです。
中国は 日本より ずっと 広いです。
名2より 名1のほうが 一类行/二类行です
与名2相比,名1跟具有形容词的性质
日本より 中国のほうが広いです。
北京より 東京のほうが暖かいです。
大坂より 東京の方がにぎやかです。
名1 は 名2ほど 一类行く ないです/二类行では ありません。
名1和名2比,更不具有形容词的性质。
東京の冬(ふゆ) は 北京のふゆ ほど 寒くないです。
神戸は大坂ほどにぎやかではありません。
私の部屋は王さんの部屋ほど きれいでは ありません。
名1 の中(なか)で 名2 が いちばん 一类行/二类行です
在某个范围内,名2最具有形容词的性质。
スポーツのなかで サッカーが おもしろいです。
日本料理(にほんりょうり)の中で 寿司が いちばん おいしいです。
名1と名2と どちらが 一类行/二类行ですか
名1和名2哪个更具有形容词的性质?
日本語と 英語と どちらが 難しいですか。
どの 名/いつ/どれ/だれ/何が いちばん 一类行/二类行 ですか
三个以上事物中,最具有形容词性质的东西?
このなかで どの料理が いちばん おいしいですか。

2008年10月23日星期四

语法汇总

名 は 名 です
相当于汉语的"~是~"。

名 は 名 ではありません
相当于汉语"~不是~"

名 は 名 ですか
相当于汉语"~是~吗?"

名 の 名
表示前面的是后面的名词的从属机构或单位等

これ/それ/あれは 名 です
相当于"这个","那个"。

名[场所]に 名[物/人]が あります/います
某处有某人/物

名[物/人]は 名[场所]に あります/います
某人/物在某处

名[时间]に 动
表示动作发生的时间

名[时间]から 名[时间]まで 动
表示某动作发生在某个时间段

名[场所]へ 动
使用"行きます""帰ります"等表示移动的动词时,表示移动的目的地,这里"へ"读作"え"

名[场所]から 动
使用移动动词时,表示移动的起点

名[交通工具]で 动
交通工具用"で"表示,不用交通工具而步行用"歩いて"

名 を 动
动词的对象用"を"表示

名[场所] で 动
表示动作进行的场所,表示存在的场所用"に"

名1[人] は 名2[人]に 名3[物]を あげます
(名1)送给(名2)(名3)

名1[人] は 名2[人]に 名3[物]を もらいます
(名1)从(名2)得到(名3)

名[人]に 会います
表示所见到的对象用助词"に"

动词的て形

一段动词、カ变、サ变动词接"て"事,动词连用形和接"ます"时相同。
五段动词比较例外。
词尾是"く"和"ぐ"的动词,接"て"时,要发生"イ音变",即去掉"く"或"ぐ",加上"いて"或"いで"。
書(か)くー>書きますー>書いて
嗅(か)ぐー>嗅ぎますー>嗅いで
词尾是"う","つ","る"的动词,接"て"时,要发生"促音变",
買(か)うー>買いますー>買って
待(ま)つー>待ちますー>待って
知(し)るー>知りますー>知って
词尾是"ぬ","ぶ","む"的动词,接"て"时,发生"拨音变",
死(し)ぬー>死にますー>死んで
呼(よ)ぶー>呼びますー>呼んで
読(よ)むー>読みますー>読んで
动词"行く"接"て"是,不发生"イ音变",而发生"促音变",是个例外
行くー>行きますー>行って

语法:

动て 动【相继发生】
表示两个以上的动作依照时间的顺序相继发生。
昨日 デバートへ 行って 買い物します。
家へ 帰って 宿題(しゅくだい)をします。
図書館え 行って 本を かりて、家へ 帰ります。

动でから 动【相继发生】
表述两个以上动词按时间顺序相继发生,但でから在一个句子中不能出现两次以上
李さんは 毎晩(まいばん) ラジオを 聞(き)いてから 寝ます。

动て ください
请求某人做某事
ここに 住所(じゅしょ)と 名前を 書いて ください。

动て います【正在进行】
表示动作或变化正在进行时
小野さんは 今 新聞(しんぶん)を 読んで います。

动ても いいです
表示许可
家で 仕事を しても いいです。

动ては いけません。
飛行機(ひこうき)のなかで タバコを すってはいけません。

名て います【结果状态】
表示动作结束后留下的结果状态
森さんは 車を 持(も)っています。

2008年10月22日星期三

形容词

一类形容词 :

一类形容词是以"い"结尾的形容词。做谓语是后面加"です"。
四川料理(しせんりょうり)は 辛(から)いです。
あのスープは 冷(つめ)たいです。
このお茶(ちゃ)は 熱(あつ)いです。
一类形容词做谓语时的否定形式是将词尾的"い"变成"く"在加上"ないです"或"ありません"
このスープは (熱)あつくないづす。
今日(きょ)は (寒)さむくないづす。
この本(ほん)は 高く(たかく)ありません。
"いいです"的否定形式是"よく ないづす"或"よく ありません"
一类形容词作谓语是的过去形式
将词尾的"い"变成"かった"在加上"です"。其过去形式的否定形式是则是把词尾的"い"变成"く 
なかったです"或者"く ありませんでした"
旅行(りょこう)は 楽(たの)しかったです。
昨日(きのう)は 寒(さむ)くなかったです。
昨日(きのう)は  寒(さむ)くありませでした。
"いいです"的过去形式是"よかったです"、过去否定则是"よくなかったです"或"よくありませんでした"
一类形容词修饰名词
可直接修饰名词
広(ひろ)い国(くに)
青(あい)い海(うみ)
おいしい料理(りょうり)
白(しろ)い紙(かみ

二类形容词
二类形容词是不以"い"结尾的形容词。做谓语时要在后面加"で"。过去形式是"でした"。
京都(きょうと)の紅葉(もみじ) 有名(ゆうめい)です。
この通(とお)はり静(しず)かです。
この町(まち)はにぎやかでした。
二类形容词做谓语时的否定形式是"二类形容词+でわ ありません"。过去形式的否定形式是"で
わありませんでした"。在口语中"でわ"一般说成"じゃ"。
この通(とお)りは にぎやかでわありません。
昨日(きのう)は 暇(ひま)じゃありませんでした。
二类形容词修饰名词时,用"二类动词+な+名词"的形式。
奈良(なら)は静(しず)かな町(まち)です。
奈良(なら)はにぎやかな町(まち)でわありません

WebWork程序骨架

初次学习了WebWork,花了一个下午终于把第一个Demo程序发布成功了,简单的把WebWork程序的骨架说明一下。

环境:Eclipse3.4.0+Tomcat6.0.18+tomcatPlugin3.2.1

为了在Tomcat里面发布方便,用了Eclipse上的一个插件tomcatPlugin,建立一个Tomcat Project,关于Eclipse里面Tomcat的配置在这就不说了。

*.jsp文件是工程有关的jsp前端页面,action以及相关的配置文件均在WEB-INF文件夹下面。

WEB-INF包括了三个文件夹lib,classes,src,以及目录下的web.xml文件。在web.xml文件中主要定义了引用的标间库和servlet的一些设置,以及一些事件监听等等。

scr下面主要存有一些action。这个文件是与WEB-INF下的classes夹是相互映射的,classes下的文件即是scr下的文件经过编译后的文件。
根目录下的xwork.xml文件,是该程序的骨架配置文件,主要定义了该WebWork程序的action,result和intercepter。
webwork.properties是相关的属性文件,其作用以后在说明。
剩下的文件就是一些java写的action类,比如HelloWorld.java

lib文件夹下面主要是一些引用的jar包

xwork.jar WebWork构建所依赖的XWork类库
common-logging.jar 通用的日志类库,WebWork用它为Log4J或者JDK1.4+提供透明的日志记录
oscore.jar OSCore,一个来自OpenSymphony公司的通用功能类库
velocity-dep.jar 依赖的Velocity类库
ognl.jar 对象图导航语言(OGNL),WebWork中使用的表达式语言
versions.txt 主要记录这些依赖的类库的版本号等信息。


2008年10月21日星期二

Inversion of Control(控制反转)

一、什么是IoC

IoC就是Inversion of Control,控制反转。在Java开发中,IoC意味着将你的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。
 
下面我们以几个例子来说明什么是IoC。
假设我们要设计一个Girl和一个Boy类,其中Girl有kiss方法,即Girl想要Kiss一个Boy。那么,我们的问题是,Girl如何能够认识一个Boy?
 
在我们中国,常见的MM与GG的认识方式有以下几种:
1.青梅竹马;2.亲友介绍;3.父母包办。
 
那么哪一种才是最好的呢?

青梅竹马:Girl从小就知道自己的Boy
public class Girl{
void kiss(){
Boy boy=new Boy(); }
}
然而从开始就创建的Boy缺点就是无法再更换。而且要负责Boy的整个生命周期。如果我们的Girl想要换一个怎么办?

亲友介绍:由中间人负责提供Boy来见面。
public class Girl{
void kiss(){
Boy boy=BoyFactory.createBoy();
}
}
亲友介绍,固然是好。如果不满意,尽管另外换一个好了。但是,亲友BoyFactory经常是以Singleton的形式出现,不然就是,存在Golobals,无处不在,无处不能。实在是太繁琐一点,不够灵活。我为什么一定要这个亲友掺和进来呢?为什么一定要付给她介绍费呢?万一最好的朋友爱上了我的男朋友呢?

父母包办:一切交给服务,自己不用费吹灰之力,只需要等着Kiss就好了。
public class Girl{
void kiss(Boy boy){
//kiss boy
boy.kiss();
}
}
Well,这是对Girl最好的办法,只要想办法贿赂了Girl的服务,并把Boy交给他。那么我们就可以轻松的和Girl来Kiss了。看来几千年传统的父母之命还真是有用的。至少Boy和Girl不用自己瞎忙乎了。

这就是IoC,将对象的创建和获取提取到外部。由外部容器提供需要的组件。
我们知道好莱坞原则:“Do not call us, we will call you.” 意思就是,You, girlie, do not call the boy. We will feed you a boy。 
 
我们还应该知道依赖倒转原则即 Dependence Inversion Princinple,DIP。

Eric Gamma说,要面向抽象编程。面向接口编程是面向对象的核心。   
组件应该分为两部分,即:   
Service,所提供功能的声明;   
Implementation,Service的实现。   
好处是:多实现可以任意切换,防止“everything depends on everything”问题。即具体依赖于具体。   
所以,我们的Boy应该是实现Kissable接口。这样一旦Girl不想kiss可恶的Boy的话,还可以kiss可爱的kitten和慈祥的grandmother。

二、IoC的Type

IoC的Type是指Girl得到Boy的几种不同方式。我们逐一来说明.

IoC Type 0:不用IoC
public class Girl implements Servicable{
private Kissable kissable;
public Girl(){
kissable=new Boy();
}
public void kissYourKissable(){
kissable.kiss();
}
}
Girl自己建立自己的Boy,很难更换,很难共享给别人,只能单独使用,并负责完全的生命周期。

IoC Type1:
public class Girl implements Servicable{
Kissable kissable;
public void service(ServiceManager mgr){
kissable=(Kissable)mgr.lookup("kissable");
}
public void kissYourKissable(){
kissable.kiss();
}
}
这种情况出现于Avalon Framework。一个组件实现了Servicable接口,就必须实现service方法,并传入一个ServiceManager。其中会有需要的组件。只需要在service方法中初始化需要的Boy。
另外,J2EE中从context取得对象也属于Type1.它依赖于配置文件。

IoC Type2:
public class Girl{
private Kissable kissable;
public void setKissable(Kissable kissable){
this.kissable=kissable;
}
public void kissYourKissable(){
kissable.kiss();
}
}
Type2出现在Spring Framework,是通过JavaBean的set方法将需要的Boy传递给Girl。它必须依赖于配置文件。

IoC Type3:
public class Girl{
private Kissable kissable;
public Girl(Kissable kissable){
this.kissable=kissable;
}
public void kissYourKissable(){
kissable.kiss();
}
}
这就是PicoContainer的组件。通过构造函数传递Boy给Girl。
代码:
PicoContainer container=new DefaultPicoContainer();
container.registerComponentImplementation(Boy.class);
container.registerComponentImplementation(Girl.class);
Girl girl=(Girl)container.getComponentInstance(Girl.class);
girl.kissYourKissable();

2008年10月16日星期四

动词的"基本型"

从动词的变化形式上,可以分为五段动词、一段动词、サ变动词、カ变动词等4类变化形式。如:
五段动词:行く、ある、飛ぶ
一段动词:起きる、食べる
サ变动词:する
カ变动词:来る
五段动词的词尾都是"ウ"段假名,如:"く、ぐ、す、つ、ね、ぶ、る、う"等。后续助动词时,词尾将在"ア、イ、ウ、エ、オ"五段的各段上变化,并因此得名。例如:"行く"的词尾"く"在接"ます"时,变化为它的"イ"段假名"き",然后加"ます"。如:
いくー>いきます;あるー>あります
一段动词的词尾都是"る"。而"る"前面的假名,或者是"イ"段假名,因它是"ウ"段假名的上一段假名,因而得名"上一段动词";或者是"エ"段假名,因为与"ウ"段假名的下面一段,因而得名"下一段假名",统称"一段动词"。一般动词在接"ます"时,去掉"る"加"ます"即可。如:
おきるー>おきます;たべるー>たべます
サ变动词只有一个,即"する"。在接"ます"时,词干的"す"变"し"加"ます"。如:
するー>します
カ变动词也只有一个,即"くる"。在接"ます"是,词干的"く"变"き"加"ます"。如:
くるー>きます
另外:
五段动词可以称为一类动词
一段动词可以称为二类动词
サ变、カ变动词合称为三类动词

语法:
名[人] は 动[基本型] ことばできます
表示可能。
森さんは 中華料理を 作る ことばできますか。
ーはい。できます。

名 は 动(基本型) ことです
谓语的内容是一种动作、行为是使用这个句型。
森さんの夢は外国で 働(はたら)くことです。

名(基本型) 前に,~
表示一个动作在另一个动作之前发生时,用此句型。
こちらへ 来る 前に 電話を かけてください。

2008年9月26日星期五

Java全局抗锯齿字体

一直觉得Java Swing做界面非常困难,今天研究了一下Font,发现Swing使用微软雅黑字体的时候比较难看,和Windows操作系统上的效果差距太大,主要是没有抗锯齿处理,难道Java只是做到了这一步?

继续找了一些资料,其实发现很简单,Graphics2D类是可以在绘制的时候进行看锯齿处理的,只要在组件绘制时添加如下两行代码即可:
public void paintComponent(Graphics g){
 super.paintComponent(g);
Graphics2D g2d=(Graphics2D) g;  
  g2d.setRenderingHint(
        RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
}
效果如下图:

处理前处理后





稍微介绍下RenderingHints中的字段:

KEY_ANTIALIASING

抗锯齿提示键,提示Graphics2D对象的几何对象是否将尝试沿形状的边缘减少锯齿现象

典型的抗锯齿算法的工作方式:根据估计的部分形状像素覆盖率,沿形状的边界将像素的现有颜色与所请求的填充绘制(fill paint)混合在一起

KEY_ALPAH_INTERPLOATION

Aplha插值提示键,是一个提供高级建议的常规提示,目的是在评估权衡时提示应选择更偏重于速度还是偏重于质量的alpha混合算法。

此提示可以控制alpha混合算法的选择,它提供了使用快速查找表或较低精度SIMD指令的一些精度值。在计算其他每像素成本时,此提示还控制是否在多个线性可视效果计算过程中将颜色和alpha值转换到线性颜色空间

KEY_COLOR_RENDERING

颜色呈现提示键,控制将颜色存储到目标图像或表面时近似值或转换的精确度。

当必须将呈现或图像处理操作生成的颜色值存储到目标中时,首先必须将该颜色转换为合适存储到目标图像或表面的形式。必须至少将颜色分量转换为位表示形式并以正确的顺序排序,或者必须首先选择颜色查找表的索引,这样数据才可以存储到目标内存中。没有这种最少的转换,目标数据有可能表示为随机、不正确或甚至可能不受支持的值。快速将呈现操作的结果转换为最常见目标颜色格式的算法已众所周知,且执行得相当理想。

仅执行最基本的颜色格式转换,将颜色存储到目标,这样做可能潜在地忽略源和目标的ColorSpace校准或其他因素(如gamma校正的直线型)的差异。除非源和目标ColorSpace相同,从而在从而在正确执行呈现操作的同时最大限度地维护被表示颜色的精确度,否则应该将源颜色转换为设备无关的 ColorSpace,然后转换回目标 ColorSpace。此外,如果要在呈现操作过程中执行计算(如多种源颜色的混合),通过选择与中间设备无关的 ColorSpace,使被计算的值与人眼的感知之间具有某种线性关系,以响应输出设备曲线,那么可以实现更加清晰的视觉。

KEY_DITHERING

抖动提示键。DITHERING 提示控制着在将颜色存储到颜色分辨率受限制的目标中时,所选颜色的近似程度。

一些呈现目标支持的颜色选择数可能受到限制,它也许无法准确地表示在呈现操作过程中产生的颜色的完整色谱。对于这类目标,DITHERING 提示控制着是否使用最接近于所请求的受支持颜色的单个像素值的普通固定填充方式来完成呈现,或者是否使用组合的颜色模式来填充形状,以便更好地接近于该颜色。

KEY_FRACTIONALMETRICS

字体小数规格提示键。FRACTIONALMETRICS 提示控制单个字符字形的定位是否考虑字体的缩放字符 advance 子像素的精确度,或者这类 advance 向量是否舍入为整个设备像素的一个整数数字。此提示只建议定位字形应该使用的精度,而不指定或建议是否应为了匹配而修改实际光栅化或字形的像素边界。

将文本呈现到低分辩率的设备(如屏幕)时没必要包括大量的舍入操作,因为字符字形的形状与规格的高质量和非常精确的定义必须与离散设备像素相匹配。理想情况下,文本布局过程中字形的定位将根据点的大小通过缩放字体的设计规格进行计算,但缩放的 advance with 不必是像素的一个整数数字。如果根据这些缩放的设计规格使用子像素精确度对字形进行定位,则在理想情况下,光栅化需要针对每个可能的子像素原点进行调整。

不幸的是,在文本布局过程中将每个自定义字形缩放到其实际子像素原点的代价太高,所以基于整数设备定位的简化系统通常用于布局文本。字形的光栅化和缩放的 advance with 在设备分辨率上都被调整,以生成看起来很好的文本,在字形之间具有一致的整数像素距离,有助于使字形看起来均匀,有一致性的距离且可读性好。

这种将光栅化字形的 advance with 舍入为整数距离的处理意味着:由于在每个字形调整宽度中一系列小差异的累加,使得字符密度和文本字符串的整体长度不同于理论上设计的测量值。特定差异将针对每种字形而有所不同,与它们的理论设计测量值相比,一些字形比较宽,而另一些字形较窄。因此,字符密度和长度中的整体差异将因许多因素的不同而有所不同,这些因素包括字体、作为目标的特定设备分辨率以及为表示要呈现的字符串而选择的字形。因此,对整个字符串而言,在多个设备分辨率中呈现同一个字符串可能出现很多不同的规格。

当启用 FRACTIONALMETRICS 时,实际字体设计规格按照点大小缩放,并用于具有子像素精确度的布局。因此,字符的字形平均密度和长字符串总长度将更接近于与字体的理论设计相匹配,但是可读性可能受影响,因为单独的字符对可能并不是始终显示为一致的间隔距离,这取决于字形原点子像素的累加与设备像素网格的协调方式。当正在执行必须一致地跨越多种不同输出分辨率的文本布局时,启用此提示可能很合适。需要特别说明的是,在文本布局正在低分辩率设备(如输出屏幕)上预览,但最终在高分辩率打印机或排版设备上呈现的情况下,此提示可能也很合适。

当禁用此提示时,缩放的设计规格针对布局舍入或调整为整数距离。任意特定字形对之间的距离在设备上将更加统一,但是长字符串的密度和总长度可能不再与字体设计人员的理论想法相匹配。在低分辩率设备(如计算机监视器)上禁用此提示通常产生更可读的结果。

KEY_INTERPLOATION

插值提示键。INTERPOLATION 提示控制在图像呈现操作过程中如何过滤图像像素或重新对其取样。

图像被隐式地定义为在整数坐标位置上提供颜色样本。当图像没有缩放到目标而垂直呈现时,其图像像素映射到其设备像素的选择是显而易见的,且图像中整数坐标位置的样本一个对一个地被转换到设备像素网格上的相应整数位置。当图像在缩放、旋转或其他转换坐标系中呈现时,图像后面设备像素坐标的映射关系可能引起问题:所提供的图像样本整数位置之间的连续坐标处使用什么颜色样本。插值算法定义了一些函数,它们根据整数坐标周围的颜色样本为图像中的任何连续坐标提供颜色样本。  

KEY_RENDERING

呈现提示键。RENDERING 提示是一个提供高级建议的常规提示,目的是在进行评估权衡时提示是应该选择更偏重于速度,还是选择更偏重于质量的算法。任何呈现或图像处理操作都可以参考此提示,但是决定通常会遵照其他优先于此提示的更明确的提示。

KEY_STROKE_CONTROL

笔划规范化控制提示键。STROKE_CONTROL 提示键控制呈现实现是否应该或允许出于各种目的而修改所呈现轮廓的几何形状。

一些实现可以使用优化的平台呈现库,在给定平台上,它们比传统软件呈现算法更快,但它们也可能不支持浮点坐标。一些实现也可以具有复杂的算法,它们打乱路径的坐标,以便在宽度和间距上使宽线看起来更统一。

如果实现执行任意类型的修改或路径的“规范化”,则应当不在任何方向用半个以上像素来移动坐标。

KEY_TEXT_ANTIALIASING

文本抗锯齿提示键。TEXT_ANTIALIASING 提示可以控制文本抗锯齿算法的使用,这与形状呈现的选择无关。通常,应用程序只希望对文本而不是其他形状使用抗锯齿。此外,用于减少文本锯齿现象的算法通常比那些为常规呈现而开发的算法更复杂,所以,此提示键提供了其他一些值,这些值可以控制某些特定于文本的算法的选择。

KEY_TEXT_LCD_CONTRAST

LCD 文本对比呈现提示键。此值是一个 Integer 对象,在与 LCD 文本抗锯齿提示(如 VALUE_TEXT_ANTIALIAS_LCD_HRGB)一起使用时,它被用于文本对比度调整。
  • 这些值应该是 100 到 250 之间的正整数。
  • 当在浅色背景上显示深色文本时,较低的值(如 100)对应于较高对比度的文本。
  • 当在浅色背景上显示深色文本时,较高的值(如 200)对应于较低对比度的文本。
  • 通常,有用值的范围缩小到 140-180。
  • 如果未指定任何值,则应用系统或实现的默认值。
默认值可以满足大多数目的,所以客户端几乎都不需要指定此提示值,除非它们有关于某一合适值的具体信息。较高的值并不意味着较高的对比度,实际上正好相反。校正以一种类似方式应用于显示系统的非线性感知亮度响应(perceptual luminance response)的 gamma 调整,但不指示对它进行完全校正。

部分来源:JDK API 1.6.0

我的简介