題目:撰寫一個 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-
*/
}
}