黑马程序员java培训就业班笔记day08(继承单列设计)总结.doc

上传人:自*** 文档编号:124579939 上传时间:2020-03-12 格式:DOC 页数:8 大小:91KB
返回 下载 相关 举报
黑马程序员java培训就业班笔记day08(继承单列设计)总结.doc_第1页
第1页 / 共8页
黑马程序员java培训就业班笔记day08(继承单列设计)总结.doc_第2页
第2页 / 共8页
黑马程序员java培训就业班笔记day08(继承单列设计)总结.doc_第3页
第3页 / 共8页
黑马程序员java培训就业班笔记day08(继承单列设计)总结.doc_第4页
第4页 / 共8页
黑马程序员java培训就业班笔记day08(继承单列设计)总结.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《黑马程序员java培训就业班笔记day08(继承单列设计)总结.doc》由会员分享,可在线阅读,更多相关《黑马程序员java培训就业班笔记day08(继承单列设计)总结.doc(8页珍藏版)》请在金锄头文库上搜索。

1、Day08总结上午:1、 静态代码块:格式:Static静态代码块中的执行语句。特点:随着类的加载而加载而且只执行一次,类一加载静态代码块就执行。作用:用于给类进行初始化的,注意区别构造代码块:给对象都进行初始化。代码实现:Eg:Class StaticCodeStatic/开始执行静态代码块System.out.println(a);Public static void show()Sop(show run);Class StaticCodeDemoStatic/静态代码块,对类进行初始化最开始执行。Sop(b);Public static void main(String args)/ne

2、w StaticCode();/调用staticCodel类StaticCode s=null;Static/第二步执行。Sop(c);2、 单列设计模式:a) 什么是设计模式:解决某一类问题最行之有效的方法。b) 单列设计模式:解决一个类在内存中只存在一个对象。i. 为了避免其他程序过多的建立该类对象。先控制禁止其他程序建立该类对象ii. 还为了让其他程序可以访问到该类对象只好在本类中自定义一个对象。iii. 为了方便其他程序对自定义对象的访问可以对外提供一些访问方法。怎么代码体现:1、 将构造函数私有化。2、 在类中创建一个本类对象。3、 提供一个方法可以获取到该类对象。代码体现:Eg:C

3、lass Single 恶汉式:定义单列时,建议使用恶汉式。Private int num;Public void setNum()Public int getNum()Private static Single s=new Single();/这里要加static因为下面方法中访问到了s.静态只能访问static的。/为什么要私有?对成员数据可控?因为方法很有可能有参数,所以不用把S暴露出去,加private;Public static Single getIntnstance()Return s;Class SingleDemoPublic static void main(String

4、args)Single s1=Single.getInstance();Single s2=Single.getInstance();S1.getNum(23);Sop(s2.getNum();/结果为23Single s2=new Single();Single s1=new Single();S1.getNum(30);Sop(s2.getNum();/0Student s1=Student.getStudent();Student s2=Student.getStudent();S1.setAge(40);S2.setAge(50);Class StudentPrivate int ag

5、e;Private static Student s=new student();Private Student()Public static Student getStudent()Return s;Public void setAge(int age)This.age=age;Public int getAge()return age;内存分析:首先类进入内存,将类中的方法加载进方法区中,此时Person类中还定义了一个Person类型的p并默认初始化为null;此时在堆内存中创建一个对象new Person 并对其age属性进行默认初始化值为0;并分配其内存地址值为0x0045,并将此地

6、址值赋值给栈内存中的p1=0x0045,此时p1通过该地址值指向堆内存中的age.此时Person()加载进入栈内存,它里面有this 和age,this指向的当前调用该方法的对象p1.此时p1将指向堆内存中的地址值赋值给this.Person类方法通过该地址值指向堆内存中的实体。然后将5赋值给堆内存中的实体。此时堆内存中的age=5;然后Person方法弹栈。调用Person类的getInstance()方法加载进入栈内存,然后加地址值返回方法区中的p。此时方法区中的Person指向堆内存中的实体。然后弹栈。此时Person p1=new PersonInstance();执行完毕,第二条语

7、句同理。当执行完之后,p2=0x0045指向堆内存中的同一实体。P1调用Person类中的setAge的方法,对堆内存中的实体进行赋值。此时age=40;s2调用Personl类中的setage方法,对堆内存中的实体进行赋值。此时age=50.最后实体中的age的值为50;单列设计的另外一种方式:单列延迟加载方式:只有对象被调用的时候才会被加载,才被初始化,称之为懒汉式。代码实现:rEg:Class SinglePrivate Single()Private static Singel s=null;Public static Single getIntance()If(s=null)S=ne

8、w Single();Return s;因为多线程技术的存在,并发访问会造成懒汉式不安全。3、 继承:a) 概述:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无序再去定义这些属性和行为,只要继承那个类即可。b) 那多个类成为子类,单独这个类成为父类或者基类超类,c) 子类可以直接访问父类重的非私有的属性和行为。d) 通过extends关键字让类与类之间产生继承关系。特点:1、 继承的而出现提高了代码的复用性。2、 继承的出现让类与类之间产生了关系,提供了多态的前提。3、 Java支持单继承,对于多继承,java保留了这种机制并进行了改良,避免了多继承调用时的不确定性。

9、它这个是发送端,首先 要关联你要发送的源文件,可以单独在对于使用一个继承体系。1、 查阅顶层类中的共性内容了解该体系的基本功能。2、 创建该体系的最子类对象。简单一句话:可以多个子类继承一个父类,但是不一个 类继承多个父类,在java中是不允许的。什么时候使用继承?当事物之间存在着所属关系时,就可以使用继承,所属:xxx是yyy的一种,即x继承y如果A真继承了B,B中的锁有的功能是不是A都具备了。继承子父类中的成员变化。 1、 成员变量:a) 当子父类中出现同名的成员变量时,可以使用super关键字来区分,父类的成员变量。b) Super和this用法很相似,this代表的是本类的对象,sup

10、er代表父类的所属的空间,c) 先有父类在有子类。面试中会出现,开发中几乎没有,因为父类的成员都是从下到上抽取的,子类中还保留相同的变量干嘛?2、成员函数 当子父类出现一模一样(返回值、函数名、参数列表全部相同)的函数时,就会出现调用时运行子类的方法的情况。 这种情况,形象成为覆盖或者重写或者覆写。 什么时候用覆盖? 当对一个类中的功能的内容进行重新定义时,可以定义该类的子类,并保留父类中的功能声明,重新定义功能内容,并建立子类对象调用该功能。 实现代码:/*当子父类中出现一模一样的函数时,就会出现调用时运行子类的方法的情况。这种情况,形象的称为 覆盖或者重写或者叫做覆写 override。什

11、么时候用覆盖?当对一个类中的功能的内容进行重新定义的时,可以定义该类的子类,并保留父类中的功能声明,重新定义功能内容。并建立子类对象调用该功能。覆盖小细节:1,子类方法覆盖父类方法时,权限必须大于等于父类的权限。2,静态只能覆盖静态,或者被静态覆盖。 */class Fupublic static void show()System.out.println(fu show);class Zi extends Fupublic static void show()System.out.println(zi show);class ExtendsDemo3 public static void m

12、ain(String args) /Zi z = new Zi();/z.show();/Phone p = new Phone();NewPhone p = new NewPhone();p.show();/描述手机。来单显示 显示 号码。class Phonevoid show()System.out.println(fu number);/*为了对Phone类中的来电显示功能进行改变。定义了一个子类,保留了父类中功能的声明,但是重新定义了功能的内容。这就是覆盖的应用。*/class NewPhone extends Phonevoid show()super.show();System.

13、out.println(name);System.out.println(pic);3、构造函数 特点: 在运行时,发现父类构造方法先运行了,然后才是子类构造函数。 原因:是因为子类的所有的构造函数中都有一句默认的隐式语句:super();会默认调用父类重空参数的构造函数。 为什么有super默认语句呢? 因为子类对象在初始化时,必须要到父类先去初始化。 为什么要到父类中去初始化呢? 因为子类继承了父类,可以获取父类中的数据,所以在使用父类数据之前必须要明确父类是如何对自己的成员进行初始化的。这也是子类一定要访问父类构造函数的原因。所以父类的构造函数有两个作用:1、给本类初始化如果父类中的没有

14、空参数的构造函数, 那么此时在手动就必须通过super语句或this语句指定要访问父类的构造函数。 注意:super关键字必须定义第一行。任何构造函数中的默认第一句都是super. 面试题:为什么super和this不能再构造函数中同时出现? 为什么super语句必须放在第一行? 因为只有父类初始化完之后才初始化子类。 Object是java中所有类的父类。 以上就是一个子类的实例化过程。实现代码:class Fu extends Object /int num ;Fu()/super();System.out.println(fu.);Fu(int x)/num = 10;System.out.println(fu run.+x);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号