面向对象基础(04)-引用传递 this的使用.docx_第1页
面向对象基础(04)-引用传递 this的使用.docx_第2页
面向对象基础(04)-引用传递 this的使用.docx_第3页
面向对象基础(04)-引用传递 this的使用.docx_第4页
面向对象基础(04)-引用传递 this的使用.docx_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

09. 面向对象基础(04) 本季主要知识点:引用传递 this关键字。 本季开头先讲解了三种引用传递的范例帮助读者加强对引用传递的理 解,之后重点阐述了this关键字的使用及对象的比较操作实现方式。 blog: 零基础学JAVAJava SE面向对象部分-09.面向对象基础(04)上季内容回顾:String类 不可改变 要使用直接赋值的方式 一个字符串就是一个String类的匿名对象 String类的相关操作方法本季主要知识点:引用传递this关键字本季开头先讲解了三种引用传递的范例帮助读者加强对引用传递的理解,之后重点阐述了this关键字的使用及对象的比较操作实现方式。引用传递类是引用数据类型,则传递的是一个地址。方法的参数传递我们来看个实例ooDemo01:输出的值为60我们来分析下这个实例的内存操作哈首先是M m=new M();代码然后是m.x=30;赋值其后fun(m);调用fun()方法,在fun()方法中将对象m的地址赋值给m1接着m1.x=60;代码修改了堆内存中x的值为60。public static void fun(M m1) m1.x=60; 现在这个方法调用完了,m1对堆内存中的连接已经断开了。现在虽然m1对x属性断开了引用,但是在堆内存所作的改动已经被保存下来了哈所以打印输出m.x时值为60。我们再来看个实例ooDemo03:输出结果是abc我们还是来分析下内存操作哈:首先String str=abc;fun(str);调用fun()方法,将str的地址指定s关键一步来了哈s=bcd;将bcd赋值给s,我们上次已经说过了,一个对象不可能有两个地址的引用哈,所以在“bcd”赋值之前,对象s要先断开与“abc”的指向,才能与“bcd”建立连接。然后fun()方法调用完后,s指向的bcd这块空间就被回收了哈因此str没有被更改哈再观察以下一种情况:输出是c哈,字符串的修改被保存下来了我们还是来分析下内存操作:首先M m=new M();开辟空间,M类中的对象x的属性是am.x=b;fun(m);调用fun()方法,将m的指向传递给m1m1.x=c;修改堆内存x的值为“c”最后System.out.println(m.x);输出的是最终修改的c到这里我们已经讲了三个对象引用传递问题。this关键字的使用使用this调用属性的操作:看下效果以上程序中稍微有一点的不妥。从构造方法的参数处是否可以知道它传入的两个参数分别表示什么吗?在外部我们不知道n和a到底表示什么哈所以我们在构造方法的参数处就将n改为name,a改为age我们现在看下效果发现程序没有报错,但是name输出为null,age为0哈在程序执行到public Person(String name,int age) name=name; age=age; 时,程序已经可以找到name和age的属性,所以不会再访问private String name;private int age;中的name和age,如果我们要访问的话,我们就要加上this.这里就可以访问封装的属性了,我们看下效果这就是this关键字调用属性的操作,应该不难理解。This可以在一个类中调用其他方法(普通方法)This可以调用本类中的其他构造方法,我们看下实例ooDemo06我们发现没有调用public Person() System.out.println(新的对象产生!); 如果System.out.println(新的对象产生!);这行代码有几百行的话,那我们在构造方法处也要重复写几百行代码,非常麻烦哈所以我们希望在构造方法赋值前先调用其上面的无参构造方法,我们来修改一下这个实例:看下效果,发现已经通过一个样构造方法调用本类中其他的构造方法了哈如果在另外一个构造方法中也调用其他构造方法了,即所有的构造方法是可以不断的循环调用的时候,则会出错:总结:在使用this调用构造方法时,至少留一个构造方法(里面是不包含this),作为构造方法的出口。另外如果使用this调用构造方法,则必须放在构造方法的首行。我们来验证下,将this()与和this.age换个位置,这样我们发现当name和age已经赋值完毕后,就不会执行this()了,这样程序就会报错,我们来看下实例现在我们来看下this最重要的一个特点:表示当前对象。谁调用了这个方法,则this就表示那个对象。我们来看下面的实例哈如果要想使用this的操作,在JAVA EE比较常见的只有一种叫做对象比较的情况最为常用前提的概念:JAVA中有一个特点,说私有属性是不能被对象直接访问的,私有属性是可以在同一类中直接进行访问的。综合应用以上的特性(this表示当前对象及私有属性是可以在同一类中直接进行访问的概念),就可以得出一个程序:比较两个对象是否相等。我们看一下本季最后一个实例ooDemo10哈上面的程序也可以简写成这样:ooDemo10在定义p1、p2时,我们修改一下年龄不一样滴话,程序输出应该是false,我们验证一下。ok,验证正确是false哈这就是一个对象比较的基本模型,通俗滴说哈就是拿自己出发与其他人做比较。this表示当前对象在此实例中用得比较多哈总结1、对象的引用传递和方法中接收参数的情况2、this关键字的使用 属性重名时,可以通过this找到类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论