题目:撰写一个 myString class,其中包含一个String对象,可于构造函数中通过引数来设定初值。加入toString()和concatenate()。后者会将String对象附加于你的内部字符串尾端。请为myString()实现clone()。撰写两个static函数,令它们都接收myString reference x引数并调用x.concatenate(“test”)。但第二个函数会先调用clone()。请测试这两个函数并展示其不同结果。
方法:
public class MyString implements Cloneable{
/*撰写一个 myString class,其中包含一个String对象,
* 可于构造函数中通过引数来设定初值。加入toString()和concatenate()。
* 后者会将String对象附加于你的内部字符串尾端。
* 请为myString()实现clone()。
* 撰写两个static函数,令它们都接收myString reference x引数并
* 调用x.concatenate(“test”)。但第二个函数会先调用clone()。
* 请测试这两个函数并展示其不同结果。
*/
/*
“ 撰写两个static函数,令它们都接收myString reference x引数
并调用x.concatenate(“test”)。但第二个函数会先调用clone()。”
本人觉得这个意思是:“撰写static函数,主要是因为static是属于类本身而不属于对象的,
所以可以直接用类带点来访问,从而简化访问同时可以把对象作为参数而传递进去。而本程序
想通过‘调用clone()’来拷贝,是想证明‘不调用clone()’时是对对象本身操作,而‘调用
clone()’是对对象的副本操作而不影响对象本身”
*/
private String str;
MyString(String str){
this.str=str;
}
public String toString(){
return str;
}
public void concatenate(String old){
String newStr=new String();
newStr=this.str+old;
this.str=newStr;
}
public Object clone(){
Object copyStr=null;
try {
copyStr=super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return copyStr;
}
public static void method1(MyString x){
x.concatenate("test");
System.out.println(x.toString());
}
public static void method2(MyString x){
((MyString)x.clone()).concatenate("test");
System.out.println(x.toString());
}
public static void main(String[] args) {
MyString myStr1=new MyString("ccp330-gucheng-");
MyString.method1(myStr1);
MyString myStr2=new MyString("ccp330-gucheng-");
MyString.method2(myStr2);
/*结果为:
ccp330-gucheng-test
ccp330-gucheng-
*/
* 可于构造函数中通过引数来设定初值。加入toString()和concatenate()。
* 后者会将String对象附加于你的内部字符串尾端。
* 请为myString()实现clone()。
* 撰写两个static函数,令它们都接收myString reference x引数并
* 调用x.concatenate(“test”)。但第二个函数会先调用clone()。
* 请测试这两个函数并展示其不同结果。
*/
/*
“ 撰写两个static函数,令它们都接收myString reference x引数
并调用x.concatenate(“test”)。但第二个函数会先调用clone()。”
本人觉得这个意思是:“撰写static函数,主要是因为static是属于类本身而不属于对象的,
所以可以直接用类带点来访问,从而简化访问同时可以把对象作为参数而传递进去。而本程序
想通过‘调用clone()’来拷贝,是想证明‘不调用clone()’时是对对象本身操作,而‘调用
clone()’是对对象的副本操作而不影响对象本身”
*/
private String str;
MyString(String str){
this.str=str;
}
public String toString(){
return str;
}
public void concatenate(String old){
String newStr=new String();
newStr=this.str+old;
this.str=newStr;
}
public Object clone(){
Object copyStr=null;
try {
copyStr=super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return copyStr;
}
public static void method1(MyString x){
x.concatenate("test");
System.out.println(x.toString());
}
public static void method2(MyString x){
((MyString)x.clone()).concatenate("test");
System.out.println(x.toString());
}
public static void main(String[] args) {
MyString myStr1=new MyString("ccp330-gucheng-");
MyString.method1(myStr1);
MyString myStr2=new MyString("ccp330-gucheng-");
MyString.method2(myStr2);
/*结果为:
ccp330-gucheng-test
ccp330-gucheng-
*/
}
}
转载于:https://blog.51cto.com/netsky1990/561819