java技术从入门到精通(孙鑫)学习笔记Lesson4(函数调用).doc

上传人:啊飒飒 文档编号:10615589 上传时间:2021-05-26 格式:DOC 页数:7 大小:61KB
返回 下载 相关 举报
java技术从入门到精通(孙鑫)学习笔记Lesson4(函数调用).doc_第1页
第1页 / 共7页
java技术从入门到精通(孙鑫)学习笔记Lesson4(函数调用).doc_第2页
第2页 / 共7页
java技术从入门到精通(孙鑫)学习笔记Lesson4(函数调用).doc_第3页
第3页 / 共7页
java技术从入门到精通(孙鑫)学习笔记Lesson4(函数调用).doc_第4页
第4页 / 共7页
java技术从入门到精通(孙鑫)学习笔记Lesson4(函数调用).doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《java技术从入门到精通(孙鑫)学习笔记Lesson4(函数调用).doc》由会员分享,可在线阅读,更多相关《java技术从入门到精通(孙鑫)学习笔记Lesson4(函数调用).doc(7页珍藏版)》请在三一文库上搜索。

1、函数的调用l 在Java中,传参时,都是以传值的方式进行。l 对于基本数据类型,传递的是数据的拷贝;对于引用类型,传递的是引用的拷贝。class StringTestpublic static void change(int x,int y) /x与y互换x=x+y;y=x-y;x=x-y;public static void main(String args)int x=3;int y=4;System.out.println (x=+x+,+y=+y);运行结果为: x=3, y=4 3 4 3(4) 4(3)changemainyxyx栈内存class StringTestpublic

2、static void change(int num)num0=num0+num1;num1=num0-num1;num0=num0-num1;public static void main(String args)int num=new int3,4;change(num);System.out.println(x=+num0+,+y=+num1);运行结果为: x=4 , y=3 class StringTestpublic static void change(Point pt)pt.x=pt.x+pt.y;pt.y=pt.x-pt.y;pt.x=pt.x-pt.y;public sta

3、tic void main(String args)Point pt=new Point();pt.x=3;pt.y=4;change(pt);System.out.println(x=+pt.x+,+y=+pt.y);class Pointint x,y;运行结果为: x=4 , y=3 0088:46600088:4660 。 。 。Point类的对象堆内存栈内存0088:4660ptptchangemainclass StringTestpublic static void change(Point pt)pt.x=pt.x+pt.y;pt.y=pt.x-pt.y;pt.x=pt.x-p

4、t.y;public static void main(String args)Point pt=new Point();Point pt2=new Point();pt.x=3;pt.y=4;change(pt);System.out.println(pt);class Pointint x,y;运行结果为: Point7d772e 其中Point是pt对象所属的类型,符号后面的是一串十六进制的散列码,它是根据这个对象的内存地址得到的。我们知道,调用println()方法时,若打印的是一个对象,则它会调用这个对象的toString()方法。然后返回关于这个对象的描述的字符串(类名+十六进制字

5、符串)并打印出来。Point类是从Object类继承而来(所有的类都是从Object类继承而来),因此它继承了toString()方法。默认情况下,System.out.println(pt);语句会直接调用从Object类继承下来的toString()方法。因此要想改变这种输出结果就必须在派生类中重新定义toString()方法。class StringTestpublic static void change(Point pt)pt.x=pt.x+pt.y;pt.y=pt.x-pt.y;pt.x=pt.x-pt.y;public static void main(String args)P

6、oint pt=new Point();Point pt2=new Point();pt.x=3;pt.y=4;change(pt);System.out.println(pt);class Pointint x,y;public String toString() /覆盖从Object类继承来的toString()方法 return x=+x+,+y=+y;运行结果为: x=4,y=3对象的克隆(clone)l 为了获取对象的一份拷贝,我们可以利用Object类的clone()方法(它用于创建一个对象的拷贝并返回(返回的是Object类型),访问类型为protected。因此需要在子类重写这

7、个方法并声明为public,这样才能在其它地方使用clone()方法。l 在派生类中覆盖基类的clone()方法,并声明为public。l 在派生类的clone()方法中,调用super.clone()。l 在派生类中实现Cloneable接口。class CloneTestpublic static void main(String args)Student st1=new Student(Lisi,18);Student st2=(Student)st1.clone();st2.name=Wangli;st2.age=20;System.out.println(name +st1.name

8、+ ,+age +st1.age);class Student implements CloneableString name;int age;Student(String name, int age)this.name=name;this.age=age;public Object clone()Object o=null;try o=super.clone();catch(CloneNotSupportedException e)System.out.println(e.toString(); return o;运行结果为: name Lisi ,age 18class CloneTest

9、public static void main(String args)Professor p=new Professor(Chenli,50);Student st1=new Student(Lisi,18,p);Student st2=(Student)st1.clone();st2.p.name=Tangli;st2.p.age=30;System.out.println(name +st1.p.name+ ,+age +st1.p.age);class ProfessorString name;int age;Professor(String name, int age)this.na

10、me=name;this.age=age;class Student implements CloneableString name;int age;Professor p;Student(String name, int age, Professor p)this.name=name;this.age=age;this.p=p;public Object clone()Object o=null;try o=super.clone();catch(CloneNotSupportedException e)System.out.println(e.toString(); return o;运行

11、结果为: Tangli ,age 30 /浅拷贝这是因为当克隆时,clone()方法会将类当中的所有数据一一拷贝, 拷贝的时候拷贝的是变量的值,而对于引用类型的变量则是将引用复制了一份。那么String类型的变量是引用类型的变量,为何没有改变呢?这是因为String对象是一个常量对象,程序中的st2.p.name=Tangli;语句,是先产生String类的对象Tangli然后将它的引用赋给name,改变的时候会重新分配一块内存。l 为什么我们在派生类中覆盖Object的clone()方法时,一定要调用super.clone()呢?在运行时刻,Object中的clone()识别出你要复制的是哪

12、一个对象,然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对象的存储空间中。class CloneTestpublic static void main(String args)Professor p=new Professor(Chenli,50);Student st1=new Student(Lisi,18,p);Student st2=(Student)st1.clone();st2.p.name=Tangli;st2.p.age=30;System.out.println(name +st1.p.name+ ,+age +st1.p.age);class Prof

13、essor implements CloneableString name;int age;Professor(String name, int age)this.name=name;this.age=age;public Object clone()Object o=null;try o=super.clone();catch(CloneNotSupportedException e)System.out.println(e.toString(); return o; class Student implements CloneableString name;int age;Professor p;Student(String name, int age, Professor p)this.name=name;this.age=age;this.p=p;public Object clone()Student o=null;try o=(Student)super.clone();catch(CloneNotSupportedException e)System.out.println(e.toString(); o.p=(Professor)p.clone(); return o;运行结果为: name Chenli ,age 50 /深拷贝

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1