




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 8 天面象 3回顾:成员变量和局部变量的区别:1, 从定义上来讲2, 从内存上来讲3, 从存活时间上来讲4, 从调用上来讲5, 从初始值上讲对象:创建的对象没有名称。(没有被任何对象 对象通常是用来只需要成员一次时,或)作为函数的参数在在封装:在程序中的体现就是函数和类隐藏事物的细节,但是需要对外提供一些可以 类中封装的体现:私有的成员变量,公有的可以这些细节的方式这些成员变量的函数构造函数: 在创建对象时,自动调用的函数。作用:对象初始化时使用程序中体现:1, 和类名相同2, 没有返回值类型,不书写 void3, 返回值结论:任何类中都有一个构造函数(或者是默认的构造或者是有参数的构造)
2、构造函数的调用有两种方式:1, 创建对象时,调用一次2, 在创建对象后,在自动调用的构造函数中,书写 this()语句,可以调用其它的构造函数第 8 天学习任务1、this 关键字 (掌握 this 关键字的使用)2、sic 关键字 (掌握sic 关键字的应用:静态方法、静态变量)3、静态方法的使用注意事项 (了解)4、main 方法的介绍 (了解)5、静态变量 (掌握)6、静态变量和成员变量的区别 (了解)7、代码块 (掌握两种代码块的使用:静态、构造)8、类加载和对象的创建过程 (9、总结类中能书写的成员 (了解)重点、必须非常清楚类的加载过程和对象的创建过程)10、单例设计模式 (必须掌
3、握。开发中会使用,面试也会用的)1、this 关键字this 表示:当前对象的。1.1 关键字 this 的作用之前在讲构造函数时,提过 this 关键字可以书写在一个构造函数中,调用其它的构造函数。:this 关键字的第二种作用通过分析:当构造函数中的参数(局部变量)和成员变量相同时,优先使用局部变量怎么区分构造函数中成员变量和局部变量(相同名称的)?使用 this 关键字,来区分成员变量和局部变量this 关键字的作用:1, 使用 this()语句调用其它的构造函数2, 使用 this.成员(属性/方法) 区分成员变量和局部变量修改之前的程序:使用 this.成员变量的方式1.2 this
4、 关键字的应用案例:比较学生中的同龄人小结:在开发中,this 就是用来调用其它的构造函数或量)调用其它的构造函数: this(参数列表);调用成员变量: this.成员变量名;调用成员函数: this.成员函数名(参数列表);成员变量(区分成员变量和局部变2、sic 关键字sic 关键字: 表示静态的。sic 属于一个修饰符号,用来修饰成员变量、成员函数的,不能用来修饰构造函数。sic 的使用格式:修饰成员变量:修饰成员函数:sicnum =100;sicvoidtest(String name)案例:在之前的 Student 类中添加一个新功能:睡觉通过分析:以上程序中 sleep 函数不
5、需要当前对象中的其它成员,而又具有相同的功能。创建两个不同的对象,就出现了堆内存空间浪费。使用 sic 修饰 sleep 函数,可以解决堆内存空间浪费的问题:在学习数组时,提过java 程序在内存中有 5 个区域:寄存器、本地方法区、方法区(存放sic 和class、还有其它)、堆、栈小结:被 sic 修饰的成员函数,称为静态成员函数。通常在静态函数的方式是通过类名来(在书写上也可以使用对象名来)静态成员函数的方式: 类名.静态函数名(参数列表)注意:在开发中,静态方法通常都是使用类名来调用的。(使用对象名也可以调用静态方法,但是底层还是会使用对象所属的类,通过类名来调用)例: stu.sle
6、ep();stu 所属的类:StudentStudent.sleep();结论:静态的成员和对象没有关系 。作业 :画以下程序的图解3、静态方法的使用注意事项在使用静态方法时,需要注意的事项:1, 静态方法,也称为类方法。使用类名去调用静态的方法。 例: 类名.静态方法()非静态的方法,也称为实例方法。使用对象名(实例名)来调用实例方法2, 静态方法中只能用)其它的静态方法或静态变量(非静态的成员在静态方法中不能使3,在静态方法中,不能存在thiper 关键字4、main 方法的介绍JVM 想要执行 main 方法:在使用 java MainDemo 命令时, JVM 会先去方法区中找 Mai
7、nDemo.class , 因为 MainDemo.class 在方法区中不存在,则 JVM 会把 MainDemo.class 加载到内存中的方法区下。在 MainDemo.class 加载完成之后,JVM 会自动调用 MainDemo.class 中的 main 函数。注意:如果 MainDemo.class 中没有 main 函数,则运行报错public:修饰符。 表示 main 函数可以被任何类所sic:修饰符。 静态的 main 不需要创建对象就可以使用。(为了让 JVM 自动调用 main)而静态的内容都是随着类的加载而存在的。void :表示返回值main:程序的名称。 不可以更
8、改。 被 JVM 自动识别调用String: 字符串数组agrs: 数组名称思考:在执行 java 命令时,java 命令后跟的是一个类的名称,为什么使用类名就可以了?只需要通过类名,就可以直接调用 main 函数。类名.main(null)案例:给 main 函数在调用时,传递参数回顾:this:指向当前对象作用:1,调用其它的构造函数; 2,区分成员变量和局部变量 this(参数列表)this.成员变量this.成员函数sic:用来修饰成员函数、成员变量被sic 修饰的成员会随着类的加载而存在sic 修饰的成员在内存中在方法区的静态区域下类的加载只有一次,下次再使用被加载过的类时,就直接去
9、方法区中找5、静态变量被 sic 修饰的成员函数,称为静态方法;被sic 修饰的成员变量,就称为静态变量需求:计算圆的面积通过分析:以上程序中存在堆空间浪费的问题解决方案:把成员变量 pi 修饰为 sic6、静态变量和成员变量的区别静态变量和成员变量的区别:1, 从所属上来讲:静态变量属于 类成员变量属于 对象2, 从调用上来讲:静态变量可以使用类名调用,还可以使用对象名调用成员变量只可以使用对象名调用3, 从内存静态变量成员变量上来讲:在方法区下的静态区域内在堆中4, 从加载时期上来讲:静态变量 是随着类的加载而存在 成员变量 是随着对象的创建而存在小结:静态函数中只能使用静态成员变量、调用
10、静态函数(不能使用非静态成员)非静态函数中可以直接使用静态成员变量、也可以调用静态方法(同时也可以使用非静态成员)7、代码块代码块:被一对 包含的代码,称为代码块代码块;在 java 程序中代码块有三种:静态代码块、构造代码块、局部代码块7.1 静态代码块静态代码块的定义格式:sic/代码静态代码块的特点:随着类的加载而调用,因为类只会被加载一次,所以静态代码块也只能被执行一次。静态代码块的作用:在开发中,有一种特殊需求:有一些数据或功能,需要在类被创建之前(使用 new 创建对象之前)就已经存在。这些必须存在于对象创建之前的数据会随着类的加载而去执行。例:在就业班会学习到使用 java 程序
11、连接数据库。数据库的驱动需要在程序正式运行之前就已经存在。案例:静态代码块的应用7.2 构造代码块构造代码块的定义格式:/代码块注意:构造代码块是书写类中的成员位置构造代码块的特点:是随着对象的创建而去执行的代码块。在创建对象时,会调用构造函数,而在执行构造函数中所书写的代码之前,存在隐式三步:1, 执行 super 语句2, 显式初始化堆空间中所有的非静态成员变量3, 执行构造代码块注意:只要创建一次对象,就会执行一次构造代码块。构造代码块的作用: 把多个构造函数中相同的代码提取出来,书写在构造代码块。案例:构造代码块的应用7.3 局部代码块局部代码块定义格式:/代码块注意:局部代码块是书写
12、在函数中作用:就是为了控制变量的存活范围案例:局部代码块的应用8、类加载和对象的创建过程类加载过程:1, JVM 会先去方法区中找有没有相应类的.class 存在。如果有,就直接使用;如果没有,则把相关类的.class 加载到方法区2, 在.class 加载到方法区时,会分为两部分加载:先加载非静态内容,再加载静态内容3, 加载非静态内容:把.class 中的所有非静态内容加载到方法区下的非静态区域内4, 加载静态内容:、把.class 中的所有静态内容加载到方法区下的静态区域内、静态内容加载完成之后,对所有的静态变量进行默认初始化、所有的静态变量默认初始化完成之后,再进行显式初始化、当静态区
13、域下的所有静态变量显式初始化完后,执行静态代码块5,当静态区域下的静态代码块,执行完之后,整个类的加载就完成了。对象创建过程:1, 在堆内存中开辟一块空间2, 给开辟空间分配一个地址3, 把对象的所有非静态成员加载到所开辟的空间下4, 所有的非静态成员加载完成之后,对所有非静态成员变量进行默认初始化5, 所有非静态成员变量默认初始化完成之后,调用构造函数6, 在构造函数入栈执行时,分为两部分:先执行构造函数中的隐式三步,再执行构造函数中书写的代码6.1、隐式三步:1,执行 super 语句(继承时讲解)2,对开辟空间下的所有非静态成员变量进行显式初始化3,执行构造代码块6.2、在隐式三步执行完
14、之后,执行构造函数中书写的代码7,在整个构造函数执行完并弹栈后,把空间分配的地址赋值给一个对象9、总结类中能书写的成员栈: 用来运行函数。可以特点:先进后出局部信息堆:用来实体(被 new 创建出来的)。特点:1, 每一个实体所开辟的空间都有一个地址2, 每一个实体中的数据都有一个默认初始值方法区:存放 class 和 sic。 方法区其实是由 N 多个小的区域。有存放非静态内容的非静态区域,还有存放静态内容的静态区域,还有存放常量的常量池等classClass1非静态成员变量静态成员变量非静态成员函数静态成员函数构造函数静态代码块构造代码块10、单例设计模式10.1 单例设计模式介绍设计模式
15、:最早于建筑领域,在建筑领域把一些问题和经验进行归纳总结,形成了一套可以用来在建筑领域解决大多数问题的方案后来计算机领域借鉴了建筑领域的设计模式,把在计算机领域中经常遇到的问题进行归纳和总结,形成计算机领域 23 种设计模式所谓的设计模式其实就是前人对一些常见的问题进行了总结,并给出了一些解决方案。在开发中,只在遇到这个常见问题,就可以直接使用这些设计模式解决问题单例(单态、原子)设计模式:解决程序中只能有一个对象。(在程序中所创建的对象是唯一的)生活中的单例场景:结论:单例设计模式解决就是对象在堆内存中只能开辟一个空间。10.2 单例设计模式的代码体现单例设计模式:就是用来解决创建的对象只能
16、有一个。(对象的唯一性)问题:怎么确保所创建的对象是唯一的呢?分析 1:只要使用 new 就可以创建对象。(可以创建多个对象)反向思考:不让使用 new 创建对象,就不存在堆中有对象的情况了。分析 2:不让使用 new 创建对象,堆中的唯一对象怎么出现?不让其它类创建对象,但是可以在本类中创建对象分析 3:创建的本类对象,只能在当前类中使用,其它的类怎么用呢?可以对外提供一个的接口,把本类对象返回给其它类使用基于以上分析,实现单例设计模式的代码步骤:问题 1:怎么不让其它类使用 new 创建对象?把构造函数修饰为 private(private 修饰的构造函数,其它不能创建对象)问题 2:不让
17、其实类创建对象,那么唯一存在的对象,怎么出现?在本类中创建一个属于本类自身的对象 问题 3:其它类中怎么使用创建出来的唯一对象?对外提供一个 public 方法,可以让其它类获取创建出来的唯一对象通过以上分析,单例代码体现:10.3 单例设计模式存在的小问题改进程序:把 Single 对象修饰为 private单例设计模式代码图解:10.4 单例设计模式的另一种体现单例设计模式代码的体现有两种:第一种:饿汉式单例的体现第二种:懒汉式单例(面试机率比较大)课后作业1、BT 面试题:画图分析以下程序(提示根据public class Demo2 结合上课讲解的类加载具体步骤去画图)public s
18、ick = 0;public sic Demo2 t1 = new Demo2(t1);public spublic s public s public sic Demo2 t2 = new Demo2(t2);icic ici = pr(i);j = pr(j); n = 99;pr(constructor code);sic prpublic s(sic code);icpr(String s) System.out.prln(i=+i +i;+k;+n;return i;+s+ k= + k + n= + n + j= + j);public Demo2(String string) pr(string);public sic void main(String args) Demo2 d=new Demo2(T);2、使用单例完成超人的例子懒汉式单例:1, 把本类中私有的对象初始为 null2, 在 getInstance 方法中,添加 if 判断语句,判断对象为 nul
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版广场儿童游乐场租赁协议
- 二零二五年度跨境贸易反担保抵押贷款合同范本
- 2025版防火涂料行业论坛宣传推广合同范本大全
- 二零二五年高效节能锅炉安装与节能补贴合同
- 2025年度购物卡预付卡发行与监管协议
- 2025年跨境电商平台服务及产品销售合同范本
- 二零二五版内部审计人员保密与合规合同
- 二零二五年度户外景观瓷砖铺设劳务合同标准样本
- 2025年4月打工.实践报告1
- 二零二五版企业人力资源总监职责与权益合同
- 神昏中医护理常规
- 现代家庭教育方法
- 肺炎患者的护理
- 站桩教学课件
- 外研版八年级英语下册期末复习之阅读还原【答案+解析】
- 2025年公务员考试时事政治模拟题附答案详解(模拟题)
- 2025年江苏省事业单位招聘考试教师招聘语文专业知识试卷(中学语文教师)
- 住院医师规范化培训教学病例讨论实施规范
- 2025-2030中国半导体产业链市场运行态势及前景展望与投资风险评估
- 化工工艺培训
- 2000-2015年考研英语一真题及详细解析
评论
0/150
提交评论