黑马程序员-Java基础-面向对象-类和对象、封装、构造函数、this、static、饿汉式&懒汉式

第一讲  面向对象概念

1、  定义

相对于与面向过程而言的,将功能封装进对象,我们只关心具备了该功能的对象,而不用关注对象的具体细节。

面向对象的特点:使复杂问题简单化。我们只关心什么对象能处理什么事情,而不用关心具体的实现细节。

2、  面向对象特征

封装、继承、多态。

第二讲  类和对象的关系

1、  概述

类就是:对现实生活中事物的描述,可以是实体的事物也可以是一件事等;

对象是:是某类事物的实例,实实在在存在的个体;

映射到java中,描述就是class定义的类。

具体对象就是对应java在堆内存中用new创建的实体。

2、  举例描述类和对象关系

如图中表示:图纸就是用于描述汽车的,而实际的汽车就是一个汽车实体。

图纸描述的内容有:汽车的属性(颜色、长度、宽度等),还描述了汽车的行为(开灯、启动等)。

第三讲  封装

1、  定义

封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式,可以利用public和private来实现封装。

好处:将变化隔离,便于使用,提高重用性,提高安全性

封装原则:将不需要对外提供的内容都隐藏起来;把属性都隐藏,提供公共方法对其访问。

2、  封装实例

代码中的age和name已经被封装在Person类中。

对外提供访问私有成员方式的原因是:可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作,提高代码健壮性。

第四讲  构造函数&构造代码块

1、  特点

1)       函数名是固定的,与类型相同;

2)       不用定义返回值类型,与void不同;

3)       不可以写return语句;

2、  构造函数应用

1)       对象一建立就会调用与之对应的构造函数;可以用于给对象进行初始化。

2)       当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数,方便该类进行初始化。

3)       当在类中自定义了构造函数后,默认的构造函数就没有了。

应用实例:可以定义多个构造函数,因为不同的实例对象初始化方式可能不同。

3、  构造函数与一般函数的区别

1)       构造函数是在对象一建立就执行,给对象初始化;

2)       一般函数是被对象调用时才执行,给对象添加对象具备的功能;

3)       一个对象建立,构造函数只运行一次,而一般方法可以被对对象多次调用;

4、  判断何时定义构造函数

当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中

5、  构造代码块

作用:给对象进行初始化。对象已建立就运行,而且优先于构造函数执行。

和构造函数的区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。

第五讲  this关键字

1、  This关键字

This代表的是:本类的对象,代表它所在函数所属对象的引用,即,那个对象在调用this所在的函数,this就代表哪个对象。

应用:

1)         用于区分局部变量和成员变量同名情况,如下:

2)         当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。

2、  This在构造函数互调中的应用

用于构造函数之间进行互相调用。

注意:语句只能定义在构造函数的第一行,因为初始化要先与执行(当调用一个构造函数时,函数体内的this()就相当于初始化)

第六讲  static关键字

1、  static作用

用于修饰成员(成员变量、成员函数)。

被static修饰的内容将被对象所共享,内存中将该内容和对象分开存储。

2、  特点

1)        随着类的加载而加载,随着类的消失而消失,生命周期最长;

2)        优先于对象而存在,静态是先存在,对象是后存在;

3)        被所有对象所共享;

4)        可以直接被类类型所调用

3、  实例变量和类变量(被static修饰的成员变量)的区别

1)         内存中的位置

l  类变量随着类的加载而存在于方法区(共享区/数据区)中;

l  实例变量随着对象的建立而存在于堆内存中;

2)         生命周期

l  类变量生命周期最长,随着类的加载而加载,随着类的消失而消失;

l  实例变量生命周期随着对象的加载而加载,随着对象的消失而消失;

4、  静态使用注意事项

1)        静态方法只能访问静态成员

因为静态方法随着类的加载而加载,但非静态成员依赖于实例对象的创建而产生,静态方法和非静态成员的生命周期不同,在调用时会出现错误,因此静态方法不能调用非静态成员。但非静态方法既可以访问静态也可以访问非静态

2)        静态方法中不可以定义this,super关键字

因为静态优先于对象存在,而this、super代表的是实例对象。

3)        主函数是静态的

l  主函数:一个特殊的函数,作为程序的入口,可以被jvm调用。

l  主函数的定义:

l  Public:代表着该函数访问权限是最大的;

l  Static:代表主函数随着类的加载就已经存在了。

l  Void:主函数没有具体的返回值。

l  Main:不是关键字,但是是一个特殊的单词,可以被jvm识别。

l  (string[] args):函数的参数,参数类型是一个数组,该数组中的元素是字符串,字符串类型的数组。

特点:主函数是固定格式的,只有这样才能被jvm识别;同时主函数也有一般函数的特性,可以被重载

5、  静态的优劣

1) 优点:可以对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份。静态成员可以被类名直接调用,而非静态成员必须通过对象来调用。

2) 劣势:生命周期过长。访问出现局限性,静态方法只能访问静态成员

6、  什么时候使用静态

1)  什么时候定义静态变量

当对象中出现共享数据时,该数据可以被静态所修饰;对象的特有数据须定义为非静态的,存放于堆内存对应的对象空间中。

2)  什么时候定义静态函数

当功能内部没有访问到非静态数据(对象的特有数据)时,可以将此函数定义为静态的。

7、  静态代码块和非静态代码块

1)      静态代码块:随着类的加载而执行,只执行一次,并优先于主函数执行,用于给类进行初始化。

2)      构造代码块:随着实例对象的创建而执行,每创建一个对象就会被执行一次,属于实例对象。

执行顺序:静态代码块——>主函数——>构造代码块

书写格式:

Static

{

静态代码块中的执行语句。

}

第七讲  单例设计模式

1、  概念

设计模式:解决某一类问题最行之有效的方法,java中有23种设计模式。

单例设计模式:解决一个类在内存中只存在一个对象的问题

2、  解决对象唯一性的方法

1)        禁止其他程序建立该类对象:将构造函数私有化;

2)        为了让其他程序可以访问到该类对象,需要在本类中自定义一个对象;

3)        为了能让其他程序访问到该类中对象,需要对外提供一些访问方式:提供一个公开的方法来获取该类对象

3、  单例设计模式表现形式

1)        饿汉式:类一被加载,就会在堆内存中创建该类对象。

2)         懒汉式:只有方法被调用时,才会创建对象。

懒汉式的缺点:当创建对象的函数同时被多个程序调用时,懒汉式可能会出现错误。

解决方法:可以通过锁定(synchronized)来解决这个问题,而且通过双重判断对象是否为空,来稍微提高运行效率。

时间: 2024-07-31 14:29:03

黑马程序员-Java基础-面向对象-类和对象、封装、构造函数、this、static、饿汉式&懒汉式的相关文章

黑马程序员——java基础--面向对象3

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.概述 1.设计模式 解决的问题:保证一个类在内存中的对象唯一性. 比如:多程序读取一个配置文件的时候,建议配置文件封装成对象,会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的. 2.如何保证对象唯一性呢? 思想: 1.不让其他程序创建该对象 2.在本类中创建一个本类对象 3.对外提供方法,让其他程序获取这个对象 步骤: 1.将构造函数私有

黑马程序员——Java基础---面向对象(下)

一.概述 面向对象除了封装.继承和多态三大特征之外,还有其他的特性,例如abstract抽象.interface接口等,抽象类主要作为多个类的模板,而接口则定义了多类应该遵守的规范,final关键字让java实现不可变类,让系统更加安全. 二.正文 1.构造器和初始化块 1.1 构造器 构造器是一种特殊方法,这个特殊方法用于创建实例时执行初始化,是创建对象的重要途径,如果程序员没有为JAVA类提供任何构造器,则系统会为这个类提供一个无参数的构造器,这个构造器的执行体为空,不做任何事情.无论如何,

黑马程序员——Java基础---面向对象

-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 2015-05-06 一.理解面向对象 面向对象的特点: 1. 是一种符合人们思考习惯的思想 2. 可以将复杂的事情简单化 3.将程序员从执行者转换成了指挥者 完成需求时: a)先要去找具有所需的功能的对象来用. b) 如果该对象不存在,那么创建一个具有所需功能的对象. c) 这样简化开发并提高复用. 在Java的开发过程,其实就是不断的找对象,建立对象,维护对象.设计的过程,

黑马程序员----java基础----面向对象思想和类的概述

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 面向对象(掌握) (1)面向对象 面向对象是基于面向过程的编程思想. 面向对象和面向过程的区别:面向过程强调的是每一个功能的具体步骤.面向对象强调的是对象,然后由对象去调用功能. (2)面向对象的思想特点 A:是一种更符合我们思考习惯的思想 B:把复杂的事情简单化 C:让我们从执行者变成了指挥者 举例: 买电脑 面向过程:了解电脑---了解自己的需求---对比电脑参数---去中关村买电脑--买

黑马程序员-Java基础-面向对象—多态、Object类、内部类、异常

第一讲  多态 1.  定义 可以理解为事物存在的多种体现形态. 在java中,当函数的功能内容不确定时,可以将此方法定义为抽象方法,让其子类去实现.当子类对象不同时,调用同一个函数名,会执行不同的函数体,得到不同的结果,从而体现了多态性. 2.  多态的体现形式 父类的引用指向了自己的子类对象:Fu f = new Zi(): 父类的引用也可以接受自己的子类对象: 3.  多态的前提条件 必须是类与类之间有关系,要么继承,要么实现(接口): 函数之间存在覆盖(重写): 4.  多态的好处 大大

黑马程序员——Java基础---面向对象之理解

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 面向对象之理解 一:理解面向对象           1,什么是对象 对象就是实际生活中的事物,可以说一切事物都是对象.   如:桌子,椅子,电脑,电视机等. 对象的3个主要特征: a)对象行为:这个对象能做什么,既可以让这个对象完成什么

黑马程序员——Java基础---面向对象之抽象

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流!-------    面向对象之抽象 抽象类(abstract) (1)只抽取了很多类的方法的声明,为了保证不出问题,方法声明用abstract修饰. (2)抽象类的特点 A:一个类如果有了抽象方法,那么这个类必须是抽象类.抽象类里边可以没有抽象方法. B

黑马程序员——Java基础---面向对象之多态

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流!                                                                     面向对象之多态 一:多态的概念  多态性在实际中的含义就是不同的对象有相同的一般轮廓或形态,但具体执行的过程却大相径庭

黑马程序员--java基础--面向对象

------- android培训.java培训.期待与您交流! ---------- 面向对象的概述: 举例装大象到冰箱.而谈面向对象,就一定要说说面向过程. 面向过程:打开冰箱,装入大象,关上冰箱.这三步就是面向过程的思考方式,这种思想强调的是过程,也可以叫做动作.在C中是这种方式 面向对象:冰箱打开,冰箱存储,冰箱关闭.这就是面向对象的思考方式,这种方式强调是对象,也可以说是实例.在java,C++,C#中使用. 面向对象的特点 1.面向对象的思想符合人们惯有的思考方式. 2.面向对象的出