黑马程序员——面向对象
来源:互联网 发布:安卓数独源码 编辑:程序博客网 时间:2024/06/08 06:35
< 今日心情 >塞满电池加上酱油,fighting!
一、 面向对象的概念
1.面向对象是一种思想
一个小孩的诞生,都会有哪些属性呢?
姓名(小名):狗蛋生日:某年某月某日(某时)动作(方法):哭基本上,不管李家生了个小孩,还是孙家生了个,我们都会去做这些动作,这个就是面向过程的。
面向过程:
强调的是功能行为。
现在我们不这么做了。我们把这些过程封装起来形成一个具有属性和功能的类,每次诞生一个小孩只需一个命令调用这个类来创建出一个对象(具体过程交由jvm来实现),那么这个对象就有了这些功能和属性,我们只需要对这个对象进行操作即可。这就是面向对象思想。
面向对象:
将功能封装进对象,强调具备了功能的对象。
面向对象和面向过程都是一种思想,面向对象是基于面向过程而言的。
2.面向对象特点
是一种符合人们思考习惯的思想;
可以将复杂的事情简单化;
将程序员从执行者转换成了指挥者;完成需求时:
先要去找具有所需的功能的对象来用;如果该对象不存在,那么创建一个具有所需功能的对象;这样简化开发并提高复用。3.面向对象开发,设计,特征
开发的过程:
其实就是不断的创建对象,使用对象, 指挥对象做事情。
设计的过程:
其实就是在管理和维护对象之间的关 系。
面向对象的特征:
封装(encapsulation)继承(inheritance)多态(polymorphism)
二、 类和对象的关系
1.类与对象
李家生了一个小孩,叫狗蛋,要想创建这个对象就要有描述小孩的类。孙家又生了一个小孩,叫臭蛋,难道还要定义一个臭蛋的类吗?
姓名这个属性是该类对小孩的描述,至于具体叫什么就不管了,那是对象要做的事。
那么类和对象到底有什么关系呢?
其实类就是:对现实生活中事物的描述。
对象是:与描述相符合的一个实实在在的个体。
创建对象就是将描述具体化,细致化,就是将类中的属性赋予具体的值。
注:不能单独的为了建造一个汽车去建造一个汽车厂,同样不能为了实现一个或一些功能而单独定义类,类是对有共性属性和方法的事物的描述。
2.类的定义
类是事物的描述,描述的就是事物的属性和行为。定义类其实就是在定义属性和行为。理所当然,定义在类中的属性和行为都是该类的成员,属性就是成员变量(类中定义的变量),行为就是成员函数(类中定义的函数)。类中的变量有成员变量和局部变量。成员变量:
成员变量定义在类中,在整个类中都可以被访问。成员变量随着对象的建立而建立,存在于对象所在的堆内存中。局部变量:成员变量有默认初始化值。
局部变量只定义在局部范围内,如:函数内,语句内等。局部变量存在于栈内存中。作用的范围结束,变量空间会自动释放。
局部变量没有默认初始化值。
注:在函数中定义了与成员变量相同的局部变量,如果不加描述,在该函数中访问和修改的都是局部变量,对应的成员变量与函数操作无关。
在一个叫狗蛋小孩抱着一个叫狗蛋的小狗,小狗的死活对小孩并无关系。
2.创建对象
对象在内存中的结构:
只要是个小孩他都会哭,现在我只想听听这种哭声怎么办?(好邪恶啊!)
可以这么做:new Baby.ku();
这就是匿名对象及调用。单独匿名一个对象一般没有意义。
匿名对象是对象的简写形式。
匿名对象使用情况:
当对对象方法仅进行一次调用的时;
匿名对象可以作为实际参数进行传递。
三、 封装
是指隐藏对象的属性和实现细节,仅对外提供 公共访问方式。小孩哭都是有原因的,环境原因或者生理原因都会造成小孩哭,所以对象外部不需要单独访问小孩的哭行为。只需要用private修饰这个哭方法一下就可以了,这也是一种封装。private :私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)。
私有只在本类中有效。将ku()似有后,即使创建对象,通过对象也不能直接调用这个方法。小孩也是个人,你不能随便让它哭。想让他哭怎么办?杀掉他的狗狗,肯定能让他哭起来的(我又邪恶了,^_^)。成员变量也可以似有化,外部想访问,只能通过类中的成员函数,没有提供这种成员函数外部就不能访问了。
四、 构造函数
小孩出生时往往都伴随着一个哭的动作,但是ku()已经被私有了,怎么办?此时再通过“杀狗”来让小孩哭已经不现实,再者说,哭是伴随着出生而发出的动作,此时就需要一个构造函数。注:在创建对象的时候就完成的动作放在构造函数中。构造函数的特点:
函数名与类名相同;
不用定义返回值类型;
不可以写return语句。作用:
给对象进行初始化。
默认构造函数:在不给类添加构造方法时,类中有一个默认的构造空参数空内容的构造函数。
一个类中可以有多个构造函数,也就是说构造函数可以且必须重载
注意:一旦手动添加了构造函数,程序中的默认构造函数就不存在了。
构造代码块:
格式:一对独立的大括号。
作用:
给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
和构造函数的区别:
构造代码块是给所有对象进行统一初始化,
而构造函数是给对应的对象初始化。
五、 this关键字
前面说过,局部变量的名字和成员变量的名字一样时,在方法中访问的是局部变量,那么如何让局部变量的值传递给同名的成员变量呢?似乎this可以区别同名的局部变量和成员变量,这是为什么呢?this:就代表本类的对象;代表它所在函数所属对象的引用。
其实就是在对哪个对象操作就代表了哪个对象。
在构造函数中可以使用this()来调用其他重载的构造函数,参数的多少和类型与被调用者一致。如:注意:构造函数间调用,this必须放在构造函数的第一行。
this的应用:
当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
但凡本类功能内部使用了了本类对象,都用this表示。
六、static关键字
在对事物进行描述时往往会有一些通用的属性值,比如描述一个圆的时候,π一样的。小孩也有这样的值,比如:两个胳膊两条腿,一个脑袋一张嘴这个时候我们用static来修饰这些变量或方法。被修饰后的成员具备以下特点:
随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用
注意:
访问被static修饰的成员:静态方法只能访问静态成员
静态方法中不可以写this,super关键字
主函数是静态的
类名.被static修饰的变量名
类名.被static修饰的函数名
七、static关键字的应用
static修饰构造函数
单例设计模式:
禁止外部创建对象。
自身提供一个本类对象给外部使用。
保证了本类对象的唯一性。
static修饰代码块
静态代码块:随着类的加载而运行,只运行一次。
- 黑马程序员—面向对象
- 黑马程序员—面向对象
- 黑马程序员—面向对象
- 黑马程序员——面向对象1:理解面向对象
- 黑马程序员———-面向对象
- 黑马程序员———面向对象
- 黑马程序员———面向对象
- 黑马程序员———面向对象
- 黑马程序员———面向对象
- 黑马程序员——面向对象
- 黑马程序员——面向对象总结
- 黑马程序员——面向对象
- 黑马程序员——C#面向对象
- 黑马程序员——面向对象
- 黑马程序员——面向对象
- 黑马程序员——java面向对象
- 黑马程序员——C#面向对象
- 黑马程序员——面向对象1
- 第五周项目一之体验常成员函数
- LinkedList的基本用法
- 第五周阅读程序3:对象指针小结
- HDU2723 Electronic Document Security【字符串】【水题】
- jsp编译后的文件位置(Eclipse和tomcat)
- 黑马程序员——面向对象
- web报表工具FineReport常用函数的用法总结(报表函数)
- 第五周 课后实践:项目二——对象作为数据成员
- asd
- zxc
- 第五周 课后实践--阅读程序(3,4,5,6)
- EMV技术学习和研究-脱机数据认证之SDA
- 第五周项目五
- Mysql索引会失效的几种情况分析