??xml version="1.0" encoding="utf-8" standalone="yes"?>
“菜单文字”里的内容修改ؓ“JAVAC”;
“命令”选择安装JDK后的BIN目录中的~译E序JAVAC.EXEQ如果JDK 安装路径为“c:\jdk”,那么此\径ؓ“c:\jdk\bin\javac.exe”;
“参数”选择“文件名U”,xCZؓ?(FileName)”;
“初始目录”选择“文件目录”,昄为?(FileDir)”;选择“捕莯出”复选框?br />1.2 d执行功能
“菜单文字”里的内容修改ؓ“JAVA”;
“命令”选择安装JDK后的BIN目录中的~译E序JAVA.EXEQ\径ؓ“c:\jdk\bin\java.exe”;
“参数”选择“文件名Q不含扩展名Q”,xCZؓ?(FileNameNoExt)”;
“初始目录”选择“文件目录”,昄为?(FileDir)”;选择“捕莯出”复选框?br />q样完成了基本的配|工作,下面来试着~写一个JAVAE序来测试一下(如图Q,~译的所有信息都会显C在输出H口中,双击某一行错误信息,EditPlus会自动定位到出错?
转自Q?a >http://www.neeao.com/blog/article.asp?id=2400Q?br />
]]>
*默认得克隆方法ؓ克隆只克隆对象得非引用cd(或者非对象型)成员
*要做深克隆有两种ҎQ?br /> *a.覆写克隆ҎQ引用型成员的克隆方法)q且克隆时掉一ơ引用型成员的克隆方法!
*b.序列化对象时默认为深克隆
*
*/
class Friend implements Cloneable {
int age;
String name;
public Friend(int age, String name) {
this.age = age;
this.name = name;
}
public Object clone () throws CloneNotSupportedException {
return super.clone();
}
}
class Person implements Cloneable {
int age;
/* *
*String cdҎQ因Z为引用型Q而且他指向的gؓ帔RQ克隆出来的对象改变他的
*值实际上是改变了克隆出来对象Stringcd成员的指向不会媄响被克隆对象的值及其指?
*因ؓ引用被克隆了Q我改变的是引用的指向!
*/
String name;
Friend f;
public Person(int age, String name, Friend f) {
this.age = age;
this.name = name;
this.f = f;
}
public Object clone () throws CloneNotSupportedException {
Person p = (Person)super.clone();
p.f = (Friend)p.f.clone();
return p;
}
public String toString(){
StringBuffer sb = new StringBuffer();
return super.toString()+sb.append("age=").append(age).
append(",name=").append(name).
append("friend=").append("f.name=").
append(f.name).append("f.age=").append(f.age).toString();
}
}
public class Clonetest {
public static void main(String [] args) throws CloneNotSupportedException {
Person p = new Person(4,"haha",new Friend(5,"hehe"));
Person p1 = (Person)p.clone();
p1.name = "oop";
p1.age = 10;
p1.f.name = "ooad";
p1.f.age = 56;
System.out.println (p);
System.out.println (p1);
}
}
2.构造函Cl承的关p?br />子类的构造函数内会包含一个父cL造函敎ͼ因ؓ在子cL造函数第一行会默认调用父类构造函敎ͼ如果覆写该行则可以自行控制父cL造函数版本;可见得父cL造函数和子类构造函数得关系是“扎쀝不是“覆写”,Q每个)子类构造函数承(包含Q父cL造函数的一个版本,q可以有自己的部分,cMl承Q子cM完全l承父类Ҏq可pqҎQ父cȝ有不能ѝ?/p>
3.接口没有构造函数的原因
1.接口里的Ҏ完全抽象构造函数没有实CQ无意义
2.接口Z实现多承,子类构造函数必调用父cL造函敎ͼ如果接口有构造函数子cM知道调用哪个父类构造函?/p>4.String与StringBuffer
Stringcȝ来表C那些创建后׃会再改变的字W串Q它是immutable的?br />而StringBuffercȝ来表C内容可变的字符Ԍq提供了修改底层字符串的Ҏ?/p>
Q-当我们进行字W拼接时Q请使用StringBufferc而非Stringc,因ؓ前者将比后者快上百倍?/p>
的确Q在E序的太多场合我们都会进行字W串拼接工作Q简单的代码CZ如下Q?/p>
String str="You are nice.";
str+="I love you so much.";
如果用StringBuffercȝ话,代码如下Q?/p>
StringBuffer str= new StringBuffer("You are nice.");
str.append("I love you so much.");
从表面看来Stringcd用一个加P+Q便完成了字W串的拼接,
而StringBuffercd要调用一个append()ҎQ是否实现v来更z,更单U呢Q其实不Ӟ
让我们了解一下程序运行内部发生了哪些事情Q?/p>
l编译后E序的bytecodeQ字节码Q展C出了实质: 在用Stringcd象直接拼接时Q?br />JVM会创Z个时的StringBuffercd象,q调用其append()Ҏ完成字符串的拼接Q?br />q是因ؓStringcL不可变的Q拼接操作不得不使用StringBufferc(q且Q-JVM会将"You are nice."?I love you so much."
创徏Z个新的String对象Q?br />之后Q再这个时StringBuffer对象转型Z个StringQ代价不Ԍ可见Q在q一个简单的一ơ拼接过E中Q?br />我们让程序创Z四个对象Q两个待拼接的StringQ一个时StringBufferQ?br />和最后将StringBuffer转型成ؓ的StringQ-它当然不是最初的str了,q个引用的名U没变,但它指向了新的String对象?/p>
而如果直接用StringBufferc,E序只产生两个对象Q?br />最初的StringBuffer和拼接时的StringQ?I love you so much."Q,
也不再需要创Z时的StringBuffercd象而后q得其转换回String对象?/p>
可以惌Q当我们的字W串要被循环拼接若干D|Q?br />用Stringcȝ接操作会带来多少额外的系l开销Q生成多无用的临时StringBuffer对象Q?br />q处理多次无谓的强制类型{换哪?br />
5. equals() ?==
equals() 比对象|卛_性是否相{?br /> ==比引用,地址
在编译时期确定的两个字符串对象引用相{(Q=Q?br /> 不在~译期确定的两个字符串字W串引用不相{?/p>