java课件第八版第九章中文版.ppt
《java课件第八版第九章中文版.ppt》由会员分享,可在线阅读,更多相关《java课件第八版第九章中文版.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、不变对象与类不变对象与类:l不变对象:不变对象:指在实例化后其外部可见状态无法更改的对指在实例化后其外部可见状态无法更改的对象。象。l不变类:不变类:生成不可变对象的类。生成不可变对象的类。例如:例如:l不变类不变类:Boolean,Byte,Character,Double,Float,Integer,Long,Short,String.l可变类可变类:StringBuffer,java.util.Date 等等l不变对象的好处不变对象的好处:l只能处于一种状态,所以只要正确构造了它们,就决只能处于一种状态,所以只要正确构造了它们,就决不会陷入不一致的状态。不会陷入不一致的状态。l不必复制或
2、克隆不变对象,不必复制或克隆不变对象,就能自由地共享和高速缓就能自由地共享和高速缓存对它们的引用;也可以高速缓存它们的字段或其方存对它们的引用;也可以高速缓存它们的字段或其方法的结果,而不用担心值会变成失效的或与对象的其法的结果,而不用担心值会变成失效的或与对象的其它状态不一致。它状态不一致。l它们本来就是它们本来就是线程安全的线程安全的,所以不必在线程间同步对它,所以不必在线程间同步对它们的访问。们的访问。这可以极大地简化编写并发程序的过程,并减少程序可能存在的潜在并发错误的数量。l线程安全问题发生在当多个线程正在试图并发地修改一个对象的状态(写写-写冲突写冲突)时,或当一个线程正试图访问一
3、个对象的状态,而另一个线程正在修改它(读读-写和写和写写-读冲突读冲突)时。要防止这样的冲突,必须同步对共享对象的访问,以便在对象处于不一致状态时其它线程不能访问它们。l类不变条件:l所有成员都是private。l不提供对成员的修改器方法(setXXXX)。l没有可变成员的访问器方法(可变成员引用getXXXX)举例:三条件缺一不可public class T9ChangableClass public static void main(String args)ChangableClass c=new ChangableClass(original value);System.out.prin
4、tln(c.getSB().toString();c.getSB().append(is changed);System.out.println(c.getSB().toString();class ChangableClass private StringBuilder sb;public ChangableClass(String sb)this.sb=new StringBuilder(sb);public StringBuilder getSB()return sb;l本例的类具备前两条件,即类ChangableClass属性全部私有,且无setter。但对象构造后内容仍可变-状态可变
5、!。this引用:l代指实例本身的引用。因而,与类的实例有关。l作用一:当方法中的局部变量与实例变量同名时,实例变量被隐藏,为访问该实例变量,需要在实例变量名前加this引用。l作用二:用在构造器中,调用重载的构造器。this(参数表);/调用有参构造或this();/调用无参构造l调用构造器时必须在其他语句前出现,否则编译错误!Super()也不行!l有参构造必须显式调用!l举例(作用二):测试如下内容l隐含this(用于限定构造器中的变量)l显式this调用重载构造器(无参中均先调用有参)l默认无参构造器调用及顺序l无参中均先调用有参是否导致父类构造器重复调用?!publicclassT9
6、Thispublicstaticvoidmain(Stringargs)Sonson=newSon();/用无参构造器生成实例classGrandfatherprivateStringname=grandPa;publicGrandfather()/无参构造器,隐式调用this(grandfather);System.out.println(name);publicGrandfather(Stringname)/有参构造器,须显式调用System.out.print(name);classFatherextendsGrandfatherprivateStringname=dadi;public
7、Father()/无参构造器,隐式调用this(father);System.out.println(name);publicFather(Stringname)/有参构造器,须显式调用System.out.print(name);classSonextendsFatherprivateStringname=son;publicSon()this(son);System.out.println(name);publicSon(Stringname)System.out.print(name);使用无参构造时:调用父类无参构造器时刻使用有参构造时:调用父类无参构造器时刻l只使用无参构造器时的运行
8、结果。l父类构造器隐式调用,并按继承层次上从上到下顺序构造。l子对象的构造包含父对象的构造。l父类无参构造器只会调用一次!子类无参构造器调用自己的有参构造器不会导致两次隐式调用父类无参构造。l将Sonson=newSon();换成:Sonson=newSon(“child”);运行结果。同样,隐式调用父类构造器。问题:下述程序执行结果?lclassTeacherintvar;Teacher(doublevar)this.var=(int)var;Teacher(intvar)this(hello);Teacher(Stringvar)this();System.out.println(var)
9、;Teacher()System.out.println(goodbye!);publicstaticvoidmain(Stringargs)Teachert=newTeacher(5);super关键字:l子类构造时要隐式调用父类的无参构造器,能否显式调用父类的构造器去初始化父类呢?如能,则对父类对象的初始化可依据需要灵活进行。lsuper指当前对象的父类的关键字。l一定想要在子类中访问继承父类的同名属性子类中访问继承父类的同名属性,使用super.属性名属性名来访问(问题:不同名如何?)l访问父类被子类覆盖的方法也用super.方法名方法名(问题:未被子类覆盖的方法如何?)lSuper和t
10、his不同,它不是引用!Super只限于子类内部使用;this可传到类的外部去!使用super:publicclassT9UsingSuperpublicstaticvoidmain(Stringargs)UsingChildt=newUsingChild();System.out.println(t.getSuperField();System.out.println(t.callSuperMethod();classUsingParentStringname;UsingParent(Stringname)this.name=name;StringgetName()returnname;cl
11、ass UsingChild extends UsingParent /子类全覆盖父类成分子类全覆盖父类成分 String name=child;UsingChild()super(parent);/显式调用父类有参构造器显式调用父类有参构造器 public String getName()return name;public String getSuperField()System.out.print(Return the field value of super:);return super.name;/访问父类同名属性访问父类同名属性 public String callSuperMet
12、hod()System.out.print(Calling the method of super:);return super.getName();/访问被子类覆盖的父类方法访问被子类覆盖的父类方法 完全同父类l可见不是子类构造器中使用super时,无第一条语句约束。l显式调用父类构造器则必须第一条语句。举例:测试this引用可赋值给其类类型的变量publicclassT9AssignThispublicstaticvoidmain(Stringargs)AssignThist=newAssignThis();AssignThiss=t.getThis();System.out.printl
13、n(s.name);classAssignThispublicStringname=Test;AssignThisas;AssignThis()as=this;publicAssignThisgetThis()returnas;举例:测试super不是引用publicclassT9AssignSuperpublicstaticvoidmain(Stringargs)AssignSupert=newAssignSuper();AssignParents=t.getSuper();System.out.println(s.name);classAssignParentpublicStringnam
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课件 第八 第九 中文版
限制150内