??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
环境Q?/SPAN>win32Q?/SPAN>Eclipse3.1Q?/SPAN>Designer_v
1Q?SPAN style="FONT: 7pt 'Times New Roman'"> 首先?/SPAN>http://www.swt-designer.com/左边?/SPAN>download菜单点击q去后下?/SPAN>Edition for Eclipse 3.1 & 3.2Q下载后的文件名?/SPAN>Designer_v
2Q?SPAN style="FONT: 7pt 'Times New Roman'"> 然后在我的网l硬盘中下蝲破解文g: http://www.thefilehut.com/userfiles/gufen/forblog/swt.designer.pro.keygen.for.eclipse.3.1.rar
3Q?SPAN style="FONT: 7pt 'Times New Roman'"> 解压后在cmd命o中敲?/SPAN>swt.ui.batQ运行后出现以下界面Q输入框中的内容Q然后点?/SPAN>Generate产生序列号和Ȁzȝ?/SPAN>
如果你所使用的环境和版本不是win32Q?/SPAN>Eclipse3.1Q?/SPAN>Designer_v
a) 该目录下的org.eclipse.swt.win32.win32.x86_
b)?/SPAN>Eclipse目录下找?/SPAN>swt.jarQ名字视版本而定Q?/SPAN>eclipse3.1下是org.eclipse.swt.win32.win32.x86_
c)修改swt.ui.bat,如这P
原来?/SPAN>: start javaw -cp SWTDesigner_
修改?/SPAN>:start javaw -cp SWTDesigner_
U色Z改的地方Q然后运行后?/SPAN>Version填入你下载的swt-designer版本号即可生注册码?/SPAN>
4. 下载的Designer_v
q行eclipse,打开window->preferences?>选择左边树Ş中的designer(如果没有q一说?/SPAN>swt-designer插g没有安装成功)?/SPAN>->点击右下的?/SPAN>Registration and Activation?/SPAN>->弹出?/SPAN>Product Registration and Activation”框Q用默认直接点击Next->q一步需要注意的?/SPAN>Name框中两个字符串之间要有个I格Q他会认Z个是姓一个是名,否则Next按钮一直是灰的Q其他随便填Q?/SPAN>email框中要合?/SPAN>email格式可以了->输入破解产生的序列号和激zȝ->昄?/SPAN>Activation is complete. Thank you.”表C破解成?/SPAN>
现在可以免费?/SPAN>swt-designer?/SPAN>
Win32?/SPAN>MyEclipse4.0破解
q个破解h很简单,先去http://www.myeclipseide.com下蝲Myeclipse4.0,然后?/SPAN>http://www.thefilehut.com/userfiles/gufen/forblog/MyEclipse-4.0.0-GA.Keygen.zip下蝲破解。安?/SPAN>Myeclipse,之后解压破解文g后运?/SPAN>keygen.batQ生一?/SPAN>keyQ之后在Myeclipse注册一下就可以了?SPAN lang=EN-US>Myeclipse我忘C么地Ҏ(gu)册了Q好像装?SPAN lang=EN-US>Myeclipse后在preferences中的Myeclipse里点几下׃弹出来个框,把key copyq去认可以了?BR>
以上破解Ҏ(gu)仅供个h学习Q请支持正版?形式Q?
许多人都做过q样的事情,但是Q我们到底声明了什么?回答通常是:一个StringQ内Ҏ(gu)“Hello world!”。这hp的回答通常是概念不清的Ҏ(gu)。如果要准确的回{,一半的人大概会回答错误?BR>q个语句声明的是一个指向对象的引用Q名为“s”,可以指向cd为String的Q何对象,目前?/P>
1. 声明是什?
String s = "Hello world!";
许多人都做过q样的事情,但是Q我们到底声明了什么?回答通常是:一个StringQ内Ҏ(gu)“Hello world!”。这hp的回答通常是概念不清的Ҏ(gu)。如果要准确的回{,一半的人大概会回答错误?BR>q个语句声明的是一个指向对象的引用Q名为“s”,可以指向cd为String的Q何对象,目前指向"Hello world!"q个Stringcd的对象。这是真正发生的事情。我们ƈ没有声明一个String对象Q我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句:
String string = s;
我们是声明了另外一个只能指向String对象的引用,名ؓstringQƈ没有W二个对象生,stringq是指向原来那个对象Q也是Q和s指向同一个对象?BR>2. StringcȝҎ(gu)?BR>1) String s1 = “Hello? //产生一个String ”Hello”对?q生该对象的一个别名s1来引用该对象
String s2 = “Hello? //又生一个别名s2来引用上面的”Hello”对?BR>s1 == s2 = true; //׃是同一个对象所以?=”返回ؓtrue
s1 = “World? //产生一个String ”World”对? s1的引用不再指向“Hello”而是指向对象”World?BR>s1 == s2 = false; //׃不是同一个对象所以?=”返回ؓfalse
s1 = “Hello? //同上面的String s2 = “Hello? 现在s1又指向对象”Hello? 因ؓJVM会自动根据栈中数据的实际情况来决定是否有必要创徏新对象?BR>s1 == s2 = true; //׃是同一个对象所以?=”又q回为true?BR>s1 = s1 + “World? //q时又生一个对象”HelloWord?s1不再指向”Hello”而是指向”HelloWord?BR>s1 == s2 = false; //不是一个对象当然是false?BR>s1 = s1+ "a"+"b"+"c"+? // String不停的创建对?影响性能Q这U易变的String用StringBuffer会得到更好的性能
StringBuffer s3 = new StringBuffer(“Hello?;
s3.append(“a?; //没有生成新的对象Q而是s3引用的对象内Ҏ(gu)为”Helloa?/P>
//说明: Stringcȝ来表C那些创建后׃会再改变的字W串Q它是immutable的。而StringBuffercȝ来表C内容可变的字符Ԍq提供了修改底层字符串的Ҏ(gu)?BR>StingBuffer是一个可变的字符Ԍ它可以被更改。同时StringBuffer是Thread safe的, 你可以放心的使用.
因ؓString被设计成一U安全的字符Ԍ 避免了C/C++中的尬。因此在内部操作的时候会频繁的进行对象的交换Q?因此它的效率不如StringBuffer?如果需要频J的q行字符串的增删操作的话最好用StringBuffer?比如拼SQL文, 写共函?另: ~绎器对String?操作q行了一定的优化?
x = "a" + 4 + "c"
会被~绎?BR>x = new StringBuffer().append("a").append(4).append("c").toString()
但:
x = “a?
x = x + 4;
x = x + “c?
则不会被优化?可以看出如果在一个表辑ּ里面q行String的多?操作会被优化Q?而多个表辑ּ?操作不会被优化?BR>摘自Q《Java API Using, Tips And Performance Tuning?BR>2) Integer、Boolean{wrappercM及BigInteger、BigDecimal是immutable的,所以也有与StringcM的地方,不过没有IntegerBuffer之类的东ѝ不qFloat, Double比较Ҏ(gu)。如
T a1 = 10; //T代指Byte,Integer,Short,Long,Boolean?注:应用了JDK5的AUTOBOXING
T a2 = 10;
if (a1 == a2)
System.out.println(true);
else
System.out.println(false);
q时Ltrue,和String有点cM
//Float?BR>Float i1 = (float)10.0;
Float i2 = (float)10.0;
if (i1==i2)
System.out.println(true);
else
System.out.println(false);
q时Lfalse
//Double?BR>Double i1 = 10.0;
Double i2 = 10.0;
if (i1==i2)
System.out.println(true);
else
System.out.println(false);
q时Lfalse
M如果比较两个Wrappercȝ值用equalsQ以免不必要的麻?BR>3) 再看
String s1 = new String(“Hello?;
String s2 = new String(“Hello?;
s1 == s2 = false;
//因ؓnew的时候JVM不管heap中有没有”Hello”对象都会生一个新的”Hello”对?BR>String s3 = “Hello? //重新创徏对象”Hello? qos3指向对象”Hello?BR>s3 == s1 = false; //不同对象当然false
String s4 = “Hello?
s3 == s4 = true; //故伎重演Qjvm清楚的知道哪些用了newQ哪些没用new
3. Ҏ(gu)的参C递中都是以reference传递,而primitive传递的是副本,但如果传递的是Integer、Boolean{wrappercdStringcȝObject则是以immutable方式传递。示例:
import java.awt.Point;
class HelloWorld
{
public static void modifyPoint(Point pt, String j, int k, Integer m, Boolean b)
{
pt.setLocation(5,5);
j = "15";
k = 25;
m = 35;
b = true;
System.out.println("During modifyPoint " + "pt = " + pt +
" and j = " + j+ " and k = "+ k+
" and m = "+ m+ " and b = "+ b);
}
public static void main(String args[])
{
Point p = new Point(0,0);
String i = "10";
int k = 20;
Integer m = 30;
Boolean b = false;
System.out.println("Before modifyPoint " + "p = " + p +
" and i = " + i+ " and k = "+ k+
" and m = "+ m+ " and b = "+ b);
modifyPoint(p, i, k, m, b);
System.out.println("After modifyPoint " + "p = " + p +
" and i = " + i+ " and k = "+ k+
" and m = "+ m+ " and b = "+ b);
}
}
输出l果Q?BR>Before modifyPoint p = java.awt.Point[x=0,y=0] and i = 10 and k = 20 and m = 30 and b = false
During modifyPoint pt = java.awt.Point[x=5,y=5] and j = 15 and k = 25 and m = 35 and b = true
After modifyPoint p = java.awt.Point[x=5,y=5] and i = 10 and k = 20 and m = 30 and b = false
4. final作用于基本类型变量则该变量ؓ恒常量;final作用于对象类型变量则该对象reference为恒量;final作用于方法则该方法不能被覆盖Qfinal作用于class则该class不能被ѝ?BR>final使得被修饰的变量"不变"Q但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义Q引用本w的不变Q和引用指向的对象不变?/P>
引用本n的不变:
final StringBuffer a=new StringBuffer("immutable");
final StringBuffer b=new StringBuffer("not immutable");
a=b;//~译期错?/P>
引用指向的对象不变:
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!"); //~译通过
可见Qfinal只对引用的“值?也即它所指向的那个对象的内存地址)有效Q它q引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化Qfinal是不负责的。这很类?=操作W:==操作W只负责引用的“值”相{,至于q个地址所指向的对象内Ҏ(gu)否相{,==操作W是不管的?/P>
理解final问题有很重要的含义。许多程序漏z都Z?---final只能保证引用永远指向固定对象Q不能保证那个对象的状态不变。在多线E的操作?一个对象会被多个线E共享或修改Q一个线E对对象无意识的修改可能会导致另一个用此对象的线E崩溃。一个错误的解决Ҏ(gu)是在此对象新徏的时候把它声明ؓfinalQ意图得它“永q不变”。其实那是徒劳的?BR>5. 怎样初始?BR>本问题讨论变量的初始化,所以先来看一下Java中有哪些U类的变量?BR>1). cȝ属性,或者叫值域
2). Ҏ(gu)里的局部变?BR>3). Ҏ(gu)的参?/P>
对于W一U变量,Java虚拟Z自动q行初始化。如果给Z初始|则初始化初始倹{如果没有给出,则把它初始化cd变量的默认初始倹{?/P>
primitivecd默认?BR>boolean: false
char: '\u0000' 对于未初始化的char c, c == ‘\u0000?= true
byte: 0
short: 0
int: 0
long: 0
float: 0.0
double: 0.0
object reference: null
array: null
注意数组本n也是对象Q所以没有初始化的数l引用在自动初始化后其g是null?/P>
对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创徏实例的时候初始化Qstatic属性在cd载,也就是第一ơ用到这个类的时候初始化Q对于后来的实例的创建,不再ơ进行初始化?/P>
对于W二U变量,必须明确地进行初始化。如果再没有初始化之前就试图使用它,~译器会抗议。如果初始化的语句在try块中或if块中Q也必须要让它在W一ơ用前一定能够得到赋倹{也是_把初始化语句攑֜只有if块的条g判断语句中编译器也会抗议Q因为执行的时候可能不W合if后面的判断条Ӟ如此一来初始化语句׃会被执行了,q就q反了局部变量用前必须初始化的规定。但如果在else块中也有初始化语句,可以通过~译Q因为无论如何,L臛_一条初始化语句会被执行Q不会发生用前未被初始化的事情。对于try-catch也是一P如果只有在try块里才有初始化语句,~译部通过。如果在 catch或finally里也有,则可以通过~译。MQ要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要Z化成什么值好Q就用上面的默认值吧Q?/P>
其实W三U变量和W二U本质上是一LQ都是方法中的局部变量。只不过作ؓ参数Q肯定是被初始化q的Q传入的值就是初始|所以不需要初始化?BR>6. 量使用多?polymorphism)Ҏ(gu)而不是instanceof
7. 一旦不需要对象,量昑ּ的之ؓnull
8. 对象之间的?”赋值操作乃是赋值的reference, 卛_边的对象也指向右边的对象Q只是该reference多了一个别名而已?BR>9. ?=”和equals()的区?BR>==操作W专门用来比较变量的值是否相{。比较好理解的一Ҏ(gu)Q?BR>int a=10;
int b=10;
则a==b是true?BR>但不好理解的地方是:
String a=new String("foo");
String b=new String("foo");
则a==b返回false?/P>
Ҏ(gu)前一帖说q,对象变量其实是一个引用,它们的值是指向对象所在的内存地址Q而不是对象本w。a和b都用了new操作W,意味着在内存中生两个内容ؓ"foo"的字W串Q既然是“两个”,它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的|所以?=="操作W,l果会是 false。诚Ӟa和b所指的对象Q它们的内容都是"foo"Q应该是“相{”,但是==操作Wƈ不涉及到对象内容的比较?BR>对象内容的比较,正是equalsҎ(gu)做的事?/P>
看一下Object对象的equalsҎ(gu)是如何实现的Q?BR>boolean equals(Object o){
return this==o;
}
Object 对象默认使用?=操作W。所以如果你自创的类没有覆盖equalsҎ(gu)Q那你的cM用equals和?=会得到同Ll果。同样也可以看出Q?Object的equalsҎ(gu)没有辑ֈequalsҎ(gu)应该辑ֈ的目标:比较两个对象内容是否相等。因为答案应该由cȝ创徏者决定,所以Object把这个Q务留l了cȝ创徏者?/P>
看一下一个极端的c:
Class Monster{
private String content;
...
boolean equals(Object another){ return true;}
}
我覆盖了equalsҎ(gu)。这个实CD无论Monster实例内容如何Q它们之间的比较永远q回true?/P>
所以当你是用equalsҎ(gu)判断对象的内Ҏ(gu)否相{,请不要想当然。因为可能你认ؓ相等Q而这个类的作者不q样认ؓQ而类的equalsҎ(gu)的实现是׃掌握的。如果你需要用equalsҎ(gu)Q或者用Q何基于散列码的集合(HashSet,HashMap,HashTableQ,请察看一下java doc以确认这个类的equals逻辑是如何实现的?BR>10. 不要依赖equals()的缺省实?BR>11. 一个equals()的实现模?BR>class Golfball
{
private String brand;
private String make;
private int compression;
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj != null && getClass() == obj.getClass())
{
Golfball gb = (Golfball)obj; //Classes are equal, downcast.
if (brand.equals(gb.brand()) && //Compare attributes.
make.equals(gb.make()) &&
compression == gb.compression())
{
return true;
}
}
return false;
}
}
注意getClass() == obj.getClass()的限Ӟ如果判断必须相等则无法比较基cd子类是否相等,完全不同的类不用考虑Q完全没有可比性,除了Ҏ(gu)需要或很糟p的E序?BR>12. 实现equals()应优先考虑使用getClass()
13. 如果某个基类我们自己实现了equals()Q在它的子类中要覆盖此方法,最好调用super.equals()唤vbase class的相兌?然后再实现子cd的比较?BR>Example:
public boolean equals(Object obj)
{
if (this == obj) //1
return true;
if (obj != null && getClass() == obj.getClass() && //2
super.equals(obj)) //3
{
MyGolfball gb = (MyGolfball)obj; //Classes equal, downcast.
if (ballConstruction == gb.construction()) //Compare attrs.
return true;
}
return false;
}
14. 如果要在base class与derived class之间应运equals(),可以考虑instanceof来代替getClass()。对此论题的详细讨论参见:Practical Java, Practice 14
15. instanceof什么东西?
instanceof是Java的一个二元操作符Q和==Q?gt;Q?lt;是同一cM东。由于它是由字母l成的,所以也是Java的保留关键字。它的作用是试它左边的对象是否是它双的类的实例,q回booleancd的数据。D个例子:
String s = "I AM an Object!";
boolean isObject = s instanceof Object;
我们声明了一个String对象引用Q指向一个String对象Q然后用instancof来测试它所指向的对象是否是Objectcȝ一个实例,昄Q这是真的,所以返回trueQ也是isObject的gؓTrue?BR>instanceof有一些用处。比如我们写了一个处理̎单的pȝQ其中有q样三个c:
public class Bill {//省略l节}
public class PhoneBill extends Bill {//省略l节}
public class GasBill extends Bill {//省略l节}
在处理程序里有一个方法,接受一个Billcd的对象,计算金额。假设两U̎单计方法不同,而传入的Bill对象可能是两U中的Q何一U,所以要用instanceof来判断:
public double calculate(Bill bill) {
if (bill instanceof PhoneBill) {
//计算?sh)话账?BR>}
if (bill instanceof GasBill) {
//计算燃气账单
}
...
}
q样可以用一个方法处理两U子cR?/P>
然而,q种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实玎ͼq是面向对象变成应有的做法,避免回到l构化编E模式。只要提供两个名字和q回值都相同Q接受参数类型不同的Ҏ(gu)可以了Q?/P>
public double calculate(PhoneBill bill) {
//计算?sh)话账?BR>}
public double calculate(GasBill bill) {
//计算燃气账单
}
所以,使用instanceof在绝大多数情况下q不是推荐的做法Q应当好好利用多态?BR>16. 认真对待异常?BR>1).在方法体用throws子句抛出异常时尽量包括所有出现的异常Q而不是仅仅抛出base exception.
2).在super class中定义的Ҏ(gu)抛出某个异常Q如果在deriver class中要override该方法,那么overriding method必须Q?BR>a. 不抛ZQ何异?BR>b. 抛出和super class 中同L异常
c. 抛出和super class 中异常的deriver class
如果super class中定义的Ҏ(gu)没有抛出异常Q但deriver class中的override的方法会产生异常Q必自己内部解?BR> 3).好好利用finally功能。一般只要有finallyQ它L会被执行Q除非在try中用System.exit(0)或者在try块执行期间强行拔掉电(sh)源。finally被执行有三种情况Q?BR>a. 抛出异常
b. try正常l束
c. 在try中执行了return, break, continue而引L开try的操?BR>其注意c.如果Ҏ(gu)中在try块return 1,而在finally块return 2,则最l永q是2Q因此尽量避免在try中用return, break, continueQ要么确保在finally中不会改变返回?BR> 4).不要在@环体中用try,因ؓ在无JIT的JVM中将大大降低性能Q而且q也是良好的~程习惯
5).不要异常用于控制流E,而是仅仅用于会发生错误的地方
6).不要每逢出错就使用异常Q尽量用传l的Ҏ(gu)判断变量的有效?BR>17. 关于不可变类(Immutable class),如String、Byte、Integer、Short、Long、Float、Double、BigInteger、BigDecimal{,它们之所以能同一D动地指向同一引用Q实际上是它们实C静态工厂方法?/P>