欢迎来到天天文库
浏览记录
ID:35294350
大小:129.55 KB
页数:8页
时间:2019-03-23
《day08(继承单列设计)总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Day08总结上午:1、静态代码块:格式:Static{静态代码块中的执行语句。}特点:随着类的加载而加载而且只执行一次,类一加载静态代码块就执行。作用:用于给类进行初始化的,注意区别构造代码块:给对象都进行初始化。代码实现:Eg:ClassStaticCode{Static//开始执行静态代码块{System.out.println("a");}Publicstaticvoidshow(){Sop("showrun");}}ClassStaticCodeDemo{Static//静态代码块,对类进行初始化最开始执行。{Sop(
2、"b");}Publicstaticvoidmain(String[]args){//newStaticCode();//调用staticCodel类StaticCodes=null;}Static//第二步执行。{Sop("c");}}2、单列设计模式:a)什么是设计模式:解决某一类问题最行之有效的方法。b)单列设计模式:解决一个类在内存中只存在一个对象。i.为了避免其他程序过多的建立该类对象。先控制禁止其他程序建立该类对象ii.还为了让其他程序可以访问到该类对象只好在本类中自定义一个对象。iii.为了方便其他程序对自定义对象
3、的访问可以对外提供一些访问方法。怎么代码体现:1、将构造函数私有化。2、在类中创建一个本类对象。3、提供一个方法可以获取到该类对象。代码体现:Eg:ClassSingle恶汉式:定义单列时,建议使用恶汉式。{Privateintnum;PublicvoidsetNum(){}PublicintgetNum(){}PrivatestaticSingles=newSingle();//这里要加static因为下面方法中访问到了s.静态只能访问static的。//为什么要私有?对成员数据可控?因为方法很有可能有参数,所以不用把S暴露出
4、去,加private;PublicstaticSinglegetIntnstance(){Returns;}}ClassSingleDemo{Publicstaticvoidmain(String[]args){Singles1=Single.getInstance();Singles2=Single.getInstance();S1.getNum(23);Sop(s2.getNum());//结果为23Singles2=newSingle();Singles1=newSingle();S1.getNum(30);Sop(s2.
5、getNum());//0Students1=Student.getStudent();Students2=Student.getStudent();S1.setAge(40);S2.setAge(50);}}ClassStudent{Privateintage;PrivatestaticStudents=newstudent();PrivateStudent(){}PublicstaticStudentgetStudent(){Returns;}PublicvoidsetAge(intage){This.age=age;}Pu
6、blicintgetAge(){returnage;}}内存分析:首先类进入内存,将类中的方法加载进方法区中,此时Person类中还定义了一个Person类型的p并默认初始化为null;此时在堆内存中创建一个对象newPerson并对其age属性进行默认初始化值为0;并分配其内存地址值为0x0045,并将此地址值赋值给栈内存中的p1=0x0045,此时p1通过该地址值指向堆内存中的age.此时Person()加载进入栈内存,它里面有this和age,this指向的当前调用该方法的对象p1.此时p1将指向堆内存中的地址值赋值给th
7、is.Person类方法通过该地址值指向堆内存中的实体。然后将5赋值给堆内存中的实体。此时堆内存中的age=5;然后Person方法弹栈。调用Person类的getInstance()方法加载进入栈内存,然后加地址值返回方法区中的p。此时方法区中的Person指向堆内存中的实体。然后弹栈。此时Personp1=newPersonInstance();执行完毕,第二条语句同理。当执行完之后,p2=0x0045指向堆内存中的同一实体。P1调用Person类中的setAge的方法,对堆内存中的实体进行赋值。此时age=40;s2调用P
8、ersonl类中的setage方法,对堆内存中的实体进行赋值。此时age=50.最后实体中的age的值为50;单列设计的另外一种方式:单列延迟加载方式:只有对象被调用的时候才会被加载,才被初始化,称之为懒汉式。代码实现:rEg:ClassSingle{Priva
此文档下载收益归作者所有